SQL語句左聯 右聯 內聯的區別

2021-09-21 06:37:17 字數 2357 閱讀 7198

關於sql語句連線的思考

create table `test1` (

`id` bigint(20) not null auto_increment,

`name` varchar(20) default null,

`grade` int(20) not null,

primary key (`id`)

);insert into test1 (name, grade) values("a", 10);

insert into test1 (name, grade) values("a", 11);

insert into test1 (name, grade) values("a", 12);

create table `test2` (

`id` bigint(20) not null auto_increment,

`name` varchar(20) default null,

`***y` int(20) not null,

primary key (`id`)

);insert into test2 (name, ***y) values("a", 0);

insert into test2 (name, ***y) values("b", 1);

select * from test1 inner join test2 on test1.name = test2.name;
輸出結果

+----+------+-------+----+------+------+

| id | name | grade | id | name | ***y |

+----+------+-------+----+------+------+

| 1 | a | 10 | 1 | a | 0 |

| 2 | a | 11 | 1 | a | 0 |

| 3 | a | 12 | 1 | a | 0 |

+----+------+-------+----+------+------+

發現了什麼問題?

假設test2表中有年齡這一列,如果我需要取test1在test2表裡那部分人的年齡和的話,必須對test1的name取唯一,否則就會重複計算,造成資料冗餘。

select * from test1 left join test2 on test1.name = test2.name;
輸出結果

+----+------+-------+------+------+------+

| id | name | grade | id | name | ***y |

+----+------+-------+------+------+------+

| 1 | a | 10 | 1 | a | 0 |

| 2 | a | 11 | 1 | a | 0 |

| 3 | a | 12 | 1 | a | 0 |

+----+------+-------+------+------+------+

左聯同理,只有test2表中有乙個name與test1表中的一致,因為以左表為主,生成的連線表中就會有三條test2部分的重複資料。

在做表連線之後的聚合計算尤其要注意這一點。

select * from test1 right join test2 on test1.name = test2.name;
輸出結果

+------+------+-------+----+------+------+

| id | name | grade | id | name | ***y |

+------+------+-------+----+------+------+

| 1 | a | 10 | 1 | a | 0 |

| 2 | a | 11 | 1 | a | 0 |

| 3 | a | 12 | 1 | a | 0 |

| null | null | null | 2 | b | 1 |

+------+------+-------+----+------+------+

第一次寫部落格,紀念一下!2019-05-06於杭州。

sql語句內聯 左聯 右聯的區別

今天sql操作遇到了這個問題,詳細總結一下 現資料庫裡有這樣兩個表 內聯查詢 inner join.on where sql語句 select from t user inner join t data on t user.id t data.id 結果集 列出符合條件的結果集,並不是以哪個表為主 ...

sql 左聯 右聯 內聯的區別

如有表 a col1,col2 a,1b,1 b col1,col2 a,3c,2 內部聯接是指只返回符合聯接條件的資料,如select from a join b on a.col1 b.col1 只返回符合條件a.col1 b.col1的資料 結果如下 a,1,a,3 左外聯接不僅返回符合條件的...

關於sql連線查詢(內聯 左聯 右聯 全聯)

內連線 inner join 典型的連線運算,使用像 或 之類的比較運算子 包括相等連線和自然連線。內連線使用比較運算子根據每個表共有的列的值匹配兩個表中的行 左連線 left join 或 left outer join 是右左邊表中的資料為基準,若左表有資料右表沒有資料,否則顯示左表中的資料右表...