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, '小红', '', '');
INSERT INTO `dancing_hobby` VALUES (2, 1002, '小红', '', '');
INSERT INTO `dancing_hobby` VALUES (3, 1003, '小黑', '', '');
INSERT INTO `dancing_hobby` VALUES (4, 2001, '大绿', '', '');
INSERT INTO `dancing_hobby` VALUES (5, 1005, '小紫', '', '');
INSERT INTO `dancing_hobby` VALUES (6, 2002, '大蓝', '', '');
INSERT INTO `dancing_hobby` VALUES (7, 1007, '小黄', '', '');
INSERT INTO `dancing_hobby` VALUES (8, 2003, '大白', '', '');
INSERT INTO `dancing_hobby` VALUES (9, 1009, '小橙', '', '');
INSERT INTO `dancing_hobby` VALUES (10, 2004, '大青', '', ''); -- ----------------------------
-- 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, '小红', '', '');
INSERT INTO `sing_hobby` VALUES (2, 1002, '小红', '', '');
INSERT INTO `sing_hobby` VALUES (3, 1003, '小黑', '', '');
INSERT INTO `sing_hobby` VALUES (4, 1004, '小绿', '', '');
INSERT INTO `sing_hobby` VALUES (5, 1005, '小紫', '', '');
INSERT INTO `sing_hobby` VALUES (6, 1006, '小蓝', '', '');
INSERT INTO `sing_hobby` VALUES (7, 1007, '小黄', '', '');
INSERT INTO `sing_hobby` VALUES (8, 1008, '小白', '', '');
INSERT INTO `sing_hobby` VALUES (9, 1009, '小橙', '', '');
INSERT INTO `sing_hobby` VALUES (10, 1010, '小青', '', '');
1.INNER JOIN(内连接)
INNER JOIN 一般被译作内连接。内连接查询能将左表(表 A)和右表(表 B)中能关联起来的数据连接后返回。

SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
例子:
-- 内连接
SELECT
sing.`name` as sing_name,sing.sex sing_sex,dancing.`name` dancing_name,dancing.sex dancing_sex
FROM
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)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
例子:
-- 左连接
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

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

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
例子:
-- 右连接
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

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

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON 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 sing
LEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
UNION ALL
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 -- 外连接
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

5.LEFT JOIN EXCLUDING INNER JOIN(左连接-内连接)
返回左表有,右表没有的关联数据记录集。

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE 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(右连接-内连接)
返回右表有,左表没有的关联数据记录集。

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE 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(外连接-内连接)
返回右表、左表没有的关联数据记录集。

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE 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 sing
LEFT JOIN dancing_hobby dancing ON sing.stu_num = dancing.stu_num
WHERE sing.stu_num IS NULL OR dancing.stu_num IS NULL
UNION ALL
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 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

mysql学习之join用法的更多相关文章
- mysql中的JOIN用法总结
join是mysql中一个基础的关键词,一般在多表连接查询中使用,这里做一下总结 1.JOIN的语法格式 table_references: table_reference [, table_refe ...
- mysql学习之join从句
一.join从句共有5种类型 内连接(inner join) 全外连接(full outer join) 左外连接(left outer join) 右外连接(right outer join) 交叉 ...
- MySQL学习 EXISTS的用法 转载
比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...
- 一张图概括mysql的各种join用法
- MySQL基础之STRAIGHT JOIN用法简介
MySQL基础之STRAIGHT JOIN用法简介 引用mysql官方手册的说法: STRAIGHT_JOIN is similar to JOIN, except that the left tab ...
- mysql中left join right join inner join用法分析
mysql数据库中的关联查询,基本都会用到left join,right join,inner join等查询方式,今天来说说这三种用法的区别 1.创建表test1,test2,插入测试数据 #创建表 ...
- MySQL应用之CROSS JOIN用法简介教程
目录 2. cross join用法 @ 本博客翻译自两篇博客的: http://www.mysqltutorial.org/mysql-cross-join/ https://www.w3resou ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
- 一千行MySQL学习笔记 (转)
出处: 一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...
随机推荐
- Lucene学习之二:Lucene的总体架构
本文转载自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623596.html Lucene总的来说是: 一个高效的,可扩展的,全 ...
- GuavaCache实现堆缓存
一.缓存 频繁地数据库I/O是很大的负担,而缓存是减少I/O提高性能的银弹. 缓存的实现一般上是以类似map的键值对的形式,并对外提供put和get方法,但缓存空间不能无限扩大,所以它得有一种缓存清除 ...
- java 输出菱形
package com.demo01; public class Triangle { /** * @param args */ /* * 第一步:规定输出的行数 * 第二步:输出空格 再输出一个星, ...
- Idea15 常用设置(一):JDK、SVN
1:显示行号 File->Settings->General->Appearance 2: 代码自动补齐即使是小写字母也会弹出代码补齐提示 3:自动编译 设置 4: 设 ...
- CentOS 7运维管理笔记(9)----Apache 安全控制与认证
Apache 提供了多种安全控制手段,包括设置Web访问控制.用户登陆密码认证及 .htaccess 文件等.通过这些技术手段,可以进一步提升Apache服务器的安全级别,减少服务器受攻击或数据被窃取 ...
- [转]ggplot2用法简单介绍
简介 ggplot2包是基于Wilkinson在<Grammar of Graphics>一书中所提出的图形语法的具体实现, 这套图形语法把绘图过程归纳为data, transformat ...
- chengfa
public class ddddd{ public static void main(String[] args) { ; ; i <= m; i++) { ; j <= i; j++) ...
- 【Web】JavaScript 语法入门
一. 简介 动态性和交互性 1.由浏览器解释执行 2.常见的脚本语言:JavaScript和VBScript P.S. Node.js 是使用JavaScript编写的服务器端框架. 二. JavaS ...
- content provider其中操作文件的函数
此类函数还是有杀伤力的 1.openAssetFile(Uri uri, String mode)This is like openFile(Uri, String), but can be impl ...
- Java—进程与线程
进程与线程 进程是程序(任务)的执行过程,具有动态性:持有资源(共享内存.共享文件)和线程,是资源和线程的载体. 线程是系统中最小的执行单元,同一进程中有多个线程,线程共享进程的资源. 线程的交互,交 ...