sql中的幾種join 及 full join問題

2021-10-07 22:14:31 字數 3431 閱讀 3982

【注意】:oracle資料庫支援full join,mysql是不支援full join的,但仍然可以同過左外連線+ union+右外連線實現

初始化sql語句:

/*join 建表語句*/

drop

database

ifexists test;

create

database test;

use test;

/* 左表t1*/

drop

table

ifexists t1;

create

table t1 (id int

notnull

,name varchar(20

));insert

into t1 values(1

,'t1a');

insert

into t1 values(2

,'t1b');

insert

into t1 values(3

,'t1c');

insert

into t1 values(4

,'t1d');

insert

into t1 values(5

,'t1f');

/* 右表 t2*/

drop

table

ifexists t2;

create

table t2 (id int

notnull

,name varchar(20

));insert

into t2 values(2

,'t2b');

insert

into t2 values(3

,'t2c');

insert

into t2 values(4

,'t2d');

insert

into t2 values(5

,'t2f');

insert

into t2 values(6

,'t2a'

);

兩表關聯,把左表的列和右表的列通過笛卡爾積的形式表達出來。

兩表關聯,左表全部保留,右表關聯不上用null表示。

右表全部保留,左表關聯不上的用null表示。

兩表關聯,保留兩表中交集的記錄。

兩表關聯,查詢左表獨有的資料。

兩表關聯,查詢右表獨有的資料。

;兩表關聯,查詢它們的所有記錄。

oracle裡面有full join,但是在mysql中沒有full join。我們可以使用union來達到目的。

mysql>

select

*from t1 left

join t2 on t1.id = t2.id

->

union

->

select

*from t1 right

join t2 on t1.id = t2.id;

在hive中可以直接使用full join解決問題,但是在同一層級的查詢中不可連續多次使用full join否則會出現問題,如果需要多次使用full join建議在不同層級中使用,例項如下:

select

*from t1

full

join t2

on t1.user_id = t2.user_id

8、並集去交集

兩表關聯,取並集然後去交集。

mysql>

select

*from t1 left

join t2 on t1.id = t2.id where t2.id is

null

->

union

->

select

*from t1 right

join t2 on t1.id = t2.id where t1.id is

null

;

SQL 幾種JOIN用法例項

declare tatable id int,va varchar 10 declare tbtable id int,vb varchar 10 insert into taselect1,aa insert into taselect2,bc insert into taselect3,ccc ...

SQL 幾種JOIN用法例項

sql 幾種join用法例項 declare ta table id int,va varchar 10 declare tb table id int,vb varchar 10 insert into ta select 1,aa insert into ta select 2,bc inser...

sql中的join語句

sql的join分為三種,內連線 外連線 交叉連線。以下先建2張表,插入一些資料,後續理解起來更方便一些。create table emp empno int,name char 20 depart int create table depart dpno int,dpname char 20 in...