SQL:MySQL7种JOIN用法总结
SQL 总结 用法 Join
2023-09-27 14:24:15 时间
数据准备
1、建2张表
# 姓名表
create table table_name(
id int(11) primary key auto_increment,
user_id int(11) default 0,
name varchar(5) default ''
);
# 年龄表
create table table_age(
id int(11) primary key auto_increment,
user_id int(11) default 0,
age int(11) default 0
);
2、原始数据
# user_id, name, age
(1, "小赵", 21),
(2, "小钱", 22),
(3, "小孙", 23),
将6条数据分为两部分插入到数据库中
# 名字表少一条 user_id = 3
insert into table_name(user_id, name)
values(1, "小赵"), (2, "小钱");
# 年龄表少一条 user_id = 2
insert into table_age(user_id, age)
values(1, 21), (3, 23);
3、查看数据
mysql> select * from table_name;
+----+---------+--------+
| id | user_id | name |
+----+---------+--------+
| 1 | 1 | 小赵 |
| 2 | 2 | 小钱 |
+----+---------+--------+
mysql> select * from table_age;
+----+---------+------+
| id | user_id | age |
+----+---------+------+
| 1 | 1 | 21 |
| 3 | 3 | 23 |
+----+---------+------+
1、INNER JOIN(内连接)
mysql> select a.user_id, name, age
-> from table_name as a inner join table_age as b
-> on a.user_id=b.user_id;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 1 | 小赵 | 21 |
+---------+--------+------+
2、LEFT JOIN (左连接)
mysql> select a.user_id, name, age
from table_name as a left join table_age as b
on a.user_id=b.user_id;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 1 | 小赵 | 21 |
| 2 | 小钱 | NULL |
+---------+--------+------+
3、RIGHT JOIN(右连接)
mysql> select b.user_id, name, age
from table_name as a right join table_age as b
on a.user_id=b.user_id;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 1 | 小赵 | 21 |
| 3 | NULL | 23 |
+---------+--------+------+
4、UNION(全连接)
mysql 没有outer join 用union替代
mysql> select a.user_id, name, age
from table_name as a left join table_age as b
on a.user_id =b.user_id
union
select b.user_id, name, age
from table_name as a right join table_age as b
on a.user_id =b.user_id;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 1 | 小赵 | 21 |
| 2 | 小钱 | NULL |
| 3 | NULL | 23 |
+---------+--------+------+
5、LEFT JOIN EXCLUDING INNER JOIN(左连接-内连接)
mysql> select a.user_id, name, age
-> from table_name as a left join table_age as b
-> on a.user_id=b.user_id
-> where b.user_id is null;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 2 | 小钱 | NULL |
+---------+--------+------+
6.RIGHT JOIN EXCLUDING INNER JOIN(右连接-内连接)
mysql> select b.user_id, name, age
-> from table_name as a right join table_age as b
-> on a.user_id=b.user_id
-> where a.user_id is null;
+---------+------+------+
| user_id | name | age |
+---------+------+------+
| 3 | NULL | 23 |
+---------+------+------+
7、OUTER JOIN EXCLUDING INNER JOIN(外连接-内连接)
mysql> select a.user_id, name, age
-> from table_name as a left join table_age as b
-> on a.user_id =b.user_id
-> where b.user_id is null
-> union
-> select b.user_id, name, age
-> from table_name as a right join table_age as b
-> on a.user_id =b.user_id
-> where a.user_id is null;
+---------+--------+------+
| user_id | name | age |
+---------+--------+------+
| 2 | 小钱 | NULL |
| 3 | NULL | 23 |
+---------+--------+------+
8、笛卡尔积
mysql> select * from table_name join table_age;
+----+---------+--------+----+---------+------+
| id | user_id | name | id | user_id | age |
+----+---------+--------+----+---------+------+
| 1 | 1 | 小赵 | 1 | 1 | 21 |
| 2 | 2 | 小钱 | 1 | 1 | 21 |
| 1 | 1 | 小赵 | 2 | 3 | 23 |
| 2 | 2 | 小钱 | 2 | 3 | 23 |
+----+---------+--------+----+---------+------+
总结
操作 | 关键字 | 解释 | 图示 |
---|---|---|---|
内连接 | INNER JOIN | A ∩ B A \cap B A∩B | ![]() |
左连接 | LEFT JOIN | a ∈ A a \in A a∈A | ![]() |
右连接 | RIGHT JOIN | a ∈ B a \in B a∈B | ![]() |
全连接 | UNION | A ∪ B A \cup B A∪B | ![]() |
左表独有 | LEFT JOIN WHERE | A − A ∩ B A - A \cap B A−A∩B | ![]() |
右表独有 | RIGHT JOIN WHERE | B − A ∩ B B - A \cap B B−A∩B | ![]() |
并集去交集 | UNION WHERE | A ∪ B − A ∩ B A \cup B - A \cap B A∪B−A∩B | ![]() |
相关文章
- sql 学 习总结
- mysql 多表 update sql语句总结
- sql中同一个表的上下两行之间的某个字段相减有关问题
- SQL中的join操作总结(非常好)
- SQL 修改数据库中的某个字符,修改数据库中的年或月或日
- 201 Spark SQL查询程序
- clickhouse MPPDB数据库 运维实用SQL总结
- [转]SQL Server® 2008 R2 Express 静默安装
- sql 语句中count()有条件的时候为什么要加上or null
- SQL 注入防御方法总结
- 基于Java( jsp+servlet+javabean)+SQL sever 2017实现(Web)高校选课管理系统【100010058】
- 在oracle中操作数据——使用特点的格式插入日期 sql函数的使用——日期函数
- 转 mysql mysql命令行中执行sql的几种方式总结
- 在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
- 数据库SQL优化大总结之 百万级数据库优化方案
- asp and javascript: sql server export data to csv and to xls
- 总结SQL Server窗口函数的简单使用
- SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种) .
- CTF竞赛网络安全大赛(网鼎杯 )Web|sql注入java反序列化
- 如何获取有性能问题的sql
- SQL Server监控系列之调优排错
- SQL Server数据库程序设计知识总结
- 10款最佳SQL Server服务器监控工具
- SQL server USE GO语句学习总结
- SQL SERVER 转换大小写
- 数据库系统原理课程总结3——SQL语句,建表,主键外键,存储过程,批量输入百万级数据