select d.* from emp e right join dept d (这里d作为主表,显示的就是d表,而e表中有则对应,没有则为NULL) on e.deptno = d.deptno where e.empno is null; (这里再做完上述步骤后,再次进行筛选判断,此时筛选的已经建立外连接后的表)
三张表的连接查询
A join B
on
... join C on ...
表示:A表和B表先进行表连接,连接之后A表继续和C表进行连接。
select e.ename,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;
可加入外连接
select e.ename '员工',d.dname,s.grade,e1.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 e1 on e.mgr = e1.empno;
子查询
select语句当中嵌套select语句,被嵌套的select语句是子查询。
子查询可以出现在 select ..(select). from ..(select). where ..(select).
①select * from emp where sal > (select avg(sal) from emp);
②elect t.*,s.grade from (select deptno,avg(sal) as avgsal from emp group by deptno) t 将查询结果当作临时表 t join salgrade s on t.avgsal between s.losal and s.hisal;
③select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
(会查出ename和dname) from emp e;
union 可以将查询结果集相加 两张无关联的表中数据也可以拼在一起显示,但是要求列数相同
select ename from emp union select dname from dept;
limit:limit取结果集中的部分数据, limit startIndex, length startIndex表示起始位置,从0开始 length表示取几个 limit是sql语句最后执行的一个环节: select 5 ... from 1 ... where 2 ... group by 3 ... having 4 ... order by 6 ... limit 7 ...;
select ename,sal from emp order by sal desc limit 3,6; 找出工资排名在第4到第9名的员工
登录:mysql -hlocalhost -uroot -p展示所有的数据库:show databases;创建数据库:create database 数据库名;删除数据库:drop database 数据库名;使用(进入)数据库:use 数据库名;\c 结束当前sql语句,\q 退出数据库;is null is not null where comm is not null;in notin select * from 数据库名w...