Mysql子查询

 1、子查询:

1、子查询就是在一个完整的查询语句中,嵌套若干个不同功能的小查询,从而完成一个复杂的查询。 

2、多次查询,查询效率低

通俗的说,它就是把一个查询的结果,当做另一个查询的条件 

 1.1、子查询返回单行单列数据:

1.1.1、查询基本工资比员工:dmh低的员工信息:

 分析:先查出dmh的工资,再比较工资:

SELECT * from emp WHERE SAL < (SELECT SAL from emp where ENAME = 'dmh');

1.2 子查询返回单行多列数据 ( =,<,>)

1.1.2、查询与员工tom从事同一工作且领导相同的全部员工信息:

分析:先查询tom的职位和领导,再条件查询相同职位和领导的员工。(查询结果多个用括号隔开)

SELECT * from emp 
where 
(JOB,MGR) = (SELECT JOB,MGR from emp where ENAME = 'tom');

注意:() = ()里面的数据 要对应 

1.3 子查询返回多行多列数据:(in)

查询与员工tom和jack从事同一工作且领导相同的员工全部信息:

SELECT * from emp where (JOB,MGR) in (SELECT JOB,MGR from emp WHERE EMPNO in(5,6));

1.4 在from字句中使用子查询:

如果子查询的返回值是多行多列,则可其当做一张数据表,并且这种子查询一般都出现在From字句中.

1.4.1查询出每个部门的部门编号,部门名称,部门人数,平均工资

SELECT
	d.DNAME,
	t.*
FROM
	dept d
LEFT JOIN (
	SELECT
		d.DEPTNO,
		COUNT(e.EMPNO),
		IFNULL(ROUND(AVG(SAL), 2), 0)
	FROM
		emp e
	RIGHT JOIN dept d ON (e.DEPTNO = d.DEPTNO)
	GROUP BY
		d.DEPTNO
) t on (d.DEPTNO = t.DEPTNO);

 

 

1.5在where字句中使用子查询:

如果返回的数据是单行单列,也可以在where字句中使用子查询

1.5.1查询部门名称为 技术部 下面的所有员工:

SELECT
	*
FROM
	emp e
WHERE
	e.DEPTNO = (
		SELECT
			DEPTNO
		FROM
			dept d
		WHERE
			d.DNAME = '技术部'
	);

1.6在select语句中使用子查询:(相当重要)

效率很低

1.6.1查询出每个员工的部门名称:

SELECT
	e.ENAME,
	e.DEPTNO,
	(
		SELECT
			d.DNAME
		FROM
			dept d
		WHERE
			d.DEPTNO = e.DEPTNO
	)
FROM
	emp e;

 

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值