数据库--多表查询

本文详细介绍了MySQL中的四种JOIN操作:交叉链接、自然连接、USING链接和ON链接的区别与用法,以及如何进行多表查询,包括左链接、右链接、自连接和子查询在实际场景中的应用。
摘要由CSDN通过智能技术生成
--多表查询

--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');

 

 

 

 

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值