我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL DML操作--------多表联合查询实战

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL DML操作--------多表联合查询实战

1. 背景

   * 多表联合查询是把不同表的记录到一起的一种方式

   * 在SQL标准中规划的联合(join)大致分内连接,外连接,全连接。其中外连接又分左外连接,右外连接。


2. 内连接例子 (inner join) [ 员工 --> 部门 ] 

   * 查看员工表[ employees ]和部门表[ departments ]结构

mysql> desc employees;
+-----------+---------------+------+-----+---------+----------------+
| Field     | Type          | Null | Key | Default | Extra          |
+-----------+---------------+------+-----+---------+----------------+
| id        | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| name      | varchar(64)   | NO   |     | NULL    |                |
| sex       | enum('M','F') | NO   |     | NULL    |                |
| age       | int(11)       | NO   |     | NULL    |                |
| depart_id | bigint(20)    | NO   |     | NULL    |                |
+-----------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> desc departments;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| name  | varchar(64) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)


   * 查看员工表[ employees ]和部门表[ departments ]数据

mysql> select * from employees;
+----+-------+-----+-----+-----------+
| id | name  | sex | age | depart_id |
+----+-------+-----+-----+-----------+
|  1 | tom   | M   |  25 |         1 |
|  2 | jak   | F   |  35 |         2 |
|  3 | lisea | M   |  22 |         3 |
+----+-------+-----+-----+-----------+
3 rows in set (0.00 sec)

mysql> select * from departments;
+----+------+
| id | name |
+----+------+
|  1 | dev  |
|  2 | test |
|  3 | ops  |
+----+------+
3 rows in set (0.00 sec)


   * 查询并显示所有员工id, 姓名,姓别,年龄,所在部门 (方法一)

mysql> select e.id id, e.name name, IF(e.sex = 'M', 'male', 'female') sex, e.age age, d.name
    -> from employees e, departments d
    -> where e.depart_id = d.id;
+----+-------+--------+-----+------+
| id | name  | sex    | age | name |
+----+-------+--------+-----+------+
|  1 | tom   | male   |  25 | dev  |
|  2 | jak   | female |  35 | test |
|  3 | lisea | male   |  22 | ops  |
+----+-------+--------+-----+------+
3 rows in set (0.03 sec)


   * 查询并显示所有员工id, 姓名,姓别,年龄,所在部门 (方法二) [ 方法一等价于方法二 ]

     inner join 可以省写成 join

mysql> select e.id id, e.name name, IF(e.sex = 'M', 'male', 'female') sex, e.age age, d.name
    -> from employees e inner join departments d
    -> on e.depart_id = d.id;
+----+-------+--------+-----+------+
| id | name  | sex    | age | name |
+----+-------+--------+-----+------+
|  1 | tom   | male   |  25 | dev  |
|  2 | jak   | female |  35 | test |
|  3 | lisea | male   |  22 | ops  |
+----+-------+--------+-----+------+
3 rows in set (0.00 sec)


3. 外连接例子

   左外连接 [ 以左表为基础,左表的全部数据,右表有的组合。右表没有的为null ]

   右外连接 [ 以右表为基础,右表的全部数据,左表有的组合。左表没有的为null ]

   * 查看a表和b表结构

mysql> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| data  | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> desc b;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| data  | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)


   * 查看a表和b表数据

mysql> select * from a;
+------+
| data |
+------+
|    1 |
|    2 |
|    4 |
+------+
3 rows in set (0.00 sec)

mysql> select * from b;
+------+
| data |
+------+
|    2 |
|    4 |
|    5 |
|    6 |
+------+
4 rows in set (0.01 sec)

 

   * 左外连接查询 (left join) 以a表为基础,显示a表所有数据,b表有的组合,没有显示NULLL

        left outer join 可以写成 left join

mysql> select * from a left outer join b on a.data = b.data;
+------+------+
| data | data |
+------+------+
|    2 |    2 |
|    4 |    4 |
|    1 | NULL |
+------+------+
3 rows in set (0.00 sec)


   * 右外连接查询 以b表为基础,显示b表所有数据,a表有的组合,没有显示NULLL

        right outer join 可以写成 right  join

