連線查詢時另一種型別的多表查詢
簡單地來說,就是先確定乙個主表作為結果集,然後,把其他表的行有選擇性地『連線』在主表結果集上
例項
-- 選出students表的所有學生資訊
select s.id, s.name, s.class_id, s.gender, s.score
from students s;
查詢結果
查詢結果只有class_id列,缺少對應班級的name列。
存放班級名稱的name
列儲存在classes
表中,只有根據students
表的class_id
,找到classes
表對應的行,再取出name
列,就可以獲得班級名稱。
通過內鏈結實現——inner join來實現
-- 選出所有學生,同時返回班級名稱
select s.id, s.name, s.class_id, c.name class name, s.gender, s.score
from students s
inner
join classes c
on s.class_id = c.id
查詢結果
inner join查詢寫法:
1.先確定主表,仍然使用from 《表1>
的語法;
2.再確定需要連線的表,使用inner join 《表2>
的語法;
3.然後確定連線條件,使用on 《條件...>
,這裡的條件是s.class_id = c.id
,表示students
表的class_id
列與classes
表的id
列相同的行需要連線;
4.可選:加上where
子句、order by
等子句;
注:使用別名不是必須的,但可以更好地簡化查詢語句。
通過外連線實現——outer join
-- 使用outer join
select s.id, s.name, s.class_id, c.name class_name, s.gender, score
from students s
right
outer
join classes c
on s.class_id = c.id;
查詢結果
right outer join和inner join相比,多了一行,多出來的是』四班』,但是,學生相關的name
、gender
、score
都為null
。
根據on
條件s.class_id = c.id
,classes
表的id=4
的行正是』四班『,但students
表中並存在class_id=4
的行。
right outer join,left outer join,full outer join區別
inner join只返回同時存在於兩張表的行資料。
由於students表的class_id包含1,2,3,classes表的id包含1,2,3,4。所以inner join根據條件s.class_id = id返回的結果集僅包含1,2,3。
right outer join返回右表都存在的行。
如果某一行僅在右表存在,那麼結果集就會以null
填充剩下的字段。
left outer join則返回左表都存在的行。
如果給students表增加一行,並新增class_id=5
,由於classes表並不存在id=5
的行,所以,left outer join
的結果會增加一樣,對應的class_name是null
-- 先增加一列class_id=5;
insert
into students (class_id, name, gender, score)
values(5
,'新生'
,'m',88
);-- 使用left outer join
select s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
from students s
left
outer
join classes c
on s.class_id = c.id;
查詢結果
full outer join,它會把兩張表的所有記錄全部選擇出來,並且,自動把對方不存在的列填充為null
-- 使用full outer join
select s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
from students s
full
outer
join classes c
on s.class_id = c.id
查詢結果
假設查詢語句是:
select..
.from tablea
???join tableb
on tablea.column1 = tableb.column2;
tablea看作左表,tableb看成右表
那麼inner join是選出兩張表都存在的記錄
left outer join是選出左表存在的記錄
right outer join是選出右表存在的記錄
full outer join則是選出左右表都存在的記錄
sql基礎 sql連線查詢
這兩天在專案中寫連線查詢的時候突然回憶了一下各種連線查詢的語法 結果等,發現自己出了經常用的left join on 和等值連線以外其他的都不是很確定,於是乎就看看了相關的資料便有了這篇博文。sql 92標準所定義的from子句的連線語法格式為 fromjoin tablejoin typejoin...
sql連線查詢基礎概念
交叉連線即笛卡爾積,是指兩個關係中所有元祖的任意組合。一般情況下,交叉查詢是沒有實際意義的。select from student cross join course1 等值連線 列出被連線表中的所有列,包括其中的重複列。連線條件中的運算子為 這種查詢方式形成的中間表為兩個表的笛卡爾積,有inner...
SQL基礎 查詢資料 條件查詢
select語句可以通過where條件來設定查詢條件,查詢結果是滿足查詢條件的記錄。條件查詢語法 select from 表where 條件表達 例項 select from students where score 80 查詢結果 條件表示式可以用 條件1 and 條件2 表達滿足條件1並且滿足條...