sql子查询

SQL子查询

分类

使用 比较运算符连接的子查询

#一、where或having后 面
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)
特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用

< > = >= <= <> !=
列子查询,-般搭配着多行操作符使用

in any/some all

④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

#例子 查询员工的工资大于abel的员工信息

SELECT salary
FROM employees
WHERE last_name = 'abel';

将上列查询当作子查询

SELECT *
FROM employees
WHERE salary > (SELECT salary
FROM employees
WHERE last_name = 'abel');

#案例2 查询 job—id = 141 且工资 > 143员工的员工信息

SELECT job_id
FROM employees
WHERE employee_id = 141;

SELECT salary
FROM employees
WHERE employee_id = 143;
#单表查询 作为子查询写在下面
SELECT first_name,job_id,salary
	FROM employees
	WHERE job_id = (
	SELECT job_id
	FROM employees
	WHERE employee_id = 141)
AND salary > (                               
	SELECT salary
	FROM employees
	WHERE employee_id = 143);
#查询公司的最低工资  返回工资最少的员工信息
	SELECT MIN(salary)
	FROM 	employees;
	#引入子查询
	SELECT *
	FROM  employees
	WHERE salary = (
	SELECT MIN(salary)
	FROM 	employees);

列子查询(多行子查询)

操作符 : in 列表中任意一个 <> =any not in <> <>all

any : 返回列表的某一个值

​ all : 返回所有值

#返回location——id 是1400 或 1700 的员工部门中所有员工的姓名
SELECT  department_id
FROM departments
WHERE location_id IN (1400,1700);


SELECT last_name
FROM employees
WHERE department_id IN (	
	SELECT department_id
	FROM departments
	WHERE location_id IN (1400,1700));

SELECT后面的子查询

#查询每个部门的员工个数
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.`department_id`
)
FROM departments d;

子查询只能是一列 仅仅支持标量子查询。

from后面的子查询

将查询结果作为一张表 必须起别名。

相关子查询

语法:

exists(完整的查询语句)

只关心查询结果存不存在。

放在where 后面可以过滤。

能用exists 绝对可以用in 实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值