MySQL多表查询操作

这篇具有很好参考价值的文章主要介绍了MySQL多表查询操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

JOIN 表示连接,inner表示内连接,outer表示外连接,缺省情况是内连接。
ON后面接<连接条件>

MySQL多表查询操作

内连接

默认的表数据连接是内连接,只会查询出满足连接条件的行

语句格式FROM 表1 [inner] JOIN 表2 ON <连接条件>
MySQL多表查询操作
表X和Y内连接结果

SELECT  a, X.b, Y.b, c 
FROM X  
JOIN Y  
ON X.b=Y.b;

MySQL多表查询操作
一张表和自身连接。必须给表起别名

• 【例】查询与C语言在同一出版社的图书信息
分析:C语言一书在Book表中,与它在同一出版社的图书也在Book表中。二者通过publish相等进行连接

SELECT BookW.* FROM Book BookC 
JOIN Book BookW 
ON BookC.publish=BookW.publish 
WHERE BookC.name='C语言' 
AND BookW.name<> 'C语言';

• 内连接的特点:只会保留满足连接条件的数据到连接结果中

表别名

通过表别名简化查询语句,方便多表查询的编写
表别名一般是表的首字母

【例】查询员工名字,工作地点,部门名字
emp表内字段:ename,job,deptid
dept表内字段:deptid,dname

SELECT ename,job,dname
FROM emp e,dept d
WHERE e.deptid=d.deptid;

【例】写一个查询,显示所有员工姓名,部门编号,部门名称。
emp表内字段:ename,deptid
dept表内字段:deptid,dname

SELECT ename,d.deptid,dname
FROM emp e,dept d
WHERE e.deptid=d.deptid;

先要确定出查询数据来自几个表SELECT
在FROM把这多个表列出来,别名加空格起上
然后写连接条件WHERE
最后写其他条件AND

【例】查询在HK的员工编号,姓名,部门编号,工作地点
有两个表,分别是emp员工表与dept部门表
emp表内字段:empid,ename,deptid
dept表内字段:deptid,loc

SELECT empid,ename,emp.deptid,loc 
FROM emp,dept
WHERE emp.deptid=dept.deptid
AND loc='HK';

【例】查询工作在HK的员工姓名,职位,部门名字,工资等级,按工资等级升序排列

这里用到了三个表,但多于两个表时,也是拆成两两连接
emp表内字段:empid,ename,deptid,sal
dept表内字段:deptid,loc,empid
salgrade表内字段:grade,losal,hisal

SELECT ename,job,dname,grade
FROM emp e,dept d,salgrade s
WHERE e.empid=d.empid
AND e.sal BETWEEN s.losal AND s.hisal 
AND loc = 'HK'
ORDER BY grade;

外连接

和内连接相对的就是外连接。

外连接的特点:内连接只会查询出满足连接条件的行,外连接也会把不满足连接条件的数据显示到连接结果中。

外连接分类:

左外连接

表位置在左侧用左外连接

语法格式:FROM 表1 LEFT JOIN 表2 ON <连接条件>

LEFT JOIN表示左外连接

左外连接以FROM子句中的左边表为基准表,把左侧数据都查出来,无论是否满足连接条件

【例】表 X 和 Y 进行左外连接语句及连接结果

SELECT a,X.b,Y.b,c 
FROM x left outer 
JOIN y ON x.b=Y.b;

MySQL多表查询操作
在连接过程中,左侧表一的元组 r 如果不能满足连接条件,r 保留在连接的结果中
在连接结果中,和 r 对应的表二的例值用NULL来代替

【例】使用左连接,查询每个学生的姓名,班长姓名,没有班长的King(班主任)也要显示出来。

stu表内字段:sname,mgr,stuid

SELECT s.sname,m.sname
FROM stu s left JOIN stu m
ON s.mgr=m.stuid;

右外连接

表位置在右侧用右外连接

语法格式:FROM 表1 RIGHT JOIN 表2 ON <连接条件>

右外连接以FROM子句中的右边表为基准表,把右侧数据都查出来,无论是否满足连接条件

【例】表 X 和 Y 进行右外连接语句及连接结果

SELECT a, X.b, Y.b, c 
FROM X RIGHT 
JOIN Y ON X.b=Y.b;

MySQL多表查询操作
右侧表Y的元组(3,Q),虽未能在表X中找到相匹配的元组,单保留在结果当中
同时 a,X.b 的值用NULL填充

【例】使用右连接,查询每个学生的姓名,班长姓名,没有班长的King(班主任)也要显示出来。

stu表内字段:sname,mgr,stuid

SELECT s.sname,m.sname
FROM stu m right JOIN stu s
ON s.mgr=m.stuid;

全外连接

union 合并,把左外连接和右外连接连在一起

语法格式:FROM 表1 FULL [OUTER] JOIN 表2 ON <连接条件>

【例】表 X 和 Y 进行右外连接语句

SELECT a, X.b, Y.b, c 
FROM X FULL OUTER 
JOIN Y ON X.b=Y.b;