mysql> select * from a right outer join b on a.data = b.data;
+------+------+
| data | data |
+------+------+
|    2 |    2 |
|    4 |    4 |
| NULL |    5 |
| NULL |    6 |
+------+------+
4 rows in set (0.00 sec)


   * 完全(交叉)连接查询

     没有 where 子句的交叉联接将产生联接所涉及的表的笛卡尔积。

     第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

    (a和b交叉连接产生3*4=12条记录) 

mysql> select * from a corss join b;
+------+------+
| data | data |
+------+------+
|    1 |    2 |
|    2 |    2 |
|    4 |    2 |
|    1 |    4 |
|    2 |    4 |
|    4 |    4 |
|    1 |    5 |
|    2 |    5 |
|    4 |    5 |
|    1 |    6 |
|    2 |    6 |
|    4 |    6 |
+------+------+
12 rows in set (0.00 sec)


4. 总结


以需求驱动技术,技术本身没有优略之分,只有业务之分。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL DML操作--------多表联合查询实战

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL中的多表联合查询功能操作

目录一.介绍数据准备交叉连接查询 内连接查询外连接子查询特点子查询关键字all关键字any关键字和some关键字in关键字exists关键字 自关联查询总结一.介绍多表查询就是同时查询两个或两个以上的表,因为有的时候用户在查看数据的时候
2023-02-01

【MySQL】MySQL表之联合查询(多表查询)

📌前言:本篇博客介绍MySQL数据库的MySQL表之联合查询(多表查询),学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。 那我们废话不多说,直接进入主体!
2023-08-16

MySQL三表联合查询操作举例

目录一、题目概述二、查询思路三、错误总结附:sql 三个表联合查询(三表左联查询)总结一、题目概述给定三张表(学生表、科目表、成绩表),查出各科成绩最高的学生的信息(学号、姓名、科目名称、成绩)。三张表下所示。二、查询思路1.查询出各科
2023-03-06

MySQL数据库复合查询操作实战

目录1.基本查询回顾2.多表查询 (重要)3.自连接4.子查询1)单行子查询 (子查询的结果是单行)(2)多行子查询(3)多列子查询5.合并查询总结:1.基本查询回顾准备工作,创建一个雇员信息表:(来自oracle 9i的经典测试表)E
2023-05-12

MySQL中的聚合查询和联合查询操作代码

目录一、聚合查询(行编程与行之间的计算)1.常见的聚合函数有:2.group by3.having二、联合查询(多表查询)1.进行联合查询的步骤:2.内连接(from,join on)3.外连接(left/right join on)4.自
2023-03-20

MySQL数据库多表操作通关指南(外键约束和多表联合查询)

目录1 多表关系2 外键约束(FOREIGN KEY)2.1 外键约束说明2.2 外键约束的创建2.3 外键约束实操:一对多关系2.4 删除外键约束2.5 外键约束实操:多对多关系3 多表联合查询3.1 联合查询的简介和分类3.2 联合查询
2022-06-14

MySQL 多表联合查询有何讲究?

在 MySQL 中,这种多表联合查询的原理是:以驱动表的数据为基础,通过类似于我们 Java 代码中写的嵌套循环 的方式去跟被驱动表记录进行匹配。
MySQLJava索引2024-12-02

MySQL聚合查询与联合查询操作的示例分析

这篇文章主要为大家展示了“MySQL聚合查询与联合查询操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL聚合查询与联合查询操作的示例分析”这篇文章吧。一. 聚合查询1.聚合函
2023-06-29

如何在MySQL中进行跨表格的联合查询操作

在MySQL中进行跨表格的联合查询操作,可以使用JOIN语句进行连接不同的表格。以下是一些常见的JOIN语句及其用法:内连接(INNER JOIN):只返回两个表格中共有的记录。SELECT * FROM table1INNER JOI
如何在MySQL中进行跨表格的联合查询操作
2024-04-09

mysql 使用join进行多表关联查询的操作方法

本文介绍了MySQL多表关联查询(JOIN)的操作方法,包括JOIN条件、JOIN类型(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLJOIN)、JOIN语法和示例。此外,还介绍了高级JOIN选项,如NATURALJOIN、USINGJOIN和CROSSJOIN。最后,提供了优化JOIN查询的建议,如创建索引和选择较小的表作为左表。通过理解这些概念,用户可以创建高效的关联查询,提取有意义的信息并提高应用程序性能。
mysql 使用join进行多表关联查询的操作方法
2024-04-02

编程热搜

目录