7种SQL Join语句

简介: 7种SQL Join语句

1、SQL语句结构

select  distinct  < select_list >
    from  < left_table > < join_type >
    join  < right_table >
      on  < join_condition >
   where  < where_condition >
group by  < group_by_list >
  having  < having_condition >
order by  < order_by_condition >
   limit  < limit_number >

2、7种Join方式及实例

实验脚本:

drop table IF EXISTS shuzi ;

create table shuzi (id tinyint,note varchar(20));

insert into shuzi values (1,'一'),(2,'二'),(3,'三'),(4,'四'),(5,'五'),(6,'六'),(7,'七'),(8,'八'),(9,'九'),(10,'十');

select * from shuzi;

drop table IF EXISTS qianshu ;

create table qianshu (id int,des varchar(20));

insert into qianshu values (1,'壹'),(2,'贰'),(4,'肆'),(5,'伍'),(6,'陆'),(10,'拾'),(100,'佰'),(1000,'仟'),(10000,'万');

select * from qianshu;

如果需要取的表中的字段信息为必须不为空字段,则用inner join;

如果可为空,或者可有可没有,则用left join;right join


左连接,左表的全部,右表不满足的列补空

select a.id,a.note,b.id,b.des from shuzi a left join qianshu  b on a.id=b.id order by a.id;


右连接,右表的全部,左表不满足的列补空

select a.id,a.note,b.id,b.des from shuzi a right join qianshu  b on a.id=b.id order by b.id;


内连接,只输出左右表均存在的记录(默认from a,b方式)

SELECT a.id,a.note,b.id,b.des FROM shuzi a INNER JOIN qianshu  b ON a.id=b.id ORDER BY b.id;


左连接,只保留左表特有数据(差集)

select a.id,a.note,b.id,b.des from shuzi a left join qianshu  b on a.id=b.id where b.id is null order by a.id


右连接,只保留右表特有数据(差集)

SELECT a.id,a.note,b.id,b.des FROM shuzi a RIGHT JOIN qianshu  b ON a.id=b.id WHERE a.id IS NULL ORDER BY b.id;


全外连接,获取左右表的所有记录,各自没有时补空

mysql不支持full outer join,要实现全外连接可以通过合并左,右外连接结果集实现


select a.id,a.note,b.id,b.des from shuzi a left join qianshu  b on a.id=b.id


union

select a.id,a.note,b.id,b.des from shuzi a right join qianshu  b on a.id=b.id


获取两表连接交集的补集(最后一个)

SELECT * FROM (


SELECT a.id aid,a.note,b.id bid,b.des FROM shuzi a LEFT JOIN qianshu  b ON a.id=b.id


UNION


SELECT a.id aid,a.note,b.id bid,b.des FROM shuzi a RIGHT JOIN qianshu  b ON a.id=b.id) v_a


WHERE aid IS NULL OR bid IS NULL;

目录
相关文章
|
4月前
|
SQL
sql 各种join 对比
sql 各种join 对比
31 0
|
6月前
|
SQL 数据库
04SQL - SQL连接 left join
04SQL - SQL连接 left join
26 0
|
6月前
|
SQL 关系型数据库 数据挖掘
软件测试|教你学会SQL LEFT JOIN的使用
软件测试|教你学会SQL LEFT JOIN的使用
33 0
|
6月前
|
SQL 存储 关系型数据库
软件测试|SQL JOIN的用法,你会了吗?
软件测试|SQL JOIN的用法,你会了吗?
46 0
|
1月前
|
SQL 缓存 算法
SQL 语句不要过多的 join
SQL 语句不要过多的 join
18 1
|
7月前
|
SQL
SQL语句多个表查询,inner join的用法
SQL语句多个表查询,inner join的用法
90 0
|
3月前
|
SQL Java 数据库连接
这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
【1月更文挑战第17天】【1月更文挑战第85篇】这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
23 8
|
4月前
|
SQL 数据库
SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析
SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为0条记录。
65 0
|
4月前
|
SQL 数据库
SQL JOIN 子句:合并多个表中相关行的完整指南
SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。
64 0
|
6月前
|
SQL 测试技术
软件测试|深入理解SQL CROSS JOIN:交叉连接
软件测试|深入理解SQL CROSS JOIN:交叉连接
48 0