mysql系列教程(八)—–mysql数据查询之子查询

MySQL

前文给大家介绍过简单的增删改查了,今天介绍一个比较复杂的查询方式—子查询。

子查询

子查询语法:

SELECT select_list
FROM table
WHERE expr operator
        (SELECT select_list
         FROM table);
  • 子查询(内查询)在主查询之前执行完成。
  • 子查询的结果被主查询(外查询)使用。
  • 出现在其他语句内部的select语句,称为子查询或内查询。内部嵌套其他select语句的查询,称为外查询或主查询。示例代码:

select first_name from users where 
department_id in(
    select department_id from departments
    where location_id=1700
)

注意事项:

  • 子查询要包含在括号内
  • 将子查询放在比较条件的右侧
  • 单行操作符对应单行子查询,多行操作符对应多行子查询

单行子查询

  • 只返回一行
  • 使用单行比较操作符
    • =
    • >
    • >=
    • <
    • <=
    • <>
SELECT last_name
FROM users
WHERE salary >
        (SELECT salary
         FROM employees
         WHERE last_name = 'xiaoming');
#查询工资比xiaoming高德员工的名字

在子查询中使用组函数

子查询中的HAVING子句

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

多行子查询

  • 返回多行
  • 使用多行比较操作符
    • IN/NOT IN
    • ANY|SOME
    • ALL
SELECT employee_id, last_name, job_id, salary
FROM users
WHERE salary < ANY
        (SELECT salary
         FROM users
         WHERE job_id = 'IT')
AND job_id <> 'IT';
#查询除IT外其他部门中比IT任一员工工资低的员工信息
SELECT employee_id, last_name, job_id, salary
FROM users
WHERE salary < ALL
        (SELECT salary
         FROM users
         WHERE job_id = 'IT')
AND job_id <> 'IT';
#查询除IT外其他部门中比IT所有员工工资都低的员工信息

子查询就给大家介绍到这里,欢迎大家指正补充!

发表评论