1.distinct关键字去除重复记录——distinct只能出现在所有字段的最前面
-
select distinct job from emp;
-
select distinct deptno,job from emp;
- 统计岗位的数量?
-
select count(distinct job) from emp;
2.连接查询
2.1.连接查询的分类
- SQL92:一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员
-
SQL92语法: …… A,B where ……
- SQL99:比较新的语法
-
SQL99语法: …… A join B on 连接条件 where ……
- 区分内外连接:
——>join前,有无left、right。 - 内外连接的区别:
外连接:在2张表匹配不上时,会填充NULL
内连接:在2张表匹配不上时,就不显示了 - 关于表的别名:
select e.ename,d.dname from emp e,dept d;- 表的别名有什么好处?
1、执行效率高。
2、可读性好。
- 表的别名有什么好处?
2.2.内连接之等值连接
- 找出每个员工,显示员工名和部门名——emp与dept表联动
-
SQL99语法:select e.ename , d.dname from emp e join dept d on e.deptno=d.deptno;
-
SQL92语法:select e.ename , d.dname from emp e join dept d where e.deptno=d.deptno;
2.3.内连接之非等值连接
特点是:连接条件中的关系是非等量关系。
- 找出每个员工的工资等级,要求显示员工名、工资、工资等级
-
select e.ename,e.sal,s.grade from emp e join salgrade s on (e.sal>=s.losal and e.sal<=hisal); 或 select e.ename,e.sal,s.grade from emp e join salgrade s on (e.sal between s.losal and hisal);
2.4.自连接——必须借用“别名”
特点是:一张表看做两张表。自己连接自己。
- 找出每个员工的上级领导,要求显示员工名和对应的领导名。
-
select a.ename as '员工',b.ename as '领导' from emp a (inner可以省略) join emp b on a.mgr=b.empno;
2.5.外连接——分主、副表
- 外连接最重要的特点是:主表的数据无条件的全部查询出来。
- 找出每个员工的上级领导,要求显示员工名和对应的领导名。
-
select a.ename as '员工',b.ename as '领导' from emp a left (outer可以省略) join emp b on a.mgr=b.empno;
- 找出哪个部门没有员工?
-
select d.* from emp e right join dept d on e.deptno=d.deptno where e.empno is null;
2.6.——3张表的连接
A先和B连接,再和C连接
-
.... A join B join C on ...
- 找出每一个员工的部门名称、工资等级、以及上级领导。
-
select e.ename,d.dname,s.grade,e2.ename from emp e join dept d on e.deptno=d.deptno //匹配部门名称 join salgrade s on e.sal between s.losal and s.hisal //匹配工资等级 left join emp e2 on e.mgr=e2.empno; //匹配领导名