sql聯集查詢詳解

來源:互聯網
上載者:User

資料:
http://keke-wanwei.javaeye.com/blog/99162

http://hi.baidu.com/daweeforever/blog/item/a8831425e684296735a80f5e.html

http://sizhefang.javaeye.com/blog/212652

這幾天碰到2個有點繞的查詢:
1.


select * from 表A,表A子表

where
表A
.FileCode = 表A子表
.FileCode   and
表A.ID

in
(select 表A子表
.ID
from 表A子表
where

Vc_Code = '1190' AND Vc_Num ='111300' AND Er_Num ='0101'
);

這個查詢的條件在子表,而結果在父表,沒用關聯查詢,直接查詢2個表

2.


SELECT * FROM

A表 AS A
LEFT JOIN
C表 AS C
ON
A.UID = C.EID ,

B表 AS B

WHERE
A.U_ID = B.U_ID AND   
//A表和B表通過U_ID關聯


B.D_ID IN
(SELECT MAX(D_ID) FROM B表
GROUP BY U_ID)    //要D_ID值最大的D_ID

AND
B.CASEID = '87'    //B表的一個欄位值已知

AND A.STATUS = '1';      //A表的一個欄位值已知

關聯查詢總結:




1.UNION

格式:

查詢語句

UNION [ALL] 查詢語句

[UNION [ALL] 查詢語句][…n]

說明:

ALL選項表示將所有行合并到結果集合中。不指定該項時,被聯集查詢結果集合中的重複行將只保留一行。

在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括弧可以改變這一執行順序。例如:

查詢1 UNION (查詢2 UNION 查詢3)

例子:

person表和user表沒有約束
person表:


user表:


執行:select id,name
from user
UNION
select id,name
from person
;

結果:



注意:sql句子欄目數必須是相同
的,欄位可以隨意



2.JOIN

JOIN用於按照ON條件聯結兩個表,主要有四種:

(一)內串連

INNER JOIN:內部聯結兩個表中的記錄,僅當至少有一個同屬於兩表的行符合聯結條件時,內聯結才返回行。(表示交集)

(二)外串連

LEFT JOIN / LEFT OUTER
JOIN:外部聯結兩個表中的記錄,並包含左表中的全部記錄。如果左表的某記錄在右表中沒有匹配記錄,則在相關聯的結果集中右表的所有挑選清單列均為空白
值。理解為即使不符合ON條件,左表中的記錄也全部顯示出來,且結果集中該類記錄的右表欄位為空白值。(差集)

RIGHT JOIN / RIGHT OUTER JOIN:外部聯結兩個表中的記錄,並包含右表中的全部記錄。簡單說就是和LEFT JOIN反過來。(差集)

FULL JOIN / FULL OUTER JOIN: 完整外部聯結返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右兩表的資料都全部顯示。(並集)

(三)交叉串連

交叉串連(cross join)不帶WHERE 子句,它返回被串連的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。

JOIN的基本文法(注意結果對比):

1.執行 select * from user as A join
person as B on A.id=B.id;

select * from user as A inner join
person as B on A.id=B.id;

結果如下:


2.執行 select A.*
from user as A join person as B on A.id=B.id;



3.執行select * from user as A left join
person as B on A.id=B.id;


4.select * from person
as A right join
user

as B on A.id=B.id;


5.full join 

mysql 5不支援full join 所以用左關聯和右關聯進行聯合

SELECT * FROM user
LEFT JOIN money ON user.id=money.id
UNION
SELECT * FROM user
RIGHT JOIN money ON user.id=money.id

6.執行

select * from user CROSS JOIN
person;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.