子查"/>

SQL 基础之子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);























































本文出自 “记录点滴学习生活” 博客,请务必保留此出处http://ureysky.blog.51cto.com/2893832/1906425

以上是关于SQL 基础之子查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础语法之子链接查询和特殊查询(union 和 limit)

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

SQL之子查询

sql之子查询

MySQL基础之子查询

SQL语句之子查询