SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL Inner Join子句

在本教程中,我們將演示如何使用SQL INNER JOIN子句來查詢來自兩個或多個表的數據。

1. SQL INNER JOIN子句簡介

到目前爲止,您已經學習瞭如何使用SELECT語句從單個表中查詢數據。 但是,SELECT語句不限於從單個表中查詢數據。 SELECT語句可以將多個錶鏈接在一起。

連接表的過程稱爲Join。 SQL提供了多種連接,如內連接,左連接,右連接,全外連接等。本教程重點介紹內連接。

內部連接子句通過兩列之間的關係鏈接兩個(或更多)表。 無論何時使用內連接子句,通常都要考慮交集。

通過一個簡單的例子來理解內連接概念要容易得多。

假設有兩個表:AB

A有四行:(1,2,3,4),表B有四行:(3,4,5,6)

當表A使用內部聯接與表B連接時,我們得到結果集(3,4),它是表A和表B的交集。

如下圖所示 -

SQL

對於表A中的每一行,內部連接子句查找表B中的匹配行。如果匹配行,則它將包含在最終結果集中。

假設A&B表的列名是n,以下語句說明了內連接子句:

SELECT
  A.n
FROM A
INNER JOIN B ON B.n = A.n;

INNER JOIN子句出現在FROM子句之後。 在ON關鍵字之後指定表A和表B之間匹配的條件。這種情況稱爲連接條件,即B.n = A.n

INNER JOIN子句可以連接三個或更多表,只要它們具有關係,通常是外鍵關係。

例如,以下語句說明了如何連接3個表:ABC

SELECT
  A.n
FROM A
INNER JOIN B ON B.n = A.n
INNER JOIN C ON C.n = A.n;

2. SQL INNER JOIN示例

SQL INNER JOIN 2個表的示例

我們將使用employeesdepartments表來演示INNER JOIN子句的工作原理。這兩個表的結構和關係如下所示:
SQL

每個員工都屬於一個且只有一個部門,而每個部門可以擁有多個員工。 員工和部門表之間的關係是一對多的。

employees表中的department_id列是將員工鏈接到departments表的外鍵列。

要獲取部門ID爲:1,23的信息,請使用以下語句。

SELECT
    department_id,
    department_name
FROM
    departments
WHERE
    department_id IN (1, 2, 3);

執行上面查詢語句,得到以下結果 -

+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
|             1 | 管理            |
|             2 | 市場營銷        |
|             3 | 採購            |
+---------------+-----------------+
3 rows in set

請注意,在WHERE子句中使用IN運算符來獲取department_id1,23的行。

要獲取在部門ID爲:1,23中工作的員工的信息,請使用以下查詢:

SELECT
    first_name,
    last_name,
    department_id
FROM
    employees
WHERE
    department_id IN (1, 2, 3)
ORDER BY
    department_id;

執行上面查詢語句,得到以下結果 -

SQL

要組合這兩個表中的數據,請使用內部連接子句,組成成以下查詢:

SELECT 
    first_name,
    last_name,
    employees.department_id,
    departments.department_id,
    department_name
FROM
    employees
        INNER JOIN
    departments ON departments.department_id = employees.department_id
WHERE
    employees.department_id IN (1 , 2, 3);

執行上面查詢語句,得到以下結果 -

SQL

對於employees表中的每一行,該語句檢查department_id列的值是否等於departments表中department_id列的值。

如果滿足條件employees.department_id = departments.department_id,則employeesdepartments表中行的數據的組合行將包含在結果集中。

請注意,employeesdepartments表都具有相同的列名department_id,因此我們必須使用語法table_name.column_name限定department_id列。

SQL INNER JOIN 3個表的示例

每個員工都有一個工作崗位,而一個工作崗位可能會有多個員工。 jobs表和employees表之間的關係是一對多的。

以下數據庫圖說明了employees, departmentsjobs 表之間的關係:

SQL

以下查詢使用內部聯接子句連接3個表:員工,部門和工作崗位,以獲取在部門ID爲:1,23中工作的員工的名字,姓氏,職位和部門名稱。

SELECT
    first_name, last_name, job_title, department_name
FROM
    employees e
INNER JOIN departments d ON d.department_id = e.department_id
INNER JOIN jobs j ON j.job_id = e.job_id
WHERE
    e.department_id IN (1, 2, 3);

執行上面查詢語句,得到以下結果 -

SQL

通過上面的學習,現在您應該瞭解SQL INNER JOIN子句如何工作,並知道如何應用它來查詢來自多個表的數據。