一、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用法相关推荐

  1. mysql semi join_MySQL 通过semi join 优化子查询

    半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...

  2. mysql hash join_MySQL的Hash Join能用吗?

    最近有两篇MySQL大咖级人物的文章引起了小伙伴们的关注,文章内容是关于MySQL的hash join功能.hash join看起来不够智能,于是我打算一探究竟,看看是否能发现些端倪,文末解释了大咖们 ...

  3. mysql left join_MySQL LEFT JOIN 语法用法与实例

    MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT JOIN 基本语法如下: ... ...

  4. mysql join指定字段,mysql inner join用法

    inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...

  5. 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 ...

  6. MySQL中Left Join用法

    MySQL中Left Join用法  例子:  user表:  id name  ---------  1 libk  2 zyfon  3 daodao  user_action表:  user_i ...

  7. MySQL应用之CROSS JOIN用法(有时挺管用)

    目录 cross join简介 cross join用法 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www ...

  8. 数据基础---mysql数据库操作(二)---JOIN用法

    mysql的john用法总结 左"的笛卡尔积和"右"的笛卡尔积 根据mysql join 连接的方式我把它归为两类,"左"的笛卡尔积和"右& ...

  9. mysql不同字段full join_Mysql实现full join的替换方法

    目前mysql还不支持full join,只能使用left join.union.right join来实现.但使用这个方法解决多次full join的话代码量非常庞大,一直在思考有没有其他替代方法. ...

  10. mysql as join_mysql as 别名与 join 多表连接语法

    在MySQL中,使用AS关键字为字段.表.视图取别名,或者不用as,用空格隔开: SELECT (SELECT id a,title b FROM blog c limit 1)d; 使用字段别名,可 ...

最新文章

  1. QML基本可视化元素--Text
  2. eclipse中创建类和包的快捷方式
  3. Robots.txt - 禁止爬虫(转)
  4. 当电桥为恒流源时惠斯通电桥电压的计算方法
  5. 韩嫕:坚持coding
  6. WF4 常用类第二篇
  7. Oracle 20c 新特性:自动的区域图 - Automatic Zone Maps
  8. Eclipse快速创建Bottom Up类型的Web Service服务端
  9. 送专利啦~~ .Net高阶异常处理之TopLevelEH
  10. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别
  11. 年底购物狂欢,移动支付安全不容忽视
  12. kafka如何确定分区数
  13. 现代软件工程—构建之法---第四章:练习与讨论
  14. c语言矩阵连乘递归算法,动态规划求解矩阵连乘问题
  15. 最新微信视频强制分享系统源码+引流裂变分享
  16. videojs-flash.min.js 报错 this.el_.vjs_getProperty is not a function
  17. 图/图的存储/图的遍历
  18. 什么是迭代和增量开发
  19. 牛客每日练习----骑行川藏,Lucky Coins,不凡的夫夫
  20. 4.4 服务器上的 Git - 配置服务器

热门文章

  1. java ocx调用_Javascript调用OCX控件
  2. SQL-55 分页查询employees表,每5行一页,返回第2页的数据
  3. JS 屏蔽按键效果和改变按键效果
  4. (13)Result机制,让视图更丰富
  5. 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用
  6. sqlplus无密码登录TNS协议适配器错误
  7. 软件开发常用设计模式—单例模式总结(c++版)
  8. Android UI系列-----Dialog对话框
  9. mootools-1.2.1-core.js在IE中显示不了图像翻页
  10. mybatis-generator逆向工程生成boolean字段解决办法