SQL 子查询

子查询

在 SQL 中,子查询(Subquery)是一个嵌套在另一个查询中的查询语句。子查询可以用于在 SELECTINSERTUPDATEDELETE 语句中提供数据或条件。子查询可以返回单个值、一行、一列或多行多列数据。以下是对子查询的详细讲解。

1. 子查询的基本语法

子查询的基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE column_name operator (
    SELECT column1, column2, ...
    FROM another_table
    WHERE condition
);
  • column1, column2, ...:要查询的列。
  • table_name:主查询的表。
  • column_name:主查询中用于比较的列。
  • operator:比较运算符,如 =, <>, >, <, >=, <=, IN, NOT IN, EXISTS, NOT EXISTS 等。
  • another_table:子查询的表。
  • condition:子查询的条件。

2. 子查询的类型

子查询可以分为以下几种类型:

  • 标量子查询:返回单个值。
  • 行子查询:返回一行数据。
  • 列子查询:返回一列数据。
  • 表子查询:返回多行多列数据。

示例

假设有一个 employees 表,包含以下数据:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
4 David Davis 80000 102
5 Eve White 90000 103

标量子查询

查询工资高于平均工资的员工:

SELECT * 
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

结果:

employee_id first_name last_name salary department_id
4 David Davis 80000 102
5 Eve White 90000 103

行子查询

查询工资和部门 ID 与员工 Alice 相同的员工:

SELECT * 
FROM employees
WHERE (salary, department_id) = (
    SELECT salary, department_id
    FROM employees
    WHERE first_name = 'Alice'
);

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101

列子查询

查询工资高于部门 101 的任何员工工资的员工:

SELECT * 
FROM employees
WHERE salary > ANY (
    SELECT salary
    FROM employees
    WHERE department_id = 101
);

结果:

employee_id first_name last_name salary department_id
4 David Davis 80000 102
5 Eve White 90000 103

表子查询

查询每个部门工资最高的员工:

SELECT e1.*
FROM employees e1
WHERE (
    SELECT COUNT(*)
    FROM employees e2
    WHERE e2.department_id = e1.department_id AND e2.salary > e1.salary
) = 0;

结果:

employee_id first_name last_name salary department_id
2 Bob Johnson 70000 101
4 David Davis 80000 102
5 Eve White 90000 103

EXISTSNOT EXISTS

查询没有订单的客户:

SELECT *
FROM customers c
WHERE NOT EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.customer_id = c.customer_id
);

结果:

customer_id customer_name customer_email customer_age
3 Charlie charlie@example.com 22
全部评论

相关推荐

03-28 19:17
得物,蓝禾,快手,优博讯,三七互娱,途游游戏,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮25春招内推①快手【在招岗位】运营、市场、产品、战略分析、职能、工程、设计、算法、项目管理、销售、游戏【一键内推】https://sourl.cn/Qi5pm2【内推码】campuswQrLOMvHE②蓝禾【岗位】国内/国际电商运营,设计,营销,职能,工作地:深圳【一键内推】https://sourl.cn/68rjxY【请选择“校园大使推荐码”】71T3HES③得物【岗位】技术、供应链、产品、运营、设计、职能、商品研究、风控【一键内推】https://sourl.cn/ucSj45【内推码】BS5N8WC④优博讯【岗位】Android系统开发工程师,GMS认证开发工程师,项目管理工程师,产品工程师,销售工程师,海外销售工程师【一键内推】https://sourl.cn/GHUas9【内推码】EVVMBV⑤三七互娱【岗位】美术设计,游戏策划,游戏运营,市场推广,技术开发,职能【一键内推】https://sourl.cn/rA29V4【内推码】DSmTXAHE⑥汤臣倍健【招聘岗位】营销类、市场类、智造类、职能类【内推链接】https://sourl.cn/giXCGq【内推码】ES3W2T ⑦OPPO 招聘岗位:AI/算法、标准研究、软件、硬件、产品类、设计、工程技术、销售服务、品牌策划、采购、职能内推链接:https://sourl.cn/XFb5fG内推码:X6866447⑧康冠科技【职位】算法、软件、硬件、技术,结构设计,供应链,产品,职能,商务【一键内推】https://sourl.cn/2Mm9Lk【内推码】EVBM88⑨顺丰【招聘岗位】研发、算法、大数据、产品、项管、设计、人资等【官方内推码】4FOLXH【投递方式】https://sourl.cn/3sJvj4⑩游卡【岗位】产品策划,发型运营,程序技术,美术表现,职能综合【一键内推】http://b.mtw.so/5yRv4v【内推码】DS5y8jth11.作业帮职位类型:产品类、工程类、算法类、教研类、职能类【一键内推】https://sourl.cn/EynDUu【内推码】DShvrkAW12.途游游戏【岗位】技术、发行、美术、产品等大类【内推链接】https://sourl.co/VN6KTC【内推码】DS4ZxuTg
投递蓝禾技术等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务