【例】查询所有读者借阅情况(包括没借阅图书的读者),显示读者编号,读者姓名,图书编号和书名。

SELECT R.reader_ID, R.name, B.book_ID, B.name 
FROM Reader AS R LEFT JOIN Borrow 
AS BW 
ON R.reader_ID=BW.reader_ID LEFT 
JOIN Book AS B ON B.book_ID=BW.book_ID;

总结

如果查询的数据超过两个表,那么就需要多表查询

当多于两个表时,拆分即可,两两连接

在from中,列出多个表名字,逗号分割

在where语句中,指定连接条件

在写多表连接时,如果语句中出现两个表都存在的列,需要加上表名前缀(否则不知道哪个表的)

外连接:
通过外连接可以查询到不满足连接条件的数据行文章来源地址https://www.toymoban.com/news/detail-444070.html

  1. 左外:是以出现在from子句中左侧的表为基准,查询出基表的所有数据行
  2. 右外:是以出现在from子句中右侧的表为基准,查询出基表的所有数据行
  3. 全外:查询出两个表的所有数据行

到了这里,关于MySQL多表查询操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL每日一练:多表查询——连接查询、子查询(1)

    目录 1、首先创建员工表emp和部门表dept: dept表: emp表:  2、插入数据: dept表: emp表: 3、 按条件查找 dept表: emp表:  dept表: emp表: 1.找出销售部门中年纪最大的员工的姓名  2.求财务部门最低工资的员工姓名  3.列出每个部门收入总和高于8000的部门名称   4.求工资在

    2024年02月15日
    浏览(34)
  • MySQL---多表联合查询(上)(多表关系、外键约束、学生成绩多表关系、交叉连接查询)

    1. 多表关系 MySQL 多表之间的关系可以概括为: 一对一:        比如:一个学生只有一张身份证;一张身份证只能对应一学生。        实现原则:在任一表中添加唯一外键,指向另一方主键,确保一对一关系。         一般一对一关系很少见,遇到一对一关系的表最好是

    2024年02月05日
    浏览(53)
  • 【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

    「前言」文章内容大致是对MySQL复合查询的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 前面篇章讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够,下面将讲解复合查询,首先回顾一下基本的查询。 使用的数据库是之前篇章的雇

    2024年02月11日
    浏览(48)
  • MySQL多表查询操作

    JOIN 表示连接, inner 表示内连接, outer 表示外连接,缺省情况是内连接。 ON后面接连接条件 默认的表数据连接是内连接,只会查询出满足连接条件的行 语句格式 FROM 表1 [inner] JOIN 表2 ON 连接条件 表X和Y内连接结果 一张表和自身连接。必须给表起别名 • 【例】查询与C语言在

    2024年02月04日
    浏览(36)
  • 【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

    目录 1.聚合函数 1.1.group by子句 1.2.having语句 2.单表查询  2.2单表查询 3.多表查询  3.2.子查询 5.内链接 6.外连接 函数 说明 count 返回查询到的数据的数量 sum 返回查询到的数据的总和 avg 返回查询到的数据的平均值 max 返回查询到的数据的最大值 min 返回查询到的数据的最小值

    2024年02月04日
    浏览(45)
  • Mysql第二章 多表查询的操作

    因为直接连接多表时,笛卡尔积的问题引出了多表联查的问题,多表查询基本分为三类,外连接和内连接,等值和非等值,自连接和非自连接 这些连接关系,归根结底是集合的交并补运算 求出两个表的公共部分,叫做内连接,相当于是交集 求出两个表的公共部分加上左边的

    2024年02月04日
    浏览(40)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(46)
  • MySQL---多表联合查询(下)(内连接查询、外连接查询、子查询(ALL/ANY/SOME/IN/EXISTS关键字)、自关联查询)

    1. 内连接查询 数据准备: 内连接查询语法: 2. 外连接查询 语法: 左外连接: left outer join:             select * from A left outer join B on 条件 ;             右外连接: right outer join:             select * from A right outer join B on 条件 ;             满外连接 : full out

    2024年02月04日
    浏览(53)
  • 【JaveWeb教程】(22) MySQL数据库开发之多表查询:内连接、外连接、子查询 详细代码示例讲解(最全面)

    1.1.1 数据准备 SQL脚本: 1.1.2 介绍 多表查询:查询时从多张表中获取所需数据 单表查询的SQL语句:select 字段列表 from 表名; 那么要执行多表查询,只需要使用逗号分隔多张表即可,如: select 字段列表 from 表1, 表2; 查询用户表和部门表中的数据: 此时,我们看到查询结果中包

    2024年01月22日
    浏览(55)
  • MySQL多表查询内连接外连接详解,join、left join、right join、full join的使用

    目录 1、多表查询概览 1.1、分类 1.2、外连接的分类 1.3、常用的SQL语法标准 2、内外联接案例 2.1、初始化表 2.2、内连接 2.3、外连接案例 2.4、全连接案例 2.5、union和union all 2.6、实现MySQL全连接 2.7、内外连接面试基础 2.8、SQL99多表查询新特性 1.1、分类 可以根据3个角度进行分类

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包