SQL 基础之子查询(十一)

子查询:类型、语法、和注意事项

使用子查询能解决哪些问题?

子查询语法:

select select_list from table where expr operator (select select_list from table);

  • 子查询(内查询)在主查询(外查询)之前执行。
  • 主查询使用子查询结果。
  • 位置:select,where,from,having

1、查询谁的工资比Abel高

select last_name, salary from employees

where salary >

(select salary

from employees

where last_name = ‘Abel‘);

使用子查询注意事项

  • 子查询要包含在括号内。
  • 将子查询放在比较条件的右侧增强可读性(子查询可以出现在比较运算符的两侧)
  • 单行操作符对应单行子查询,多行操作符对应多行子查询

单行子查询:

– 子查询中的组函数

– HAVING 子句中的子查询

  • 只返回一行
  • 使用单行比较操作符
操作符 含义
= 等于
> 大于
>= 大于等于
< 小于
<= 小于等于
<> 不等于

select last_name, job_id, salary from employees

where job_id  in  (select job_id from employees

where last_name like  ‘Taylor‘)

and salary in

(select salary

from employees

where last_name like ‘Taylor‘);

在子查询中使用组函数

select last_name, job_id, salary from employees where

salary = (select min(salary) from employees);

子查询中的HAVING 子句

  • 首先执行子查询
  • 向主查询中的 HAVING 子句返回结果

select department_id, min(salary)

from employees

group by department_id

having min(salary) >

(select min(salary)

from employees

where department_id = 50);

多行子查询使用单行比较符,以下为错误写法

select employee_id, last_name

from employees

where salary =

(select min(salary)

from employees

group by department_id);

子查询中的空值问题

select last_name, job_id from employees

where job_id =

(select job_id from employees

where last_name = ‘haas‘);

多行子查询

– 使用 ALL 或 ANY

  • 返回多行。
  • 使用多行比较操作符。
操作符 含义
IN 等于列表中的任何一个值
ANY 必须在=, !=, >, <, <=, >= 操作符之前使用,与列表中每个值进行比较,如果没有返回任何行,说明计算结果为FALSE
ALL 必须在=, !=, >, <, <=, >=操作符之前使用,与列表中每个值进行比较,如果没有任何行返回,说明计算结果为TRUE

使用范例:

在多行子查询中使用 ANY

select employee_id, last_name, job_id, salary

from employees  where salary < any

(select salary

from employees

where job_id = ‘IT_PROG‘)

and job_id < > ‘IT_PROG‘;

在多行子查询中使用 ALL  操作符

select employee_id, last_name, job_id, salary

from employees

where salary < all

(select salary

from employees

where job_id = ‘IT_PROG‘)

and job_id <> ‘IT_PROG‘;

子查询中的空值

select emp.last_name

from employees emp

where emp.employee_id not in

(select mgr.manager_id

from employees mgr);

时间: 2024-11-03 01:35:34

SQL 基础之子查询(十一)的相关文章

SQL 基础之子查询、多表插入、merge 语句、跟踪一段时间数据变化(二十)

使用子查询处理数据 可以使用子查询中的数据操纵语言(DML)语句: 使用内嵌视图检索数据 从一张表向另一张表复制数据 基于另一张表的值更新表中数据 基于另一张表的值删除表中的行 使用子查询作为数据源检索数据 select department_name, city from departments natural join (select l.location_id, l.city, l.country_id from loc l join countries c on(l.country_id

SQL基础--&amp;gt;层次化查询(START BY ... CONNECT BY PRIOR)

--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR) --====================================================== 层次化查询,即树型结构查询,是SQL中经经常使用到的功能之中的一个,通常由根节点,父节点,子节点,叶节点组成,其语法例如以下: SELECT [LEVEL] ,column,ex

sql example 9 -- 子查询

sql example 9 – 子查询 sql example 9 – 子查询 数据库准备 create table student ( id int auto_increment primary key, name varchar(10) ); create table scores ( id int auto_increment PRIMARY key, score int default 0, foreign key (id) references student(id) on delet

MYSQL基础九--子查询和连接

1.子查询是出现在其他SQL语句内的SELECT子句. 子查询指嵌套在查询内部,且必须始终出现在圆括号内. 子查询可以包含多个关键字或条件,如DISTINCT,GROUP BY,ORDER BY,LIMIT,函数等. 子查询的外层查询可以是:SELECT,UPDATE,INSERT,SET或DO. 2.子查询的返回结果 子查询可以返回标量,一行,一列或子查询. 3.使用比较运算符的子查询 SELECT goods_id,goods_name,goods_price FROM tab_red WH

数据库基础(子查询、设置主键外键)

子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数: 另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表. 子查询示例: 练习一: 练习二: 练习三: 分页查询语句示例: 查看总共可以分为多少页: 主键        数据库主键是指表中一个列或列的组合,其值

SQL练习 高级子查询

• 书写多列子查询• 在 FROM 子句中使用子查询• 在SQL中使用单列子查询• 书写相关子查询• 使用 EXISTS 和 NOT EXISTS 操作符• 使用子查询更新和删除数据• 使用 WITH 子句 --多列子查询(不成对比较 & 成对比较)1. 查询与141号或174号员工的manager_id和department_id相同的其他员工的employee_id, manager_id, department_id [方式一]SELECT employee_id, manager_id,

在SQL Server的子查询、视图、内联函数等数据库对象中,不应该单独使用ORDER BY语句

我们知道在SQL语句中,ORDER BY语句可以用来排序.但是在SQL Server中,如果我们在子查询.视图.内联函数等数据库对象中单独使用ORDER BY语句是不允许的,来看下面的SQL语句: SELECT * FROM ( SELECT [ID],[Code],[Name],[Age],[Sex],[Class] FROM [dbo].[Student] ORDER BY [ID] DESC ) AS T_Student 执行该语句,SQL Server会报错,错误信息如下: The OR

SQL里的子查询

子查询必须遵守的规则 子查询必须位于圆括号内. 除非子查询里有多个字段让子查询进行比较,否则子查询的SELECT子句里只能有一个字段. 子查询里不能使用ORDER BY子句.在子查询里,我们可以利用GROUP BY子句实现ORDER BY功能. 返回多条记录的子查询只能与多值操作符(比如IN)配合使用. SELECT列表里不能引用任何BLOB.ARRAY.CLOB或NCLOB类型的值. 子查询不能直接被包围在函数里 操作符BETWEEN不能用于子查询,但子查询内部可以使用它. SELECT CO

SQL内外层嵌套子查询

先逐行扫描外部查询的每一行,让每一行与内部查询的表进行对比,满足内部查询where条件的返回真,不满足的返回假. 提醒:单独执行内部查询时会报错. 首先执行一次外部查询 对应外部查询的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值. 使用子查询的结果来确定外部查询的结果集. 例: 不同职工经手订单金额最大的订单信息 select a.* from 订购单 a where 金额 = (select max(金额) from 订购单 where 职工号=a.职工号) 不同