關於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 是右左邊表中的資料為基準,若左表有資料右表沒有資料,否則顯示左表中的資料右表...