MySQL 四种连接和多表查询详解

目录
  • MySQL 内连接、左连接、右连接、外连接、多表查询
    • 构建环境:
    • 一、INNER JION 内连接 ( A ∩ B )
    • 二、LEFT JOIN 左外连接( A 全有 )
    • 三、RIGHT JOIN 右外连接 (B 全有)
    • 四、FULL JOIN 全外连接( A + B)
    • 五、LEFT Excluding JOIN ( A - B 即 A 表独有)+
    • 六、RIGHT Excluding JOIN ( B - A 即 B表独有)
    • 七、OUTER Excluding JOIN (A 与 B 各自独有)
  • 总结

MySQL 内连接、左连接、右连接、外连接、多表查询

构建环境:

create table t_emp(
	id int primary key,
	name varchar(20),
	deptId int
);
create table t_dept(
	id int primary key,
	name varchar(20)
);
insert into t_dept(id, name) values(1, '设计部');
insert into t_dept(id, name) values(2, '开发部');
insert into t_dept(id, name) values(3, '测试部');
insert into t_emp(id, name, deptId) values(1, '张三', 1);
insert into t_emp(id, name, deptId) values(2, '李四', 2);
insert into t_emp(id, name, deptId) values(3, '王五', 0);
# ps:为了说明方便,t_emp 表 说成 A 表, t_dept 表说成 B 表

目录

一、INNER JION 内连接 ( A ∩ B )

SELECT * FROM t_emp e INNER JOIN t_dept d ON  e.deptId = d.id;

二、LEFT JOIN 左外连接( A 全有 )

SELECT * FROM t_emp e LEFT JOIN t_dept d ON e.deptId = d.id;

三、RIGHT JOIN 右外连接 (B 全有)

SELECT * FROM t_emp e RIGHT JOIN t_dept d ON e.deptId = d.id;

四、FULL JOIN 全外连接( A + B)

SELECT * FROM t_emp e LEFT JOIN t_dept d
ON e.deptId = d.id UNION
SELECT * FROM t_emp e RIGHT JOIN t_dept d ON e.deptId = d.id;

五、LEFT Excluding JOIN ( A - B 即 A 表独有)+

SELECT * FROM t_emp e LEFT JOIN t_dept d ON e.deptId= d.id WHERE d.id is null;

六、RIGHT Excluding JOIN ( B - A 即 B表独有)

SELECT * FROM t_emp e RIGHT JOIN t_dept d ON e.deptId= d.id WHERE e.id is null;

七、OUTER Excluding JOIN (A 与 B 各自独有)

