Mysql內連線 左連線 右連線查詢

2021-10-02 21:57:13 字數 3923 閱讀 6517

建表語句如下

建立表a_table:

-- ----------------------------

-- table structure for a_table

-- ----------------------------

drop table if exists `a_table`;

create table `a_table` (

`id` smallint(6) auto_increment,

`name` varchar(10) not null,

`phone` varchar(11) default null,

primary key ( `id` )

) engine=innodb default charset=utf8;

-- ----------------------------

-- records of a_table

-- ----------------------------

insert into `a_table` values ('1', '小張', '13000000000');

insert into `a_table` values ('2', '小劉', '15200000000');

insert into `a_table` values ('3', '老羅', '15300000000');

insert into `a_table` values ('4', '老王', '13700000000');

insert into `a_table` values ('5', '小吳', '13937399793');

建立表b_table:

-- ----------------------------

-- table structure for b_table

-- ----------------------------

drop table if exists `b_table`;

create table `b_table` (

`id` smallint(6) auto_increment,

`name` varchar(10) not null,

`phone` varchar(11) default null,

primary key ( `id` )

) engine=innodb default charset=utf8;

-- ----------------------------

-- records of b_table

-- ----------------------------

insert into `b_table` values ('1', '小張', '13000000000');

insert into `b_table` values ('2', '老劉', '15200000000');

insert into `b_table` values ('3', '老羅', '15300000000');

insert into `b_table` values ('4', '小李', '13800000000');

insert into `b_table` values ('5', '小劉', null);

insert into `b_table` values ('6', '諸葛', null);

內連線查詢

sql 關鍵字 inner join,在表中存在至少乙個匹配時,inner join 關鍵字返回行。

select a.*from a_table a inner join b_table  b on a.id=b.id where a.name=b.name
查詢結果如下:

從執行結果分析可知,內連線查詢出來的資料是a_table和b_table公有資料。即下圖紅色陰影部分區間。

左連線查詢

sql 關鍵字 left join,從左表 (a_table) 那裡返回所有的行,即使在右表 (b_table) 中沒有匹配的行。

select *from a_table a left join b_table b on a.id=b.id
查詢結果如下:

從執行左連線查詢的sql結果可知,返回的資料是a_table的全部記錄,並把在右表中缺少的記錄用null表示。

右連線查詢

sql 關鍵字 right join,從右表 (b_table) 那裡返回所有的行,即使在左表 (a_table) 中沒有匹配的行。

select *from a_table a left join b_table b on a.id=b.id
查詢結果如下:

從執行右連線sql結果可知,返回的資料是b_table的全部記錄,並把在左表中缺少的記錄用null表示

全連線由於mysql不支援full join,但是可以通過left join + union + right join來實現全連線。

select *from a_table a left join b_table b on a.id=b.id union 

select *from a_table a right join b_table b on a.id=b.id

執行結果如下:

從執行結果可知,第六行的左表記錄為null,(a_table總共五條記錄),右表中存在六條記錄因此在做全連線會將兩個表做乙個並集。

無論左連線、右連線、內連線都用到了關鍵字 on 來匹配條件,那麼on與where的區別在哪呢?

以左連線為例,使用on匹配a.name=b.name。

select *from a_table a left join b_table b on a.id=b.id and a.name=b.name
查詢結果

使用where匹配a.name=b.name。

select *from a_table a left join b_table b on a.id=b.id where a.name=b.name
查詢結果

從查詢的結果分析可知,on是匹配建立臨時表時的條件,而where是匹配臨時表建立完成後的條件。

mysql 內連線 左連線 右連線

記錄備忘下,初始資料如下 drop table ifexists t demo product create table ifnot exists t demo product proid int 20 proname varchar 20 price int 10 primary key proi...

mysql 內連線,左連線,右連線

本文 於 用兩個表 a table b table 關聯欄位a table.a id和b table.b id來演示一下mysql的內連線 外連線 左 外 連線 右 外 連線 全 外 連線 mysql版本 server version 5.6.31 mysql community server gp...

內連線 左連線 右連線

弄個例題,直觀一點。兩個表 表stu id name 1,jack 2,tom 3,kity 4,nono 表exam id grade 1,56 2,76 11,89 內連線 顯示兩表id匹配的 select stu.id,exam.id,stu.name,exam.grade from stu ...