前言:該篇主要對mysql中join語句的七種情況進行總結。
join主要根據兩表或多表之間列的關係,從這些表中進行資料的查詢。
1.tb_emp表。
drop table if exists `tb_emp`;2.tb_dept表。create table `tb_emp` (
`id` int(11) not null auto_increment,
`name` varchar(20) not null,
`deptid` int(11) not null,
primary key (`id`),
key `idx_tb_emp_name` (`name`)
) engine=innodb default charset=utf8;
insert into `tb_emp`(name,deptid) values ('jack', '1');
insert into `tb_emp`(name,deptid) values ('tom', '1');
insert into `tb_emp`(name,deptid) values ('tonny', '1');
insert into `tb_emp`(name,deptid) values ('mary', '2');
insert into `tb_emp`(name,deptid) values ('rose', '2');
insert into `tb_emp`(name,deptid) values ('luffy', '3');
insert into `tb_emp`(name,deptid) values ('outman', '14');
drop table if exists `tb_dept`;從上表插入的資料可知outman是沒有對應部門的。create table `tb_dept` (
`id` int(11) not null auto_increment,
`deptname` varchar(20) not null,
primary key (`id`)
) engine=innodb default charset=utf8;
insert into `tb_dept`(deptname) values ('研發');
insert into `tb_dept`(deptname) values ('測試');
insert into `tb_dept`(deptname) values ('運維');
insert into `tb_dept`(deptname) values ('經理');
注:a表示左表,b表示右表,下同。
inner join:a、b共有,也就是交集。
left jion:a獨有+ab共有(交集)
right join:b獨有+ab共有(交集)
注:參照left join,a獨有只是將ab交集部分去掉。
注:參照right join,b獨有只是將ab交集部分去掉。
由於mysql中不支援full outer join,所以這裡通過union進行轉換。ab並集:ab交集+a獨有+b獨有。
a、b獨有並集,相當於a、b全有去掉ab的共有(交集)。
這裡主要對mysql中join語句的7中用法進行了總結,主要注意mysql不支援full outer join,所以需要對其進行轉換變形,最終達到效果
MySQL高階知識 Join查詢
前言 該篇主要對mysql中join語句的七種情況進行總結。join主要根據兩表或多表之間列的關係,從這些表中進行資料的查詢。1.tb emp表。drop table if exists tb emp create table tb emp id int 11 not null auto incre...
MySQL的JOIN(二) JOIN原理
nested loop join nlj 演算法 首先介紹一種基礎演算法 nlj,巢狀迴圈演算法。迴圈外層是驅動表,循壞內層是被驅動表。驅動表會驅動被驅動表進行連線操作。首先驅動表找到第一條記錄,然後從頭掃瞄被驅動表,逐一查詢與驅動表第一條記錄匹配的記錄然後連線起來形成結果表中的一條記。被驅動表查詢...
mysql 高階 mysql高階知識
一.儲存引擎 引擎 指的是乙個系統的核心部分 引擎有不同分類是為了適應不同的使用場景 檢視mysql支援所有引擎 show engines mrg myisam 是一堆myisam表的集合 用於做水平分表,如果乙個表中資料量太大 將導致效率降低 水平分表就是把整個大表拆成不同的小表,每一次查詢 會判...