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)

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

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

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

    MySQL---多表联合查询(上)(多表关系、外键约束、学生成绩多表关系、交叉连接查询)

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

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

    【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

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

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

    MySQL多表查询操作

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

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

    【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日
    浏览(11)
  • Mysql第二章 多表查询的操作

    Mysql第二章 多表查询的操作

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

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

    【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

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

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

    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日
    浏览(15)
  • 【JaveWeb教程】(22) MySQL数据库开发之多表查询:内连接、外连接、子查询 详细代码示例讲解(最全面)

    【JaveWeb教程】(22) MySQL数据库开发之多表查询:内连接、外连接、子查询 详细代码示例讲解(最全面)

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

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

    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日
    浏览(12)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包