首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 入門教程(五):多表連接查詢實戰

     編輯:MySQL 綜合教學

MySQL 多表關聯查詢:隱式內連接語法與實例詳解

真實業務中數據分散於多張關聯表,本文通過「員工基本信息表」與「文章發表記錄表」實例,演示如何使用隱式內連接(WHERE 條件關聯)完成跨表查詢。

範例表結構與數據

mytable(員工表)

+----------+------+------------+-----------+
| name     | sex  | birth      | birthaddr |
+----------+------+------------+-----------+
| abccs    | f    | 1977-07-07 | china     |
| mary     | f    | 1978-12-12 | usa       |
| tom      | m    | 1970-09-02 | usa       |
+----------+------+------------+-----------+

title(文章表)

CREATE TABLE title (
  writer VARCHAR(20) NOT NULL,
  title  VARCHAR(40) NOT NULL,
  senddate DATE
);

+--------+-------+------------+
| writer | title | senddate   |
+--------+-------+------------+
| abccs  | a1    | 2000-01-23 |
| mary   | b1    | 1998-03-21 |
| abccs  | a2    | 2000-12-04 |
| tom    | c1    | 1992-05-16 |
| tom    | c2    | 1999-12-12 |
+--------+-------+------------+

多表查詢核心:指定關聯條件

從語法上,多表查詢在 FROM 列出多表,在 WHERE 指定關聯鍵:

SELECT 欄位列表 FROM 表1, 表2 WHERE 表1.關聯欄位 = 表2.關聯欄位 [AND 其他條件];

實戰範例

範例 1:查詢 abccs 的姓名、性別、文章標題

SELECT name, sex, title
FROM mytable, title
WHERE name = writer AND name = 'abccs';

+-------+------+-------+
| name  | sex  | title |
+-------+------+-------+
| abccs | f    | a1    |
| abccs | f    | a2    |
+-------+------+-------+

範例 2:查詢文章 a2 的作者、出生地、出生日期

SELECT title, writer, birthaddr, birth
FROM mytable, title
WHERE mytable.name = title.writer AND title = 'a2';

+-------+--------+-----------+------------+
| title | writer | birthaddr | birth      |
+-------+--------+-----------+------------+
| a2    | abccs  | china     | 1977-07-07 |
+-------+--------+-----------+------------+

關鍵注意事項

  1. 欄位名衝突:若兩表關聯欄位同名(如均為 name),必須加表名前綴區分:mytable.name = title.name
  2. 隱式內連接等價於 INNER JOIN:現代 SQL 建議使用顯式 INNER JOIN ... ON ... 語法,可讀性更強
  3. 笛卡爾積風險:缺少關聯條件會產生笛卡爾積,導致結果集爆炸性增長

現代寫法對比

-- 隱式內連接(舊語法)
SELECT m.name, m.sex, t.title
FROM mytable m, title t
WHERE m.name = t.writer AND m.name = 'abccs';

-- 顯式內連接(推薦)
SELECT m.name, m.sex, t.title
FROM mytable m
INNER JOIN title t ON m.name = t.writer
WHERE m.name = 'abccs';

擴展:其他連接類型速覽

連接類型語法結果特點
內連接INNER JOIN ... ON僅返回雙方匹配的行
左連接LEFT JOIN ... ON左表所有行 + 右表匹配行(無匹配則 NULL)
右連接RIGHT JOIN ... ON右表所有行 + 左表匹配行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved