算法工程師的修養(yǎng) | 圖解SQL
點擊關注公眾號,干貨及時送達
作者:不剪發(fā)的Tony老師
https://blog.csdn.net/horses/article/details/104553075
本文介紹關系數據庫的設計思想:在 SQL 中,一切皆關系。
在 Unix 中,一切皆文件。
在面向對象的編程語言中,一切皆對象。

關系模型由數據結構、關系操作、完整性約束三部分組成。
關系模型中的數據結構就是關系表,包括基礎表、派生表(查詢結果)和虛擬表(視圖)。
常用的關系操作包括增加、刪除、修改和查詢(CRUD),使用的就是 SQL 語言。其中查詢操作最為復雜,包括選擇(Selection)、投影(Projection)、并集(Union)、交集(Intersection)、差集(Exception)以及笛卡兒積(Cartesian product)等。
完整性約束用于維護數據的完整性或者滿足業(yè)務約束的需求,包括實體完整性(主鍵約束)、參照完整性(外鍵約束)以及用戶定義的完整性(非空約束、唯一約束、檢查約束和默認值)。
我們今天的主題是關系操作語言,也就是 SQL。
接下來我們具體分析一下關系的各種操作語句;目的是為了讓大家能夠了解 SQL 是一種面向集合的編程語言,它的操作對象是集合,操作的結果也是集合。
在關系數據庫中,關系、表、集合三者通常表示相同的概念。
SELECT employee_id, first_name, last_name, hire_date
FROM employees;
SELECT *
FROM (SELECT employee_id, first_name, last_name, hire_date
FROM employees) t;
我們再看一個 PostgreSQL 中的示例:
-- PostgreSQL
SELECT *
FROM upper('sql');
| upper |
|-------|
| SQL |




SELECT department_id, count(*), first_name
FROM employees
GROUP BY department_id;

UNION(并集運算)
INTERSECT(交集運算)
EXCEPT/MINUS(差集運算)
兩邊的集合中字段的數量和順序必須相同;
兩邊的集合中對應字段的類型必須匹配或兼容。



SQL 中的關系概念來自數學中的集合理論,因此 UNION、INTERSECT 和 EXCEPT 分別來自集合論中的并集(∪\cup∪)、交集(∩\cap∩)和差集(?\setminus?)運算。 需要注意的是,集合理論中的集合不允許存在重復的數據,但是 SQL 允許。因此,SQL 中的集合也被稱為多重集合(multiset);多重集合與集合理論中的集合都是無序的,但是 SQL 可以通過 ORDER BY 子句對查詢結果進行排序。


t1 RIGHT JOIN t2
t2 LEFT JOIN t1


其他類型的連接還有半連接(SEMI JOIN)、反連接(ANTI JOIN)。
SELECT department_id
FROM departments
UNION
SELECT department_id
FROM employees;
SELECT COALESCE(d.department_id, e.department_id)
FROM departments d
FULL JOIN employees e ON (e.department_id = d.department_id);
CREATE TABLE test(id int);
-- MySQL、SQL Server 等
INSERT INTO test(id) VALUES (1),(2),(3);
-- Oracle
INSERT INTO test(id)
(SELECT 1 AS id FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
UNION ALL
SELECT 3 FROM DUAL);
SELECT *
FROM (
VALUES(1),(2),(3)
) test(id);
同樣,UPDATE 和 DELETE 語句也都是以關系表為單位的操作;只不過我們習慣了說更新一行數據或者刪除幾條記錄。
推薦閱讀
(點擊標題可跳轉閱讀)
老鐵,三連支持一下,好嗎?↓↓↓
評論
圖片
表情
