暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第18讲:MySQL之单行子查询

何先振 2023-09-20
179

以下文章来源于何先振,责编小何


子查询



子查询指一个查询语句嵌套在另一个查询语句内部的查询,Mysql4.1开始引入。


如果我们要查谁的工资比Abel高?


方式一:先查出Able的工资,再拿他的工资筛选比他高的,需要写两条SQL完成。








方式二:自连接,多表连查一条SQL查出来。





方式三:子查询

括号里面的SQL是子查询也叫内查询。外面的SQL叫外查询或主查询。





注意:


子查询要写在括号内。


将子查询放在比较条件的右侧。


单行操作符对应单行子查询,多行操作符对应多行子查询。

例如:=号就是单行操作符号,对应着一条单行子查询。



子查询的分类



角度1:从内查询返回的结果的条目数


单行子查询:子查询查出一条记录。


多行子查询:子查询查出多条记录。


角度2:内查询是否被执行多次


相关子查询:主查询和子查询有关系,被执行多次。


比如:相关子查询的需求:查询工资大于本部门平均工资的员工信息。子查询需要根据主查询的部门查询对应部门的平均工资,有多个部门子查询需要执行多次。


不相关子查询:主查询和子查询无关系,只执行一次。


比如:查询工资大于本公司平均工资的员工信息。子查询只需要查本公司平均工资的员工信息,公司只有一个只执行一次。



单行子查询



单行操作符:= 、!= 、>、>=、<、<=


子查询的编写技巧或者步骤:从里往外写 或者从外往里写


单行子查询的举例:


举例一:查询工资大于149号员工工资的员工的信息





举例二:查询job_id与141号员工相同,salary比143员工多的员工姓名,job_id和工资


先查141员工的job_id


然后再查,143员工的工资


然后在查询同时等于141员工的job_id和工资大于143员工的员工


举例三:查询公司工资最少的员工的last_name,job_id和salary


求最少的工资


求最少工资的员工的last_name,job_id,salary


举例四:查询与141号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id


从外往里写,先查询员工的employee_id,manager_id,department_id



再查141号员工manager_id


再查141号员工department_id


其他员工,不等于141,得到最终语句


联合查,两列合并查


子查询写在having中举例:


查询最低工资大于50号部门的最低工资的部门id和其他最低工资


先查询部门id和其他最低工资


最低工资大于50号部门的的最低工资


子查询写在查询语句中举例:


显示员工的employee_id,last_name和location。其中,若员工department_id与location_id为1800的department_id相同,则location为"Canada",其余则为"USA"


先查询显示员工的employee_id,last_name和location。


然后查location_id为1800的department_id


然后写在case when中,查询出结果


子查询的空值的举例:


没有这个人





因为内查询没有,所以外层也查不到。不返回任何行





非法使用子查询的举例:


内查询,查出有多行





=属于单行操作符,用单行操作符,跟多行子查询就会报错,返回多条结果





推荐阅读书籍




点击上方"何先振"关注并选择设为星标
各类IT技术文章不会错过!


文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论