数据库
首页 > 数据库> > MySQL多表查询

MySQL多表查询

作者:互联网

              **MySQL多表查询(笛卡尔集)**
SELECT * FROM emp

在这里插入图片描述
可以看到emp表中共有13条记录和8个字段,用同样的方式查看一下dept表和salgrade表

SELECT * FROM salgrade
SELECT * FROM dept

在这里插入图片描述在这里插入图片描述
4.现在我们试着一起查询查询emp和dept表

SELECT * FROM emp,dept

在这里插入图片描述
在这里插入图片描述
我们发现记录变成了52行,字段变成了13个而且显示在一张表里面了,这是怎么回事呢,我们仔细观察,发现emp表中的每一条员工记录(每一行)都和dept表中所有行都拼接了一次 即13*4=52,结果正好是52条记录,由此我们引出概念 取第一张表的每一行记录和第二张表所有的记录拼接,返回的结果就含有两张表的所有字段
在这里插入图片描述
5.那我们试着做一道题:显示雇员名 ,雇员工资以及所在部门的部门名称
分析一下,雇员名字段和雇员工资字段分别是ename,sal ,都在emp表中,但是部门名字段dname在dept表中,不在同一表中,这时候我们该怎么办呢,我的答案是找相同的地方,发现都有deptno这个字段

SELECT ename,sal,dname FROM emp,dept WHERE emp.`deptno` =dept.`deptno`

命令的前半段很好理解,要我们找什么字段,我们都写出来就行,但where条件是什么意思呢,这就是找相同的地方了,再用表名.出来就可以了。结果如下:
在这里插入图片描述

6.那我们想要把deptno字段显示出来该怎么办呢
思考一下这样写可以吗

SELECT ename,sal,dname,deptno FROM emp,dept WHERE emp.`deptno` =dept.`deptno`

我们发现报错了
Column ‘deptno’ in field list is ambiguous 它说字段列表中的“deptno”列不明确,这什么意思啊,是不是说系统不知道我们要显示哪个表中的deptno啊,那我们加上限制条件呢

SELECT ename,sal,dname,emp.`deptno` FROM emp,dept WHERE emp.`deptno` =dept.`deptno`

我们发现这样就可以了
在这里插入图片描述
7.简单了解后我们再做几道题
如何显示部门号是10的部门名,员工名,工资
分析一下 :这道题加了个条件,明确部门号是10,该怎么写呢 很简单我们也加个条件不就好咯

SELECT dname,ename,sal FROM emp,dept WHERE dept.`deptno`=emp.`deptno` AND emp.`deptno`=10

在这里插入图片描述
8.若两张表没有相同的部分该怎么办呢,比如下面一题
显示每个员工的姓名,工资,及其工资的级别
emp表和salgrade表没有重复的字段啊,但是salgrade表是不是对emp中sal子段操作的一张表啊,那这道题就很简单了

SELECT ename ,sal ,grade FROM emp,salgrade WHERE sal BETWEEN losal AND hisal

9.再补充一题让大家多多体会多表查询
显示雇员名,雇员工资以及所在部门的名字,并按部门排降序
命令如下

SELECT ename,sal,dname,emp.`deptno` FROM emp,dept WHERE emp.`deptno`=dept.`deptno`  ORDER BY emp.`deptno` DESC

补充 :我在b站韩顺平老师那学的。

标签:ename,多表,sal,查询,dept,emp,MySQL,deptno,SELECT
来源: https://blog.csdn.net/qq_51308214/article/details/123580281