mysql基礎_02_連接查詢

一、 分類

1. 按年代分類:

  • sql92標準:僅僅支持內連接
  • sql99標準【推薦】:支持內連接+外連接(左外和右外)+交叉連接

2. 按功能分類:

  • 內連接
    • 等值連接
    • 非等值連接
    • 自連接
  • 外連接
    • 左外連接
    • 右外連接
    • 全外連接
  • 交叉連接

二、 SQL 92

1. 等值連接

案例:查詢員工名和對應的部門名

SELECT 
	last_name,department_name
FROM 
	employees,departments
WHERE 
	employees.`department_id` = departments.`department_id`;

2. 爲表起別名

  • 提高語句的簡潔度
  • 區分多個重名的字段
  • 注意:如果爲表起了別名,則查詢的字段就不能使用原來的表名去限定(虛擬視圖)

3. 非等值連接

根據WHERE條件中的條件去連接,滿足條件則連接

SELECT 
	salary,grade_level
FROM 
	employees e,job_grades g
WHERE 
	salary BETWEEN g.`lowest_sal` AND g.`highest_sal`
	AND g.`grade_level`='A'; 

4. 自連接

案例:查詢 員工名和上級的名稱

SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`;

三、 SQL 99

語法:

	select 查詢列表
	from1 別名 [ 連接類型 ]
	join2 別名 
	on 連接條件
	[where 篩選條件]
	[group by 分組]
	[having 組篩選條件]
	[order by 排序列表]

分類:

  • 內連接:inner
  • 外連接
    • 左外(★):left 【outer】
    • 右外(★):right 【outer】
    • 全外:full【outer】 (mysql 不支持)
  • 交叉連接:cross
    在這裏插入圖片描述

1. 內連接

語法:

select 查詢列表
from1 別名
inner join2 別名  #inner 可以省略
on 連接條件;

分類:

  • 等值
  • 非等值
  • 自連接

2. 外鏈接

分類:

  • 左外連接 LEFT [ OTER ] JOIN
  • 右外連接 RIGHT [ OTER ] JOIN
  • 全外連接 FULL [ OTER ] JOIN (mysql 不支持)

特點:

  • 外連接的查詢結果爲主表中的所有記錄
    • 如果從表中和它匹配的,則顯示匹配的值
    • 如果從表中沒有和它匹配的,則顯示null
  • 外連接查詢結果 = 內連接結果 + 主表有從表沒有 的記錄

2.1 左外連接

LEFT JOIN 左邊 爲 主表

2.2 右外連接

RIGHT JOIN 右邊 爲 主表

2.3 全外連接(mysql 不支持)

全外連接 = 內連接的結果 + 表1中有但表2沒有的 + 表2中有但表1沒有的

3. 交叉連接

相當於一個笛卡爾乘積

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章