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

Oracle 11g 等值連接與外連接 SQL 實戰演練

     編輯:程式設計疑難解答

本文通過一道經典的 Oracle 11g SQL 題目,詳細講解等值連接與左外連接的寫法及結果差異,並提供建表與測試數據腳本,幫助讀者掌握多表查詢核心技巧。

題目背景

現有兩張表:

  • TableX:字段 Code(主鍵)、Name、Age
  • TableY:字段 Code、Class、Score,主鍵為 (Code, Class)

樣本數據如下:

TableX:
Code    Name    Age
97001   張三     22
97002   趙四     21
97003   張飛     20
97004   李五     22

TableY:
Code    Class   Score
97001   數學     80
97002   計算機   59
97003   計算機   60
97004   數學     55

建表與插入腳本

create table TABLEX (
  CODE VARCHAR2(10) not null,
  NAME VARCHAR2(20),
  AGE NUMBER
);
alter table TABLEX add constraint P_TABLEX primary key (CODE);

create table TABLEY (
  CODE VARCHAR2(10) not null,
  CLASS VARCHAR2(20) not null,
  SCORE NUMBER
);
alter table TABLEY add constraint P_TABLEY primary key (CODE, CLASS);

insert into TABLEX (CODE, NAME, AGE) values ('97001', '張三', 22);
insert into TABLEX (CODE, NAME, AGE) values ('97002', '趙四', 21);
insert into TABLEX (CODE, NAME, AGE) values ('97003', '張飛', 20);
insert into TABLEX (CODE, NAME, AGE) values ('97004', '李五', 22);
commit;

insert into TABLEY (CODE, CLASS, SCORE) values ('97001', '數學', 80);
insert into TABLEY (CODE, CLASS, SCORE) values ('97002', '計算機', 59);
insert into TABLEY (CODE, CLASS, SCORE) values ('97003', '計算機', 60);
insert into TABLEY (CODE, CLASS, SCORE) values ('97004', '數學', 55);
commit;

查詢需求與標準答案

1. 等值連接:查詢 Name、Class、Score

SELECT NAME, CLASS, SCORE
FROM TABLEX, TABLEY
WHERE TABLEX.CODE = TABLEY.CODE;

結果:僅返回兩表 Code 都存在的 4 條記錄。

2. 左外連接:查詢每個學生的 Name、Class、Score(無課程也顯示)

SELECT NAME, CLASS, SCORE
FROM TABLEX LEFT JOIN TABLEY ON TABLEX.CODE = TABLEY.CODE;

結果:返回 TableX 所有 4 條記錄,若 TableY 無匹配則 Class、Score 顯示 NULL。

關鍵點總結

  • 等值連接(內連接)只返回匹配行;外連接保留主表所有行。
  • Oracle 11g 推薦使用 ANSI SQL-99 標準語法(LEFT JOIN ... ON),可讀性更強。
  • 實際開發中,根據業務決定是否需要保留無匹配記錄,選擇內連接或外連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved