MySQL JOIN的使用「终于解决」

MySQL JOIN的使用「终于解决」JOIN的使用 JOIN 理论 MySQL 七种 JOIN 的 SQL 编写 环境搭建 # 创建部门表 CREATE TABLE tbl_dept ( id INT NOT NULL AUTO_INC

MySQL JOIN的使用

JOIN的使用

JOIN 理论

MySQL JOIN的使用「终于解决」

MySQL 七种 JOIN 的 SQL 编写

环境搭建

# 创建部门表
CREATE TABLE tbl_dept (
  id INT NOT NULL AUTO_INCREMENT,
  deptName VARCHAR (30) DEFAULT NULL,
  locAdd VARCHAR (40) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT chharset = utf8 ;

# 创建员工表
CREATE TABLE tbl_emp (
  id INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR (20) DEFAULT NULL,
  deptId INT (11) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_dept_id (deptId) CONSTRAINT fk_dept_id FORREIGN KEY (deptId) REFERENCES tbl_dept (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = uttf8 ;

# 插入部门信息
INSERT INTO tbl_dept(deptName,locAdd) VALUES("RD",11),("HR",12),("MK",13),("MIS",14),("FD",15);

# 插入员工信息
INSERT INTO tbl_emp(`name`,deptId) VALUES("z3",1),("z4",1),("z5",1),("w5",2),("w6",2),("s7",3),("s8",4),("s9",51);

1.内连接(INNER JOIN)

语句
SELECT * FROM tbl_dept a INNER JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • 可以理解为两个集合的交集

2.左(外)连接(LEFT JOIN)

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • LEFT JOIN 返回左表的全部行和右表满足 ON 条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用 NULL 代替

3.右(外)连接(RIGHT JOIN)

语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • RIGHT JOIN 返回右表的全部行和左表满足 ON 条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用 NULL 代替。

4.左表独有

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId WHERE b.deptId IS NULL;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • 查询左表独有的数据 (注意:左表独有,右表 key 为空)

5.右表独有

语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId WHERE a.id IS NULL;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • 查询右表独有的数据 (注意:右表独有,左表 key 为空)

6.全连接

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId 
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • mysql 中不支持 FULL JOIN 进行全连接,可以用 一个左连接 UNION 一个右连接

7.左右表独有

语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id=b.deptId WHERE b.deptId IS NULL
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id=b.deptId WHERE a.id IS NULL;
有图有真相

MySQL JOIN的使用「终于解决」

理解
  • 左右表独有 = 左表独有 + 右表独有

我是阿廷,一个相信努力可以改变人生的人,我相信一切的上进行为都是值得的,至少可以让我看见更大的世界。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5923.html

(0)
上一篇 2023-04-21
下一篇 2023-04-21

相关推荐

  • mysql参数innodb_flush_method解析

    mysql参数innodb_flush_method解析背景 由于mysql的innodb引擎对于数据文件和日志文件都有自己的内存缓冲,在真正写入磁盘时,完全可以不使用os的io缓冲机制(避免双缓冲的冗余浪费)。 所以mysql提供了对应的参数innod…

    2023-01-26
    164
  • PostgreSQL VACUUM 之深入浅出 (四)「建议收藏」

    PostgreSQL VACUUM 之深入浅出 (四)「建议收藏」VACUUM 参数优化 上面已经介绍过了以下设置表级 AUTOVACUUM 相关参数和 autovacuum_max_workers: ALTER TABLE pgbench_accounts SET

    2023-05-07
    88
  • 使用Python读取文件内容

    使用Python读取文件内容Python可以通过多种方式读取文件,最常用的方式为使用with关键字打开文件,然后循环读取文件中的每一行内容。

    2023-12-26
    69
  • mybatis面试热点

    mybatis面试热点什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的…

    2023-01-28
    114
  • in与exists和not in 与 not exists的区别「建议收藏」

    in与exists和not in 与 not exists的区别「建议收藏」1、in 与 exists:   外表大,用IN;内表大,用EXISTS;   原理:   用in:外表使用了索引,直接作hash连接;   用exists:内表使用了索引,外表作loop循环再进行…

    2023-04-04
    110
  • MySQL学习笔记——基础与进阶篇「建议收藏」

    MySQL学习笔记——基础与进阶篇「建议收藏」目录 一、###MySQL登录和退出 二、###MySQL常用命令 三、###MySQL语法规范 四、###基础查询 五、###条件查询 六、###排序查询 七、###常见函数的学习 八、###分组查

    2022-12-30
    86
  • centOS7 安装 界面 tab_centos4部署redis

    centOS7 安装 界面 tab_centos4部署redis本教程适用于centos7.X,redis版本为6.0.3,采用在线安装方式,安装好centos后首先确保网络可用 1.安装下载工具wget 1.1.若出现类似以下问题,则可能是默认的yum源不可用

    2023-03-04
    112
  • Python数据可视化利器:Matplotlib库的用法

    Python数据可视化利器:Matplotlib库的用法数据可视化已经成为了现代数据科学家和工程师的重要工作之一。Matplotlib是一个优秀的数据可视化库,它支持众多的绘图类型,包括线图,散点图,柱状图,等高线图,和复杂的3D图形。Matplotlib库的设计目标是兼容MATLAB语法,这使得它成为科学计算中最受欢迎的绘图库之一。

    2024-04-12
    24

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注