首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL 面試題:等值連接與外連接查詢寫法

     編輯:程式設計疑難解答

題目資料

TableX
CodeNameAge
97001張三22
97002趙四21
97003張飛20
97004李五22
TableY
CodeClassScore
97001數學80
97002計算機59
97003計算機60
97004數學55

1. 等值連接


-- ANSI-92 標準寫法(推薦)
SELECT X.Name, Y.Class, Y.Score
FROM TableX X
INNER JOIN TableY Y ON X.Code = Y.Code;

-- 老式寫法(等效)
SELECT X.Name, Y.Class, Y.Score
FROM TableX X, TableY Y
WHERE X.Code = Y.Code;

結果:4 筆(每位學生一門課)。

2. 外連接(左連接)


-- 列出所有學生,即使沒有成績也顯示(Class/Score 為 NULL)
SELECT X.Name, Y.Class, Y.Score
FROM TableX X
LEFT JOIN TableY Y ON X.Code = Y.Code;

若 TableX 有 Code=97005 但 TableY 無對應,結果會多一行 Name=新生, Class=NULL, Score=NULL。

Oracle 專用舊語法(了解即可)


-- 左外連接
SELECT X.Name, Y.Class, Y.Score
FROM TableX X, TableY Y
WHERE X.Code = Y.Code(+); -- (+) 在右表 = 左連接

建表腳本(Oracle 11g)


CREATE TABLE TABLEX (CODE VARCHAR2(10) PRIMARY KEY, NAME VARCHAR2(20), AGE NUMBER);
CREATE TABLE TABLEY (CODE VARCHAR2(10), CLASS VARCHAR2(20), SCORE NUMBER, PRIMARY KEY (CODE, CLASS));
INSERT INTO TABLEX VALUES ('97001','張三',22);
INSERT INTO TABLEX VALUES ('97002','趙四',21);
INSERT INTO TABLEX VALUES ('97003','張飛',20);
INSERT INTO TABLEX VALUES ('97004','李五',22);
INSERT INTO TABLEY VALUES ('97001','數學',80);
INSERT INTO TABLEY VALUES ('97002','計算機',59);
INSERT INTO TABLEY VALUES ('97003','計算機',60);
INSERT INTO TABLEY VALUES ('97004','數學',55);
COMMIT;

核心區別

連接類型結果行數無匹配時
INNER JOIN兩表匹配行不顯示
LEFT JOIN左表所有行右表欄位為 NULL
RIGHT JOIN右表所有行左表欄位為 NULL
FULL JOIN兩表所有行無匹配側為 NULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved