图解SQL基础知识,小白也能看懂的SQL文章!
![](https://filescdn.proginn.com/d2b6c3a425df41c0ee9498d841b88421/70cbc2813cb63c285eee9c55398d547f.webp)
本文介绍关系数据库的设计思想:在 SQL 中,一切皆关系。
在 Unix 中,一切皆文件。
在面向对象的编程语言中,一切皆对象。
![](https://filescdn.proginn.com/df7a98a665224b19ffe9cf96a894e993/be36a3ecd00adfcb8922a61ff964e802.webp)
关系模型由数据结构、关系操作、完整性约束三部分组成。
关系模型中的数据结构就是关系表,包括基础表、派生表(查询结果)和虚拟表(视图)。
常用的关系操作包括增加、删除、修改和查询(CRUD),使用的就是 SQL 语言。其中查询操作最为复杂,包括选择(Selection)、投影(Projection)、并集(Union)、交集(Intersection)、差集(Exception)以及笛卡儿积(Cartesian product)等。
完整性约束用于维护数据的完整性或者满足业务约束的需求,包括实体完整性(主键约束)、参照完整性(外键约束)以及用户定义的完整性(非空约束、唯一约束、检查约束和默认值)。
我们今天的主题是关系操作语言,也就是 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 |
![](https://filescdn.proginn.com/0461f85315276a8e9e51fde16e52bb75/47e894155acd3efd430973d5adedf418.webp)
![](https://filescdn.proginn.com/ce715fbfea46ed6f2e9c3ed0f5a26ffd/3123bf927be853cb9f84f835d57d3011.webp)
![](https://filescdn.proginn.com/c33fcbc05c5429ad4297026864adba4c/9ad44a56a60d55d4570075395e0fc8f2.webp)
![](https://filescdn.proginn.com/9df21cc14e6a99ead763d3827d6bcfef/cb7b0ac02a474b87a30f130643d5b651.webp)
SELECT department_id, count(*), first_name
FROM employees
GROUP BY department_id;
![](https://filescdn.proginn.com/56ec2ac852bb7eff1b02512430d72dc8/70d674c9baede80ad4201f4d58570e4d.webp)
UNION(并集运算)
INTERSECT(交集运算)
EXCEPT/MINUS(差集运算)
两边的集合中字段的数量和顺序必须相同;
两边的集合中对应字段的类型必须匹配或兼容。
![](https://filescdn.proginn.com/5a57ab1f2c02e2ddbf7db4d04a4c2dff/375b156289170073800efe97d6f161b2.webp)
![](https://filescdn.proginn.com/dfc9b2a9ce6f4ad582fef5800b8b971f/c8888e023b4aa34eacd96a50a8b128fe.webp)
![](https://filescdn.proginn.com/8c9291b124246e2805c66af2baa95778/3f0226f91fd23bc0726ded91458a6399.webp)
SQL 中的关系概念来自数学中的集合理论,因此 UNION、INTERSECT 和 EXCEPT 分别来自集合论中的并集(∪\cup∪)、交集(∩\cap∩)和差集(∖\setminus∖)运算。 需要注意的是,集合理论中的集合不允许存在重复的数据,但是 SQL 允许。因此,SQL 中的集合也被称为多重集合(multiset);多重集合与集合理论中的集合都是无序的,但是 SQL 可以通过 ORDER BY 子句对查询结果进行排序。
![](https://filescdn.proginn.com/feba3f9faf3af085a0adcf670a2d751e/a4f1d97b33c39fd865cd1664d47e2bce.webp)
![](https://filescdn.proginn.com/d720c8cee2f9905c0e68c5f6c058688c/c94ead1ac5d39670d87a3489ebf0af31.webp)
t1 RIGHT JOIN t2
t2 LEFT JOIN t1
![](https://filescdn.proginn.com/d7385600c487475136dcd7c1225fa4b6/c24483c907a399fe692aea2db786ce7d.webp)
![](https://filescdn.proginn.com/bf083e6a883ea971ce6ec140a47de361/cac7caedbdbd0be2c749ef8e408aec25.webp)
其他类型的连接还有半连接(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 语句也都是以关系表为单位的操作;只不过我们习惯了说更新一行数据或者删除几条记录。
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
量化: 定投基金到底能赚多少钱? | 我用Python对去年800只基金的数据分析
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
点阅读原文,领AI全套资料!