SELECT * FROM t_emp e LEFT JOIN t_dept d ON e.deptId= d.id WHERE d.id is null
UNION
SELECT * FROM t_emp e RIGHT JOIN t_dept d ON e.deptId= d.id WHERE e.id is null;

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由我继续带你回顾MySql的知识吧! 回顾练习资料girls库以及两张表的脚本: 链接: https://pan.baidu.com/s/1bgFrP7dBBwk3Ao755pU4Qg 提取码: ihg7 引题:笛卡尔现象,先来观看一下两张表. SELECT * FROM boys; SELECT *

  • MySQL多表查询的具体实例

    一 使用SELECT子句进行多表查询 SELECT 字段名 FROM 表1,表2 - WHERE 表1.字段 = 表2.字段 AND 其它查询条件 SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id 注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键

  • MySQL多表查询详解下

    好好吃饭,好好休息,听着很简单,实际落实缺失不那么容易. 继续回顾MySql的多表查询之1999语法 #二,SQL1999语法 语法: SELECT 查询列表 FROM 表1 别名 [连接类型] JOIN 表2 别名 ON 链接条件 [WHERE 筛选条件] [GROUP BY 分组] [HAVING 筛选条件] [ORDER BY 排序列表ASC|DESC] 分类(连接类型): 内连接(★): INNER 外联结 左外(★):LEFT [OUTER] 右外(★):RIGHT [OUTER] 全

  • 浅谈MySQL使用笛卡尔积原理进行多表查询

    MySQL的多表查询(笛卡尔积原理) 先确定数据要用到哪些表. 将多个表先通过笛卡尔积变成一个表. 然后去除不符合逻辑的数据(根据两个表的关系去掉). 最后当做是一个虚拟表一样来加上条件即可. 注意:列名最好使用表别名来区别. 笛卡尔积 Demo: 左,右连接,内,外连接 l 内连接: 要点:返回的是所有匹配的记录. select * from a,b where a.x = b.x ////内连接 l 外连接有左连接和右连接两种. 要点:返回的是所有匹配的记录 外加 每行主表外键值为null的

  • MySQL数据库高级查询和多表查询

    MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)', `username` VARCHAR(50) COMMENT '用户姓名', `age` CHAR(3) COMMENT '用户年龄' ); -- 订单表(orders) CREATE TABLE `orders`( `id` INT AUTO_INCREMENT PRIMARY KEY

  • MySQL 四种连接和多表查询详解

    目录 MySQL 内连接.左连接.右连接.外连接.多表查询 构建环境: 一.INNER JION 内连接 ( A ∩ B ) 二.LEFT JOIN 左外连接( A 全有 ) 三.RIGHT JOIN 右外连接 (B 全有) 四.FULL JOIN 全外连接( A + B) 五.LEFT Excluding JOIN ( A - B 即 A 表独有)+ 六.RIGHT Excluding JOIN ( B - A 即 B表独有) 七.OUTER Excluding JOIN (A 与 B 各自独

  • MySQL数据库之union,limit和子查询详解

    目录 1.where中的子查询 2.from子句后的子查询 3.union 4.limit查询 5.分页 1.where中的子查询 示例数据参见此文章 案例:查询比最低工资高的员工姓名和薪资 子查询,先查询子查询括号里的,再向上级进行查询 mysql> select ename,sal from emp where sal -> > -> (select min(sal) from emp); +--------+---------+ | ename | sal | +------

  • MySQL数据库查询进阶之多表查询详解

    目录 一.多表查询 1.引出 2.笛卡尔积 3. 笛卡尔积的解决方法 二.多表查询分类 1.等值连接和非等值连接 2.自连接和非自连接 3.内连接和外连接 4.UNION 4.自然连接 5.using连接 三.子查询 1.不相关子查询 2.相关子查询 四.聚合函数 1.聚合函数介绍 1.1 AVG和SUM函数 1.2 MIN和MAX函数 1.3 COUNT函数 2.group by 3.使用having进行分组后的筛选 五.where和having的对比 六.select的执行过程 1.关键字顺

  • Java Rabbitmq中四种集群架构的区别详解

    目录 主备模式 远程模式 镜像模式 多活模式 Federation插件 总结 Rabbitmq 四种集群架构 1. 主备模式 2. 远程模式3. 镜像模式  4. 多活模式 主备模式 主备模式: warren 兔子窝 一个主.一个备方案 主节点如果挂了 从节点提供服务 和Activemq 利用zk 做主/备一样 主备模式 ----------------------->HaProxy 配置 listen rabbitmq_cluster bind 0.0.0.0:5682 # 配置tcp 模式

  • Java中四种线程池的使用示例详解

    在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及"过度切换". 本文详细的给大家介绍了关于Java中四种线程池的使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: FixedThreadPool 由Executors的newFixedThreadPool方法创建.它是一种线程数量固定的线程

  • MySQL如何优雅的删除大表实例详解

    前言 删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候.这样一条命令下去,MySQL可能就直接夯住了,外在表现就是QPS急速下降,客户请求变慢. 解决办法 1.业务低峰时间手动执行删除 这个可能就需要DBA不辞辛劳,大晚上爬起来删表了. 2.先清除数据,最后再删除的方式 譬如1000万条数据,写脚本每次删除20万,睡眠一段时间,继续执行.这样也能做到对用户无感知. 3.对表文件(idb文件

  • Java MyBatis 多表查询详解

    目录 多表查询: 一对一: 一对多: 多对多: 总结 多表查询: 学生表.班级表.课程表.班级课程表 一对一: 一个学生只属于一个班级. 查询: id  name  age  gender   banjiName SELECT s.id,s.`name`,s.age,s.gender,b.id AS banjiId,b.name AS banjiName FROM student AS s INNER JOIN banji AS b ON s.banji_id=b.id; MyBatis中使用a

  • mysql的内连接,左连接和右链接查询详解

    mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | runoob_author | runoob_count | +---------------+--------------+ | 菜鸟教程 | 10 | | RUNOOB.COM | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SE

随机推荐