mysql資料庫基礎(一)

來源:互聯網
上載者:User

標籤:style   http   color   使用   os   strong   資料   io   

Mysql列子查詢及IN,ALL,SOME,ANY的使用

table1:

s1
2
10
table2:
s2
5
12
20

列子查詢中使用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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.