【注意】: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...