一 關鍵字
join 多表建立交叉連線 cross join。
on 關鍵字 後面跟篩選條件。
二 分類
內連線 inner jion
外連線 left / right join
全連線 union
三 子查詢
子查詢就是select語句巢狀select語句,可以理解為子查詢是一張表
子查詢是將乙個查詢語句巢狀在另乙個查詢語句中。
內層查詢語句的查詢結果,可以為外層查詢語句提供查詢條件。子查詢可以分為四類,標量子查詢,行查詢,列查詢,表查詢。(當然好像還有其他分類方法)。
標量查詢select max(height) from students; -- select max(height) from students 185
乙個值select * from students where height = (select max(height) from
students);
列查詢select classes.name from classes where classes.id in (select cls_id from students);--執行效率低 結構分明;
行查詢--行級子查詢, 一行多列 要完成行級子查詢, 需要先構建行元素
#查詢班級年齡最大 身高最高的學生 不一定能查詢出來
select * from students where (age,height) = (select max(age),max(height) from
students);
表查詢--表級子查詢 查詢的結果是多行多列, 充當資料來源,需要講查詢的臨時結果集取別名才能夠使用
select stu.height from (select * from students) as stu;
作用:某些情況下,當進行查詢的時候,需要的條件是另外乙個select 語句的結果,這個時候,就要用到子查詢。格式:=select()
in select()
exist select()
定義:為了給主查詢(外部查詢)提供資料而首先執行的查詢(內部查詢)被叫做子查詢。也就是說,先執行子查詢,根據子查詢的結果,再執行主查詢。
關鍵字:用於子查詢的關鍵字主要包括 in、not in、exist、not exist、=、<>等(符號「<>」的意思是:不等於)。
備註:mysql從4.1開始才支援sql的子查詢。一般說子查詢的效率低於連線查詢(因為子查詢至少需要查詢兩次,即至少兩個select語句。子查詢巢狀也多,效能越低)。表連線都可以用子查詢替換,但反過來說卻不一定。
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連線) 只返回兩個表中聯結字段相等的行
舉例如下:--------------------------------------------
表a記錄如下:
aid anum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表b記錄如下:bid bname
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------1.left join
sql語句如下:
select * from a
left join b
on a.aid = b.bid
結果如下:aid anum bid bname
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 null null
(所影響的行數為 5 行)結果說明:
left join是以a表的記錄為基礎的,a可以看成左表,b可以看成右表,left join是以左表為準的.
換句話說,左表(a)的記錄將會全部表示出來,而右表(b)只會顯示符合搜尋條件的記錄(例子中為: a.aid = b.bid).
b表記錄不足的地方均為null.
--------------------------------------------
2.right join
sql語句如下:
select * from a
right join b
on a.aid = b.bid
結果如下:aid anum bid bname
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
null null 8 2006032408
(所影響的行數為 5 行)結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(b)為基礎的,a表不足的地方用null填充.
--------------------------------------------
3.inner join
sql語句如下:
select * from a
innerjoin b
on a.aid = b.bid
結果如下:aid anum bid bname
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
結果說明:很明顯,這裡只顯示出了 a.aid = b.bid的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.
--------------------------------------------
注: left join操作用於在任何的 from 子句中,組合**表的記錄。使用 left join 運算來建立乙個左邊外部聯接。左邊外部聯接將包含了從第乙個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。
語法:from table1 left join table2 on table1.field1 compopr table2.field2 說明:table1, table2引數用於指定要將記錄組合的表的名稱。field1, field2引數指定被聯接的字段的名稱。且這些字段必須有相同的資料型別及包含相同型別的資料,但它們不需要有相同的名稱。
compopr引數指定關係比較運算子:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在inner join操作中要聯接包含memo 資料型別或 ole object 資料型別資料的字段,將會發生錯誤.
MYSQL資料庫操作 多表操作
將多張表連在一起進行查詢。通過兩個表共有的列去進行拼接。多表連線,首先要在表之間建立連線。連線查詢一共分為以下幾類 交叉連線 內連線外連線 自然連線 將一張表的資料與另外一張表中的資料彼此交叉。也就是說把一張表中的每一行逐個與另一張表去進行匹配。沒有任何連線條件,所有的記錄都會被保留。select ...
多表查詢資料庫
在專案中建立資料庫的時候,我們經常會進行多表查詢。資料庫中建立乙個表應該與乙個實體類相對應。乙個實體物件應該與一條記錄相對應。資料庫是一種結構化的查詢語言,資料庫語言是非過程化的,寫一句就可以執行一句。進行建表的時候,如果是一對多的關係,應該在多的一方建立乙個字段。該字段為少的一方的id。進行建表的...
資料庫多表查詢
笛卡爾積 select from emp,dept select from emp cross join dept 內連線 inner join 內連線把兩個表連線成乙個表 稱為第三個表 在這個表中僅包含那些滿足連線條件的記錄行 select from emp,dept where emp.dept...