MySQL多表查询

2022/3/18 19:28:08

本文主要是介绍MySQL多表查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

              **MySQL多表查询(笛卡尔集)**
  • 说明
  • 问题导入
  • 命令行实现
  • 补充
    说明:本人只是分享一下学过的多表查询的基础东西,不喜勿喷,也欢迎大家在评论区讨论指教我。
    1.大家都知道电商平台的商品下边都有评论,商品存放在商品表,那评论存放在哪呢,首先排除商品表,那自然就存放在评论表,这就出现了多表查询。
    2.多表查询是指基于两个或两个以上的表查询,这里我给大家三张表的实例做演示,分别是emp(员工表) deptno(部门表)salgrade(薪资级别表)
    3.查询emp表
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站韩顺平老师那学的。



这篇关于MySQL多表查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程