SQLzoo刷题-嵌套子查询、相关子查询
2020-08-02 19:06
84 查看
1、嵌套子查询
子查询就是将问题分为两步,先筛选出中间量,再进行查询
- 人口超过“俄罗斯”的每个国家的名称。(先求出俄罗斯的人口,再筛选大于俄人口)
- 人均国内生产总值大于“英国”的国家。(先求出英国的GDP,再筛选大于其GDP)
- 包含阿根廷的洲的国家。(先筛选出阿根廷所在的州,再筛选州中的国家)
/*筛选GDP大于欧洲所有国家的国家,思路一:GDP>all(欧洲国家的GDP)*/ SELECT name FROM world WHERE GDP > ALL( SELECT GDP FROM world WHERE GDP > 0 /*有些国家的GDP可能是NULL*/ and continent='Europe')
注:>ALL 父查询中的结果集大于子查询中每一个结果集中的值
/*筛选GDP大于欧洲所有国家的国家,思路二:GDP>max(欧洲国家GDP)*/ SELECT name FROM world WHERE GDP>( select max(GDP) from world WHERE GDP > 0 and continent='Europe' );
/*求出薪水最低的员工的信息,需要先求出最低的薪水*/ SELECT last_name, job_id, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
2、相关子查询
相关子查询是一个子查询中引用了某张表,且这张表也在子查询外部被使用到。即需要将一张表看为两张
- 执行顺序:
①外部查询拿到所有行;
②内部查询使用外部查询出来的每一行来执行自己逻辑;
③内部查询有结果返回则当前外部行被保留最终返回否则继续执行下一行 - 返回员工薪水大于经理薪水的员工(一个表是员工的薪水,一个表是经理的薪水)
- 语文成绩大于数学成绩的学生姓名(一个表取语文成绩,一个表取数学成绩)
/*找出各大洲面积最大的国家*/ SELECT x.continent, x.name, x.area FROM world x WHERE area >= ALL (SELECT area FROM world y WHERE y.continent=x.continent AND area>0)
/*找出所有国家人口不超过25000000的州,即所有国家人口都小于25000000的州*/ SELECT x.name,x.continent,x.population FROM world AS x WHERE 25000000>=ALL ( SELECT population FROM world y WHERE x.continent=y.continent AND population>0)
/*牛客网查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不使用order by*/ select e.emp_no,s.salary,e.last_name,e.first_name from employees e join salaries s on e.emp_no=s.emp_no and s.to_date='9999-01-01' and s.salary = ( select s1.salary from salaries s1 join salaries s2 on s1.salary<=s2.salary and s1.to_date='9999-01-01' and s2.to_date='9999-01-01' group by s1.salary having count(distinct s2.salary)=2 )
相关文章推荐
- mysql数据库基础
- Mysql进阶知识
- sql判断数据库类型数据_SQL数据类型
- 【MySQL - 5】约束是什么?非空约束、唯一约束、主键约束、外键约束有什么作用?
- .Net Core中使用MongoDB
- sql的外键约束和主键约束_SQL约束
- 关于SqlServer那些事1(回归基础)
- Mysql日期函数
- sql limit 子句_SQL使用子句
- DM(达梦)数据库登录:6001错误
- 关于MongoDB ObjectId的那些事儿
- PHP+Redis解决高并发下商品超卖问题
- 【MyBatis03】resultType、resultMap、模糊查询、动态SQL、数据分页、配置文件连接数据库
- 数据库系统浅出
- MySQL之concat以及group_concat的用法
- 数据库账户密码安全_3个密码提示,可确保您的网上银行帐户安全— Mielygraphy
- 【个人博客项目 2】Idea插件mybatiscodehelperpro 逆向生成实体类、mapper接口、service的方法(附有idea链接MySQL 5版本以及8版本的方法)
- win10彻底卸载MYSQL+安装8.0版本+可能遇到的问题
- 2020-08-01Mysql数据库
- Redis