sql聯合查詢語句(兩張表)
一、交叉連接(CROSS JOIN)交叉連接(CROSS JOIN):有兩種,顯式的和隱式的,不帶ON子句,返回的是兩表的乘積,也叫笛卡爾積。
例如:下面的語句1和語句2的結果是相同的。語句1:隱式的交叉連接,沒有CROSS JOIN。
SELECT *, *_NUMBER, *, *OM ORDERS O , CUSTOMERS CWHERE *=1;語句2:顯式的交叉連接,使用CROSS JOIN。SELECT *,*_NUMBER,*,*OM ORDERS O CROSS JOIN CUSTOMERS CWHERE *=1;語句1和語句2的結果是相同的,查詢結果如下:二、內連接(INNER JOIN)內連接(INNER JOIN):有兩種,顯式的和隱式的,返回連接表中符合連接條件和查詢條件的數據行。
(所謂的鏈接表就是數據庫在做查詢形成的中間表)。例如:下面的語句3和語句4的結果是相同的。
語句3:隱式的內連接,沒有INNER JOIN,形成的中間表為兩個表的笛卡爾積。SELECT *,*_NUMBER,*,*OM CUSTOMERS C,ORDERS OWHERE *=*ER_ID;語句4:顯示的內連接,一般稱為內連接,有INNER JOIN,形成的中間表為兩個表經過ON條件過濾后的笛卡爾積。
SELECT *,*_NUMBER,*,*OM CUSTOMERS C INNER JOIN ORDERS O ON *=*ER_ID;語句3和語句4的查詢結果:三、外連接(OUTER JOIN):外連不但返回符合連接和查詢條件的數據行,還返回不符合條件的一些行。外連接分三類:左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)和全外連接(FULL OUTER JOIN)。
三者的共同點是都返回符合連接條件和查詢條件(即:內連接)的數據行。不同點如下:左外連接還返回左表中不符合連接條件單符合查詢條件的數據行。
右外連接還返回右表中不符合連接條件單符合查詢條件的數據行。全外連接還返回左表中不符合連接條件單符合查詢條件的數據行,并且還返回右表中不符合連接條件單符合查詢條件的數據行。
全外連接實際是上左外連接和右外連接的數學合集(去掉重復),即“全外=左外 UNION 右外”。說明:左表就是在“(LEFT OUTER JOIN)”關鍵字左邊的表。
右表當然就是右邊的了。在三種類型的外連接中,OUTER 關鍵字是可省略的。
下面舉例說明:語句5:左外連接(LEFT OUTER JOIN)SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON *=*ER_ID;語句6:右外連接(RIGHT OUTER JOIN)SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON *=*ER_ID;注意:WHERE條件放在ON后面查詢的結果是不一樣的。例如:語句7:WHERE條件獨立。
SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON *=*ER_IDWHERE *_NUMBER<>'MIKE_ORDER001';語句8:將語句7中的WHERE條件放到ON后面。SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON *=*ER_ID AND *_NUMBER<>'MIKE_ORDER001';從語句7和語句8查詢的結果來看,顯然是不相同的,語句8顯示的結果是難以理解的。
因此,推薦在寫連接查詢的時候,ON后面只跟連接條件,而對中間表限制的條件都寫到WHERE子句中。語句9:全外連接(FULL OUTER JOIN)。
SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O FULL OUTER JOIN CUSTOMERS C ON *=*ER_ID;注意:MySQL是不支持全外的連接的,這里給出的寫法適合Oracle和DB2。但是可以通過左外和右外求合集來獲取全外連接的查詢結果。
下圖是上面SQL在Oracle下執行的結果:語句10:左外和右外的合集,實際上查詢結果和語句9是相同的。SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON *=*ER_IDUNIONSELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON *=*ER_ID;語句9和語句10的查詢結果是相同的,如下:四、聯合連接(UNION JOIN):這是一種很少見的連接方式。
Oracle、MySQL均不支持,其作用是:找出全外連接和內連接之間差異的所有行。這在數據分析中排錯中比較常用。
也可以利用數據庫的集合操作來實現此功能。語句11:聯合查詢(UNION JOIN)例句,還沒有找到能執行的SQL環境。
SELECT *,*_NUMBER,*ER_ID,*,*OM ORDERS O UNION JOIN CUSTOMERS C ON *=*ER_ID語句12:語句11在DB2下的等價實現。還不知道DB。
SQL聯合查詢語句
A表字段stuid,stuname
B表字段bid,stuid,score,coursename,status
CREATE TABLE A#(
stuid INT,
stuname VARCHAR(10)
);
CREATE TABLE B# (
bid INT,
stuid INT,
score INT,
coursename VARCHAR(10),
status INT,
);
INSERT INTO A#
SELECT 1, '張三' UNION ALL
SELECT 2, '李四' UNION ALL
SELECT 3, '王五' UNION ALL
SELECT 4, '趙六'
;
INSERT INTO B#
SELECT 1, 1, 100, '語文', 0 UNION ALL
SELECT 2, 1, 99, '數學', 1 UNION ALL
SELECT 3, 2, 88, '語文', 0 UNION ALL
SELECT 4, 2, 88, '數學', 1 UNION ALL
SELECT 5, 3, 77, '語文', 0 UNION ALL
SELECT 6, 3, 77, '數學', 0 UNION ALL
SELECT 5, 4, 66, '語文', 1 UNION ALL
SELECT 6, 4, 66, '數學', 1
;
SELECT
A#.stuid,
B#.score,
B#.coursename,
B#.status
FROM
A# JOIN B#
ON (A#.stuid = B#.stuid AND B#.status = 1)
WHERE
NOT EXISTS (
SELECT
1
FROM
B# sub
WHERE
A#.stuid = *
AND * = 1
AND * > B#.score
)
stuid score coursename status
----------- ----------- ---------- -----------
1 99 數學 1
2 88 數學 1
4 66 語文 1
4 66 數學 1
(4 行受影響)
注:
stuid = 3的,2門課程的 status 都為0,因此無數據顯示。
stuid = 4 的,2門課程都等于 max(score), 因此顯示出2行數據。
求三表聯合查詢的SQL查詢語句
車訊語句:select username,psw from (a1 left join a2 on a1.a1_id=a2.a1_id) left join a3 on a1.a1_id=a3.a1_id
這樣寫:
SELECT
* AS 姓名, *Name AS 課程, * AS 成績
FROM Students AS S
INNER JOIN Score AS C ON (* = *tID)
INNER JOIN Course AS CS ON (*ID = *ID
擴展資料:
SQL聯合查詢的分類
一、內連接查詢:只查詢左邊表有且右邊表也有的數據,本質上是依據外鍵關系,在笛卡爾積查詢的基礎上過濾出正確的數據。
語句有2種形式:
Select * from dept ,emp where *=*_id
Select * from dept inner join emp on * =*_id
二、外連接查詢:外連接是用于查詢倆邊一邊有一邊沒有的數據。
三、左外連接查詢:在內連接的基礎上增加上左邊表有而右邊表沒有的數據
語句:Select * from dept join emp on *=*_id
四、右外連接:在內連接的基礎上增加上右邊表沒有的記錄
語句:Select * from dept right join emp on * =*_id
SQL兩個表的聯合查詢語句
(SELECT 產品單號,產品型號,產品零件,SUM(員工生產零件數量) FROM B GROUP BY 產品單號,產品型號,產品零件) B1;SELECT A.產品單號,B1.產品型號,(A.生產數量-*GN) FROM A,(SELECT 產品單號,產品型號 SUM(員工生產零件數量) FROM B GROUP BY 產品單號,產品型號) B1 WHERE A.產品單號=B1.產品單號 AND A.產品型號=B.產品型號; SELECT SUM(員工生產零件數量),產品單號,產品型號,產品零件 FROM B GROUP BY 產品單號,產品型號,產品零件;。
兩表聯查該怎樣寫查詢Sql語句
把兩個表都選上,選擇你要的字段,然后在條件里面把關聯的字段條件加上,例如下面: "SELECT *, thor, *hdate, *e_Type, FORM article,type WHERE *e_Type = " 這里 是你type表里面欄目的id,對應你article表里面的Article_Type。
*, thor, *hdate分別是文章的標題,作者,發布時間,這條語句并不一定可用,要對照你的表結構。如果有不清楚可以給我發信息,能把你的表結構發出來最好。
SQL語句聯表查詢
SELECT item,sum(*_pay) '需要支付金額',sum(*ey) '已付金額' FROM A,(SELECT b.A_id,sum(*) 'paymoney' FROM B group by B.A_id) b where A.A_id = b.A_id GROUP BY * HAVING sum(*_pay)<> sum(*ey) 擴展資料:關于sql語句連表查詢 語法 SELECT fields FROM table1 INNER JOIN table2 ON *1 compopr *1 AND ON *2 compopr *2 OR ON *3 compopr *3; 也可以通過如下語法嵌套 JOIN 語句: SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN 。
)] ON *3 compopr *)] ON *2 compopr *3) ON *1 compopr *2; LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。
轉載請注明出處華閱文章網 » sql語句的聯合查詢語句