ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL多表查询

2022-03-18 18:31:45  阅读:225  来源: 互联网

标签:ename 多表 sal 查询 dept emp MySQL deptno SELECT


              **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站韩顺平老师那学的。

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有