合并结果集 union all(包含相同行)、union(去除相同行)
把查询的结果合并到一起。要求: 查询的结果列数相同,列类型相同
1 | create table emp( |
连接查询
内连接
方言: select * from 表1,表2 where 条件
1 | 表a有三条数据:q,w,e |
1 | 去除无用的笛卡尔集,加上where后面的条件 |
1 | 例子:要求打印员工姓名,工资以及部分名称 |
标准: select * from 表1 别名1 inner join 表2 别名2 on 条件
1 | 别名都是可选的,条件跟上面写的一样。两者的区别就只有二个: |
外连接 一主一次
左外连接 left outer join ,左表为主表,右表为次表,左表中不论满足不满足条件都查询出来,右表中对应的位置用null补位
1 | 查询所有员工名称,工资以及部门名称,部门名称为null的填无部分 |
右外连接 right outer join 与左外对应
子查询 一条sql语句中有多个select关键字,ALL,ANY,IN
1 | //查询员工中最高工资员工的详细信息 |
出现的位置: 1、from后作为表 2、where后作为条件
1 | 上面那条sql语句就是作为条件 |
1、打印高于平均工资的所有人的信息(单行单列作为条件)
1 | select * from emp where (sal>select AVG(sal) from emp); |
2、打印大于30部门的所有员工工资的员工信息(多行单列作为条件)
1 | select * from emp where sal > ALL (select sal from emp where did=30); |
3、打印大于30部门任意一人员工工资的员工信息
1 | select * from emp where sal> ANY (select sal from emp where did = 30); |
4、打印工作和部门与张三相同的员工信息
1 | select * from emp where (job,did) IN (select job,did from emp where ename='张三'); |
练习题
前提条件已知四张表
1 | 员工表emp(eid,ename,job,emid,etime,sal,edid) |
1、查询至少有一个员工的部门,显示部门编号,部门名称,部门位置,部门人数
1 | 分析: |
2、查询所有员工名称及其直接上级领导名称
1 | 分析: |
3、列出受雇佣日期早于直接上级的所有员工编号,姓名,以及部门名称
1 | 分析: |
4、列出部门名称和这些部门的员工信息,同事列出没有员工的部门
1 | 分析: |
5、列出最低薪资大于15000的各种工作以及从事此工作的人数
1 | 分析: |
6、列出在销售部工作的员工姓名,假定不知道销售部的部门编号
1 | 分析: |
7、列出薪资高于公司平均工资的所有员工信息,所在部门名称,上级领导,工资等级
1 | 分析: |
8、列出与张三从事相同工作的所有员工以及部门名称
1 | 分析: |
9、列出薪资高于30部门的所有员工薪资的员工的姓名和薪资,部门名称
1 |
|