mysql之join_mysql学习之join用法
一、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)中能关联起来的数据连接后返回。
SELECT
FROMTable_A AINNER JOINTable_B BON A.Key = B.Key
例子:
--内连接
SELECTsing.`name`assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singinner JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
2.LEFT JOIN(左连接)
LEFT JOIN 一般被译作左连接,也写作 LEFT OUTER JOIN。左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。
SELECT
FROMTable_A ALEFT JOINTable_B BON A.Key = B.Key
例子:
--左连接
SELECTsing.`name`assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
3.RIGHT JOIN(右连接)
RIGHT JOIN 一般被译作右连接,也写作 RIGHT OUTER JOIN。右连接查询会返回右表(表 B)中所有记录,不管左表(表 A)中有没有关联的数据。在左表中找到的关联数据列也会被一起返回。
SELECT
FROMTable_A ARIGHT JOINTable_B BON A.Key = B.Key
例子:
--右连接
SELECTsing.`name`assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
4.FULL OUTER JOIN(外连接)
FULL OUTER JOIN 一般被译作外连接、全连接,实际查询语句中可以写作 FULL OUTER JOIN 或 FULL JOIN。外连接查询能返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回。
SELECT
FROMTable_A AFULL OUTER JOINTable_B BON A.Key = B.Key
注:mysql不支持外连接,可以使用 UNION ALL 代替,但要注意,如果要查询的两个表不是全部字段,那查询两个表的字段个数要相同,如下例子。
例子:
--外连接
SELECT sing.`name` assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numUNION ALL
SELECT sing.`name` assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHERE sing.stu_num IS NULL
--外连接
SELECTsing.`name`assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singFULL JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
5.LEFT JOIN EXCLUDING INNER JOIN(左连接-内连接)
返回左表有,右表没有的关联数据记录集。
SELECT
FROMTable_A ALEFT JOINTable_B BON A.Key = B.Key
WHERE B.Key IS NULL
例子:
--左内连接
SELECTsing.`name`ASsing_name,
sing.sex sing_sex,
dancing.`name` dancing_name,
dancing.sex dancing_sexFROMsing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHEREdancing.stu_numIS NULL
6.RIGHT JOIN EXCLUDING INNER JOIN(右连接-内连接)
返回右表有,左表没有的关联数据记录集。
SELECT
FROMTable_A ARIGHT JOINTable_B BON A.Key = B.Key
WHERE A.Key IS NULL
例子:
--右内连接
SELECTsing.`name`ASsing_name,
sing.sex sing_sex,
dancing.`name` dancing_name,
dancing.sex dancing_sexFROMsing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHEREsing.stu_numIS NULL
7.OUTER JOIN EXCLUDING INNER JOIN(外连接-内连接)
返回右表、左表没有的关联数据记录集。
SELECT
FROMTable_A AFULL OUTER JOINTable_B BON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL
例子:
--排除内连接的外连接
SELECT sing.`name` assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singLEFT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHERE sing.stu_num IS NULL OR dancing.stu_num IS NULL
UNION ALL
SELECT sing.`name` assing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sexFROMsing_hobby singRIGHT JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHERE sing.stu_num IS NULL OR dancing.stu_num IS NULL
--排除内连接的外连接
SELECTsing.`name`ASsing_name,
sing.sex sing_sex,
dancing.`name` dancing_name,
dancing.sex dancing_sexFROMsing_hobby singFULL JOIN dancing_hobby dancing ON sing.stu_num =dancing.stu_numWHEREsing.stu_numIS NULL OR dancing.stu_num IS NULL
mysql之join_mysql学习之join用法相关推荐
- mysql semi join_MySQL 通过semi join 优化子查询
半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...
- mysql hash join_MySQL的Hash Join能用吗?
最近有两篇MySQL大咖级人物的文章引起了小伙伴们的关注,文章内容是关于MySQL的hash join功能.hash join看起来不够智能,于是我打算一探究竟,看看是否能发现些端倪,文末解释了大咖们 ...
- mysql left join_MySQL LEFT JOIN 语法用法与实例
MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT JOIN 基本语法如下: ... ...
- mysql join指定字段,mysql inner join用法
inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...
- mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...
超详细mysql left join,right join,inner join用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a200 ...
- MySQL中Left Join用法
MySQL中Left Join用法 例子: user表: id name --------- 1 libk 2 zyfon 3 daodao user_action表: user_i ...
- MySQL应用之CROSS JOIN用法(有时挺管用)
目录 cross join简介 cross join用法 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www ...
- 数据基础---mysql数据库操作(二)---JOIN用法
mysql的john用法总结 左"的笛卡尔积和"右"的笛卡尔积 根据mysql join 连接的方式我把它归为两类,"左"的笛卡尔积和"右& ...
- mysql不同字段full join_Mysql实现full join的替换方法
目前mysql还不支持full join,只能使用left join.union.right join来实现.但使用这个方法解决多次full join的话代码量非常庞大,一直在思考有没有其他替代方法. ...
- mysql as join_mysql as 别名与 join 多表连接语法
在MySQL中,使用AS关键字为字段.表.视图取别名,或者不用as,用空格隔开: SELECT (SELECT id a,title b FROM blog c limit 1)d; 使用字段别名,可 ...
最新文章
- QML基本可视化元素--Text
- eclipse中创建类和包的快捷方式
- Robots.txt - 禁止爬虫(转)
- 当电桥为恒流源时惠斯通电桥电压的计算方法
- 韩嫕:坚持coding
- WF4 常用类第二篇
- Oracle 20c 新特性:自动的区域图 - Automatic Zone Maps
- Eclipse快速创建Bottom Up类型的Web Service服务端
- 送专利啦~~ .Net高阶异常处理之TopLevelEH
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别
- 年底购物狂欢,移动支付安全不容忽视
- kafka如何确定分区数
- 现代软件工程—构建之法---第四章:练习与讨论
- c语言矩阵连乘递归算法,动态规划求解矩阵连乘问题
- 最新微信视频强制分享系统源码+引流裂变分享
- videojs-flash.min.js 报错 this.el_.vjs_getProperty is not a function
- 图/图的存储/图的遍历
- 什么是迭代和增量开发
- 牛客每日练习----骑行川藏,Lucky Coins,不凡的夫夫
- 4.4 服务器上的 Git - 配置服务器
热门文章
- java ocx调用_Javascript调用OCX控件
- SQL-55 分页查询employees表,每5行一页,返回第2页的数据
- JS 屏蔽按键效果和改变按键效果
- (13)Result机制,让视图更丰富
- 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用
- sqlplus无密码登录TNS协议适配器错误
- 软件开发常用设计模式—单例模式总结(c++版)
- Android UI系列-----Dialog对话框
- mootools-1.2.1-core.js在IE中显示不了图像翻页
- mybatis-generator逆向工程生成boolean字段解决办法