定义:查询中嵌套查询就是子查询
子查询的本质:
找出工资大于Mark的员工名字和工资
分析:
①查询出Mark的工资是多少
整合成子查询
子查询的特点:
为什么相关子查询的效率极其低下?
结论:
性能排序/优先使用
关联/分组查询无关子查询相关子查询
① 找出工资比'BLAKE'多的员工
或者
①.1. 以职位分组,找出平均工资最高的两种职位
大概的形式是这样的:
下面还是以实例来说明,要不然不好理解,新建两张表,一张是商品表,另外一张是商品的评论表
商品表:
评论表:
然后插入一些数据:
下面我们用子查询的方式来查出商品的信息以及每个商品的评论数量
查询结果:
对于这种查询,可以分成两部来理解,首先忽略整个select子查询,查出商品表中的数据.
在结果字段中使用子查询的关键两点:
①子查询只能返回一条数据,如果子查询返回多条数据则会出错.
-- 查询分类名称为手机数码的所有商品
①查询分类名为手机数码的ID
SELECT cid FROM category WHERE cname='手机数码';
SELECT * FROM product WHERE cno = (SELECT cid FROM category WHERE cname='手机数码');
子查询练习:
子查询练习及答案:
CREATE TABLE emp(
empno INT,
mgr INT,
hiredate DATE,
deptno INT
) ;
CREATE TABLE dept(
deptno INT,
);
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
--最高工资
SELECT MAX(sal) FROM emp;
--最少工资
SELECT MIN(sal) FROM emp;
--最高工资的员工信息
SELECT * FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);
--最低工资的员工信息
SELECT * FROM emp WHERE sal = (SELECT MIN(sal) FROM emp);
-- 单行子查询( = = = )
-- 查询出高于10号部门的平均工资的员工信息
①10号部门的平均工资
SELECT AVG(sal) FROM emp WHERE deptno = 10;
SELECT * FROM emp WHERE sal (SELECT AVG(sal) FROM emp WHERE deptno = 10);
-- 多行子查询(in not in any all) any all
-- 查询出比10号部门任何员工薪资高的员工信息
① 查询出10号部门最高工资
SELECT MAX(sal) FROM emp WHERE deptno = 10;
SELECT * FROM emp WHERE sal (SELECT MAX(sal) FROM emp WHERE deptno = 10);
-- 查询出比10号部门任意一个员工薪资高的所有员工信息 : 只要比其中随便一个工资都可以
SELECT sal FROM emp WHERE deptno = 10;
-- 多列子查询(实际使用较少) in
-- 和10号部门同名同工作的员工信息
① 查询出10号部门所有人 名字和工作
SELECT ename,job FROM emp WHERE deptno=10;
SELECT * FROM emp WHERE (ename,job) IN (SELECT ename,job FROM emp WHERE deptno=10) AND deptno !=10;
-- Select后面接子查询
-- 获取员工的名字和部门的名字
SELECT ename,deptno FROM emp ;
-- from后面接子查询
-- 查询emp表中所有管理层的信息
SELECT DISTINCT mgr FROM emp;
-- where 接子查询
-- 薪资高于10号部门平均工资的所有员工信息
① 10号部门平均工资
SELECT AVG(sal) FROM emp WHERE deptno=10;
SELECT * FROM emp WHERE sal (SELECT AVG(sal) FROM emp WHERE deptno=10);
-- having后面接子查询
① 统计所有的部门的平均工资
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
-- 列出达拉斯加工作的人中,比纽约平均工资高的人
原文链接:
以上就是土嘎嘎小编为大家整理的mysql怎么使用子查询相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!