mysql類似join MySQL的七種join

2021-10-17 21:58:10 字數 3352 閱讀 6546

建表

在這裡我們先建立兩張有外來鍵關聯的兩張表:

create database db0206;

use db0206;

create table `db0206`.`tbl_dept`(

`id` int(11) not null auto_increment,

`deptname` varchar(30),

`locadd` varchar(40),

primary key (`id`)

) engine=innodb charset=utf8;

create table `db0206`.`tbl_emp`(

`id` int(11) not null auto_increment,

`name` varchar(20),

`deptid` int(11),

primary key (`id`),

foreign key (`deptid`) references `db0206`.`tb_dept`(`id`)

) engine=innodb charset=utf8;

/*插入資料*/

insert into tbl_dept(deptname,locadd) values('rd',11);

insert into tbl_dept(deptname,locadd) values('hr',12);

insert into tbl_dept(deptname,locadd) values('mk',13);

insert into tbl_dept(deptname,locadd) values('mis',14);

insert into tbl_dept(deptname,locadd) values('fd',15);

insert into tbl_emp(name,deptid) values('z3',1);

insert into tbl_emp(name,deptid) values('z4',1);

insert into tbl_emp(name,deptid) values('z5',1);

insert into tbl_emp(name,deptid) values('w5',2);

insert into tbl_emp(name,deptid) values('w6',2);

insert into tbl_emp(name,deptid) values('s7',3);

insert into tbl_emp(name,deptid) values('s8',4);

venn圖與sql語句的編寫以及查詢結果

1. 內連線

內連線venn圖

執行的sql語句以及執行的查詢結果:

執行的sql語句

select * from tbl_dept a inner join tbl_emp b on a.id=b.deptid;

查詢結果

2. 左外連線

左外連線文氏圖:

執行的sql語句以及執行的查詢結果:

執行的sql語句

select * from tbl_dept a left join tbl_emp b on a.id=b.deptid;

查詢結果

3. 右外連線

右外連線venn圖:

執行的sql語句以及執行的查詢結果

執行的sql語句

select * from tbl_dept a right join tbl_emp b on a.id=b.deptid

查詢結果

4. 左連線

左連線venn圖:

執行的sql語句以及執行的查詢結果

執行的sql語句

select * from tbl_dept a left join tbl_emp b on a.id=b.deptid where b.deptid is null;

查詢結果

5. 右連線

右連線文氏圖

執行的sql語句以及執行的查詢結果:

執行的sql語句

select * from tbl_dept a right join tbl_emp b on a.id=b.deptid where a.id is null;

查詢結果

6. 全連線

全連線文氏圖:

執行的sql語句以及執行的查詢結果:

執行的sql語句

select * from tbl_dept a right join tbl_emp b on a.id=b.deptid

union

select * from tbl_dept a left join tbl_emp b on a.id=b.deptid;

查詢結果

7. 兩張表中都沒有出現的資料集

文氏圖:

執行的sql語句以及執行的查詢結果:

執行的sql語句

select * from tbl_dept a right join tbl_emp b on a.id=b.deptid where a.id is null union select * from tbl_dept a left join tbl_emp b on a.id=b.deptid where b.deptid is null;

查詢結果

mysql 實現類似開窗函式的功能

mysql8 已經支援開窗函式 sql server 的開窗函式 mysql8 之前的版本不支援開窗函式 目的,取每個channel 按created on 倒序排的前20條 示例如下 有部分冗餘資料 select id,url,channel,created on,rank from select...

MySQL實現類似Oracle序列的方案

mysql實現類似oracle的序列 oracle一般使用序列 sequence 來處理主鍵字段,而my程式設計客棧sql則提供了自增長 increment 來實現類似的目的 但在實際使用過程中發現,mysql的自增長有諸多的弊端 不能控制步長 開始索引 是否迴圈等 若需要遷移資料庫,則對於主鍵這塊...

MySQL裡實現類似SPLIT的分割字串的函式

sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t sql不支援陣列,所以處理下來比較麻煩 下邊的函式,實現了象陣列一樣去處理字串。一,用臨時表作為陣列 複製 如下 create function f split c varchar 20...