--mysql中多表查询JOIN关键词有4种 交叉链接 自然连接 USING链接 ON链接
--查询每一个员工的信息,且显示具体部门
SELECT FROM emp,dept
--交叉链接 CROSS JOIN
--此方法查询出来的结果是笛卡尔积
SELECT * FROM emp; --14条数据
SELECT * FROM dept; --4条数据
SELECT * FROM emp CROSS JOIN dept; --56条数据
--自然连接 NATURAL JOIN
--优点:查询出的内容就是我们想要的结果;缺点:确定那个是共同字段的时候挨个对比查找效率比较低
SELECT * FROM emp NATURAL JOIN dept;
--USING 链接
--查询效率高,指定列去对比
--缺点:如果两个表中没有相同字段,这种方式就没办法进行查询
SELECT * FROM emp JOIN dept USING(deptno);
--ON 链接(左右链接、全链接)
SELECT * FROM emp JOIN dept ON emp.deptno=dept.deptno;
--左外链接查询left:左表内容全部显示,如果匹配不到游标的内容时使用null代替
SELECT * FROM emp left JOIN dept ON emp.deptno=dept.deptno;
--右外链接查询RIGHT:右表内容全部显示,如果匹配不到游标的内容时使用null代替
SELECT * FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno;
--不支持全链接,但可以取并集UNION将左右链接并起,取并集
--但可以取并集UNION ALL将左右两表直接累加显示
SELECT * FROM emp left JOIN dept ON emp.deptno=dept.deptno;
UNION
SELECT * FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno;
--查询3个表
--查询员工的编号、姓名、薪水、部门编号、部门名称、薪水等级
--先查两表,99语法
SELECT emp.ename,emp.empno,emp.sal,dept.deptno,dept.dname,salgrade.grade FROM emp JOIN dept ON emp.deptno=dept.deptno
JOIN salgrade ON emp.sal BETWEEN salgrade.LOSAL AND salgrade.HISAL
--92语法
SELECT * FROM emp,dept,salgrade WHERE emp.deptno=dept.deptno AND emp.sal BETWEEN salgrade.LOSAL AND salgrade.HISAL
--自连接查询
--自关联 自己表中的字段关联自己表中的字段,减少表的创立
--自连接 连接查询的一种,将一张表当作两张表对待,自己关联自己
--查询所有员工的上级领导名称
SELECT * FROM emp e1
JOIN emp e2
ON e1.MGR=e2.empno;
--子查询
--相关子查询:子查询不可以独立运行,先执行外查询再执行子查询
--不相关子查询:一条SQL语句中包含多个SELECT语句,先执行子查询再执行外查询;子查询可独立运行称之为不相关
--查询所有比姓名为‘clark’工资高的员工信息,单行子查询
--1、查询CLARK员工的工资信息
--2、查询比当前工资高的员工
SELECT sal FROM emp WHERE ename='CLARK';
SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='CLARK');
--查询工资低于任意一个岗位为CLERK的工资的雇员信息,多行子查询
--查询岗位为CLERK的所有薪资
SELECT sal FROM emp WHERE job='CLERK';
--相当于小于最高工资
SELECT * FROM emp WHERE sal<ANY(SELECT sal FROM emp WHERE job='CLERK');
SELECT * FROM emp WHERE sal IN (SELECT sal FROM emp WHERE job='CLERK');
--小于最低工资
SELECT * FROM emp WHERE sal<ALL(SELECT sal FROM emp WHERE job='CLERK');