9.5 數據的內連接查詢
連接是關系數據庫模型的主要特點,連接查詢是關系數據庫中最主要的查詢,主要包括內連接、外連接等。內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被鏈接列的列值。
具體語法格式如下:
SELECT col_name1,col_name2,...
FROM table1 INNER JOIN table2
ON conditions
各參數說明:
- table1:數據表1,通常在內連接中被稱為左表;
- table2:數據表2,通常在內連接中被稱為右表;
- INNER JOIN:內連接的關鍵字;
- ON conditions:設置內連接中的條件;
9.5.1 內連接的簡單查詢
內連接可以理解為等值連接,它的查詢結果全部都是符合條件的數據。
例:使用內連接查詢員工信息表和部門信息表
SELECT * FROM employee
INNER JOIN dept
ON employee.deptcode=dept.deptid
9.5.2 相等內連接的查詢
相等連接又叫等值連接,在連接條件中使用等于號(=)運算符比較被鏈接列的列值,其查詢結果中列除被鏈接表中所有列,包括其中的重復列。
employee表中的deptcode與dept表中的deptid具有相同的含義,兩個表通過這個字段建立聯系。
接下來,從employee中查詢出name、salary字段,從dept中查詢出deptid、deptname。
SELECT deptid,name,deptname,salary
FROM employee INNER JOIN dept
ON employee.deptcode=dept.deptid
9.5.3 不等內連接的查詢
不等內連接查詢是旨在連接條件中使用除 等于運算符 以外的其他比較運算符,比較被鏈接的列的列值。這些運算符包括“>”“>=”“<=”“<”“!>”“!<”和“<>”。
例:使用不等內連接查詢employee和dept中所有的記錄
SELECT deptid,deptname,name,salary
FROM employee INNER JOIN dept
ON deptcode<>deptid
本查詢其實就是把表dept中原本部門編號為“1”,部門名稱為“行政部”,映射表employee中部門編碼為“1”記錄的連接查詢,更換為映射表employee中部門編碼不是“1”的記錄。
以此類推
9.5.4 特殊的內連接查詢
如果在一個連接查詢中,涉及的兩張表都是同一張表,這種查詢稱為自連接查詢,也被稱為特殊的內連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表。
為了方便演示,我們先創建這樣一張表:
USE mydatebase
CREATE TABLE deptment
(id INT primary key,deptname VARCHAR(20) NOT NULL,parentcode INT
)
然后,再插入如下幾條記錄
INSERT INTO deptment VALUES (1,'銷售部','')
INSERT INTO deptment VALUES (2,'人事部','')
INSERT INTO deptment VALUES (3,'銷售一部',1)
INSERT INTO deptment VALUES (4,'銷售二部',1)
INSERT INTO deptment VALUES (5,'人事一部',2)
INSERT INTO deptment VALUES (6,'人事二部',2)
到此,準備工作結束。
例:列出所有部門名稱以及它們對應的上級部門名稱
SELECT a.deptname 部門名稱,b.deptname 上級部門
FROM deptment a INNER JOIN deptment b
ON a.parentcode=b.id
9.5.5 帶條件的內連接查詢
帶選擇條件的連接查詢時在連接查詢過程中,通過添加過濾條件限制查詢的結果,使查詢的結果更加準確。
例:在employee表和dept表中,使用INNER JOIN羽語法,查詢employee表中部門編號為2的員工編號、姓名與工作地點,
SELECT a.code,a.name,b.addr
FROM employee a INNER JOIN dept b
on a.deptcode=b.deptid and a.deptcode=2