標籤:style http color 使用 os strong 資料 io
Mysql列子查詢及IN,ALL,SOME,ANY的使用
table1:
列子查詢中使用IN,ANY,SOME和ALL操作符.
IN:在指定項內,同IN(項1,項2,..)ANY:與比較操作符聯合使用,接在比較操作符後面表示與子查詢返回的任何值比較為TRUE,則返回TRUE。SOME:ANY的別名,較少使用.ALL:與比較操作符聯合使用,表示與子查詢返回的所有值比較都為TRUE,則返回TRUE。
細節:IN 是 = ANY 的別名,二者相同,但 NOT IN 的別名卻不是 <> ANY 而是 <> SOME。
NOT IN 是 <> ALL 的別名,二者相同
特殊情況
- 如果 table2 為空白表,則 ANY 後的結果為 FALSE;
- 如果子查詢返回如 (NULL,NULL,NULL) 列為空白的結果,則 ANY 後的結果為 UNKNOWN 。
- 一些樣本:
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
結果為:10。
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
不返回任何結果.
注意:對於 table2 空表的情況,下面的語句均返回 NULL:
SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
MySQL 中的JOIN
cross join 是笛卡兒乘積 就是一張表的行數乘以另一張表的行數
left join 第一張表的串連列在第二張表中沒有匹配是,第二張表中的值返回null
right join 第二張表的串連列在第一張表中沒有匹配是,第一張表中的值返回null
full join 返回兩張表中的行 left join+right join
inner join 只返回兩張表串連列的匹配項
(1)串連
select * from table1,table2
等價於
select * from table1 cross join table2
select * from table1,table2 where table1.row=table2.row
(2)自串連
select * from emploly e1 ,emploly e2
select e1.name,e2.name from employ e1,employ e2
where e1.name=e2.name
(3)內串連(inner join)
select stuname as ‘姓名‘,classname as ‘班級‘ from student inner join class on student.stuid=class.stuid
inner join ‘表名‘ on 條件 --串連多個表
它等價於:
select stuname as ‘姓名‘,classname as ‘班級‘
from student,class
where student.stuid=class.stuid
(4)外串連:(outer join)
允許限制一張表中的行,而不限制另外一張表中的行。
注意:外串連不一定非要有外鍵約束
1: left outer join --不能用left out join
左表中的記錄全部會出現在結果集中,右表中沒有對應記錄的顯示NULL
2: right outer join
右表中的記錄全部會出現在結果集中,座標中沒有對應記錄的顯示NULL
3: full outer join|full join --不能用full out join
返回兩個表中的匹配和不匹配的所有記錄。
STRAIGHT_JOIN 是 MySQL 對標準 SQL 的擴充,用於在多表查詢時指定表載入的順序。在 JOIN 表串連中,同樣可以指定表載入的順序,本文只講述 STRAIGHT_JOIN 在表串連 JOIN 中的應用。
MySQL STRAIGHT_JOIN 文法如下:
... FROM table1 STRAIGHT_JOIN table2 ON condition ...
STRAIGHT_JOIN 實際上與內串連 INNER JOIN 表現完全一致,不同的是使用了 STRAIGHT_JOIN 後,table1 會先於 table2 載入。
如果有更多表進行串連,那麼使用 STRAIGHT_JOIN 後,其載入順序就遵循從左往右的規則。最後,STRAIGHT_JOIN 無法應用於 LEFT JOIN 或 RIGHT JOIN。
NATURAL JOIN 也叫自然串連,實際是屬於 JOIN 的一種。
MySQL NATURAL JOIN 文法如下:
... FROM table1 NATURAL JOIN table2 ...
使用 NATURAL JOIN 時,MySQL 將表中具有相同名稱的欄位自動進行記錄匹配,而這些同名欄位類型可以不同。因此,NATURAL JOIN 不用指定匹配條件。
NATURAL JOIN 預設是同名欄位完全符合的 INNER JOIN,也可以使用 LEFT JOIN 或 RIGHT JOIN。一些例子如下:
SELECT article.aid,article.title,user.username FROM article NATURAL JOIN user
// LEFT SELECT
article.aid,article.title,user.username FROM article NATURAL LEFT JOIN user
// RIGHT SELECT
article.aid,article.title,user.username FROM article NATURAL RIGHT JOIN user