博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql学习之join用法
阅读量:4688 次
发布时间:2019-06-09

本文共 6620 字,大约阅读时间需要 22 分钟。

转载  

一、JOIN 使用介绍

下面例子使用的数据表如下:

-- ------------------------------ Table structure for dancing_hobby-- ----------------------------DROP TABLE IF EXISTS `dancing_hobby`;CREATE TABLE `dancing_hobby`  (  `id` int(11) NOT NULL COMMENT '主键',  `stu_num` int(11) NULL DEFAULT NULL COMMENT '学号',  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',  `age` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '年龄',  `sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '男生1 女生2',  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of dancing_hobby-- ----------------------------INSERT INTO `dancing_hobby` VALUES (1, 1001, '小红', '18', '1');INSERT INTO `dancing_hobby` VALUES (2, 1002, '小红', '18', '2');INSERT INTO `dancing_hobby` VALUES (3, 1003, '小黑', '18', '1');INSERT INTO `dancing_hobby` VALUES (4, 2001, '大绿', '18', '1');INSERT INTO `dancing_hobby` VALUES (5, 1005, '小紫', '18', '2');INSERT INTO `dancing_hobby` VALUES (6, 2002, '大蓝', '18', '1');INSERT INTO `dancing_hobby` VALUES (7, 1007, '小黄', '18', '1');INSERT INTO `dancing_hobby` VALUES (8, 2003, '大白', '18', '1');INSERT INTO `dancing_hobby` VALUES (9, 1009, '小橙', '18', '2');INSERT INTO `dancing_hobby` VALUES (10, 2004, '大青', '18', '2');-- ------------------------------ Table structure for sing_hobby-- ----------------------------DROP TABLE IF EXISTS `sing_hobby`;CREATE TABLE `sing_hobby`  (  `id` int(11) NOT NULL COMMENT '主键',  `stu_num` int(11) NULL DEFAULT NULL COMMENT '学号',  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',  `age` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '年龄',  `sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '男生1 女生2',  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of sing_hobby-- ----------------------------INSERT INTO `sing_hobby` VALUES (1, 1001, '小红', '18', '1');INSERT INTO `sing_hobby` VALUES (2, 1002, '小红', '18', '2');INSERT INTO `sing_hobby` VALUES (3, 1003, '小黑', '18', '1');INSERT INTO `sing_hobby` VALUES (4, 1004, '小绿', '18', '1');INSERT INTO `sing_hobby` VALUES (5, 1005, '小紫', '18', '2');INSERT INTO `sing_hobby` VALUES (6, 1006, '小蓝', '18', '1');INSERT INTO `sing_hobby` VALUES (7, 1007, '小黄', '18', '1');INSERT INTO `sing_hobby` VALUES (8, 1008, '小白', '18', '1');INSERT INTO `sing_hobby` VALUES (9, 1009, '小橙', '18', '2');INSERT INTO `sing_hobby` VALUES (10, 1010, '小青', '18', '2');

1.INNER JOIN(内连接)

INNER JOIN 一般被译作内连接。内连接查询能将左表(表 A)和右表(表 B)中能关联起来的数据连接后返回。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A AINNER JOIN Table_B BON A.Key = B.Key

例子:

-- 内连接SELECT    sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROM    sing_hobby sing    inner JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num

2.LEFT JOIN(左连接)

LEFT JOIN 一般被译作左连接,也写作 LEFT OUTER JOIN。左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A ALEFT JOIN Table_B BON A.Key = B.Key

例子:

-- 左连接SELECT    sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROM    sing_hobby sing    LEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num

3.RIGHT JOIN(右连接)

RIGHT JOIN 一般被译作右连接,也写作 RIGHT OUTER JOIN。右连接查询会返回右表(表 B)中所有记录,不管左表(表 A)中有没有关联的数据。在左表中找到的关联数据列也会被一起返回。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A ARIGHT JOIN Table_B BON A.Key = B.Key

例子:

-- 右连接SELECT    sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROM    sing_hobby sing    RIGHT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num

4.FULL OUTER JOIN(外连接)

FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOIN 或 FULL JOIN。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A AFULL OUTER JOIN Table_B BON A.Key = B.Key

注:mysql不支持外连接,可以使用 UNION ALL 代替,但要注意,如果要查询的两个表不是全部字段,那查询两个表的字段个数要相同,如下例子。

例子:

-- 外连接SELECT sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sex FROM sing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_numUNION ALLSELECT sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sex FROM sing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_numWHERE sing.stu_num IS NULL-- 外连接SELECT    sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROM    sing_hobby sing    FULL JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num

5.LEFT JOIN EXCLUDING INNER JOIN(左连接-内连接)

返回左表有,右表没有的关联数据记录集。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A ALEFT JOIN Table_B BON A.Key = B.KeyWHERE B.Key IS NULL

例子:

-- 左内连接SELECT    sing.`name` AS sing_name,    sing.sex sing_sex,    dancing.`name` dancing_name,    dancing.sex dancing_sex FROM    sing_hobby sing    LEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num WHERE    dancing.stu_num IS NULL

6.RIGHT JOIN EXCLUDING INNER JOIN(右连接-内连接)

返回右表有,左表没有的关联数据记录集。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A ARIGHT JOIN Table_B BON A.Key = B.KeyWHERE A.Key IS NULL

例子:

-- 右内连接SELECT    sing.`name` AS sing_name,    sing.sex sing_sex,    dancing.`name` dancing_name,    dancing.sex dancing_sex FROM    sing_hobby sing    RIGHT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num WHERE    sing.stu_num IS NULL

7.OUTER JOIN EXCLUDING INNER JOIN(外连接-内连接)

返回右表、左表没有的关联数据记录集。

一张图看懂 SQL 的各种 join 用法

SELECT 
FROM Table_A AFULL OUTER JOIN Table_B BON A.Key = B.KeyWHERE A.Key IS NULL OR B.Key IS NULL

 例子:

-- 排除内连接的外连接SELECT sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sex FROM sing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_numWHERE sing.stu_num IS NULL OR dancing.stu_num IS NULLUNION ALLSELECT sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sex FROM sing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_numWHERE sing.stu_num IS NULL OR dancing.stu_num IS NULL-- 排除内连接的外连接SELECT    sing.`name` AS sing_name,    sing.sex sing_sex,    dancing.`name` dancing_name,    dancing.sex dancing_sex FROM    sing_hobby sing    FULL JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num WHERE    sing.stu_num IS NULL OR dancing.stu_num IS NULL

转载于:https://www.cnblogs.com/nananana/p/9354135.html

你可能感兴趣的文章
gridview 自定义value值
查看>>
2018二月实现计划成果及其三月规划
查看>>
封装springmvc处理ajax请求结果
查看>>
tyvj P2018 「Nescafé26」小猫爬山 解题报告
查看>>
类名.class和getClass()区别
查看>>
开发脚本自动部署及监控
查看>>
JavaScript--语句
查看>>
12/17面试题
查看>>
css 继承和层叠
查看>>
javascript实现图片轮播3D效果
查看>>
ssl初一组周六模拟赛【2018.3.17】
查看>>
[RxJS] Avoid mulit post requests by using shareReplay()
查看>>
C++和C#之间的数据类型对应关系
查看>>
模型分离(选做)
查看>>
LeetCode 242. Valid Anagram
查看>>
观察者模式------《Head First 设计模式》
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
【BZOJ4592】[Shoi2015]脑洞治疗仪 线段树
查看>>
redis sentinel 读写分离
查看>>