太贊了!圖解SQL基礎(chǔ)知識,菜鳥也能看懂的SQL文章!
作者:不剪發(fā)的Tony老師本文介紹關(guān)系數(shù)據(jù)庫的設(shè)計思想:在 SQL 中,一切皆關(guān)系。
在?Unix?中,一切皆文件。
在面向?qū)ο蟮木幊陶Z言中,一切皆對象。

關(guān)系模型由數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作、完整性約束三部分組成。
關(guān)系模型中的數(shù)據(jù)結(jié)構(gòu)就是關(guān)系表,包括基礎(chǔ)表、派生表(查詢結(jié)果)和虛擬表(視圖)。
常用的關(guān)系操作包括增加、刪除、修改和查詢(CRUD),使用的就是 SQL 語言。其中查詢操作最為復雜,包括選擇(Selection)、投影(Projection)、并集(Union)、交集(Intersection)、差集(Exception)以及笛卡兒積(Cartesian product)等。
完整性約束用于維護數(shù)據(jù)的完整性或者滿足業(yè)務約束的需求,包括實體完整性(主鍵約束)、參照完整性(外鍵約束)以及用戶定義的完整性(非空約束、唯一約束、檢查約束和默認值)。
我們今天的主題是關(guān)系操作語言,也就是 SQL。
接下來我們具體分析一下關(guān)系的各種操作語句;目的是為了讓大家能夠了解 SQL 是一種面向集合的編程語言,它的操作對象是集合,操作的結(jié)果也是集合。
在關(guān)系數(shù)據(jù)庫中,關(guān)系、表、集合三者通常表示相同的概念。
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(差集運算)
兩邊的集合中字段的數(shù)量和順序必須相同;
兩邊的集合中對應字段的類型必須匹配或兼容。



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


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?語句也都是以關(guān)系表為單位的操作;只不過我們習慣了說更新一行數(shù)據(jù)或者刪除幾條記錄。
萬水千山總是情,點個????行不行。

長按或掃描下方二維碼,后臺回復:加群,可申請入群。一定要備注:入群+地點+學習/公司。例如:入群+上海+復旦。
感謝你的分享,點贊,在看三連??
評論
圖片
表情
