77百科网
当前位置: 首页 生活百科

史上最坑的sql(图解SQL这也太秀了吧)

时间:2023-06-20 作者: 小编 阅读量: 1 栏目名: 生活百科

图解SQL这也太秀了吧原文链接:https://blog.csdn.net/horses/article/details/104553075在计算机领域有许多伟大的设计理念和思想,例如:在Unix中,一切皆文件在面向对象的。

原文链接:https://blog.csdn.net/horses/article/details/104553075

在计算机领域有许多伟大的设计理念和思想,例如:

  • 在 Unix 中,一切皆文件。
  • 在面向对象的编程语言中,一切皆对象。

关系数据库同样也有自己的设计思想:在 SQL 中,一切皆关系

关系模型

关系模型(Relational model)由 E.F.Codd 博士于 1970 年提出,以集合论中的关系概念为基础;无论是现实世界中的实体对象还是它们之间的联系都使用关系表示。我们在数据库系统中看到的关系就是二维表(Table),由行(Row)和列(Column)组成。因此,也可以说关系表是由数据行构成的集合。

关系模型由数据结构、关系操作、完整性约束三部分组成。

  • 关系模型中的数据结构就是关系表,包括基础表、派生表(查询结果)和虚拟表(视图)。
  • 常用的关系操作包括增加、删除、修改和查询(CRUD),使用的就是 SQL 语言。其中查询操作最为复杂,包括选择(Selection)、投影(Projection)、并集(Union)、交集(Intersection)、差集(Exception)以及笛卡儿积(Cartesian product)等。
  • 完整性约束用于维护数据的完整性或者满足业务约束的需求,包括实体完整性(主键约束)、参照完整性(外键约束)以及用户定义的完整性(非空约束、唯一约束、检查约束和默认值)。我们今天的主题是关系操作语言,也就是 SQL。本文使用的示例数据来源于:https://blog.csdn.net/horses/article/details/86518676
面向集合

SQL(结构化查询语言)是操作关系数据库的标准语言。SQL 非常接近英语,使用起来非常简单。它在设计之初就考虑了非技术人员的使用需求,我们通常只需说明想要的结果(What),而将数据处理的过程(How)交给数据库管理系统。所以说,SQL 才是真正给人用的编程语言!

接下来我们具体分析一下关系的各种操作语句;目的是为了让大家能够了解 SQL 是一种面向集合的编程语言,它的操作对象是集合,操作的结果也是集合。

在关系数据库中,关系、表、集合三者通常表示相同的概念。

SELECT

下面是一个简单的查询语句:

SELECTemployee_id, first_name, last_name, hire_dateFROMemployees;

它的作用就是从 employees 表中查询员工信息。显然,我们都知道 FROM 之后是一个表(关系、集合)。不仅如此,整个查询语句的结果也是一个表。所以,我们可以将上面的查询作为表使用:

SELECT*FROM(SELECTemployee_id, first_name, last_name, hire_dateFROMemployees)t;

括号内的查询语句被称为派生表,我们给它指定了一个别名叫做 t。同样,整个查询结果也是一个表;这就意味着我们可以继续嵌套,虽然这么做很无聊。

我们再看一个 PostgreSQL 中的示例:

-- PostgreSQLSELECT*FROMupper('sql');|upper||-------||SQL|

upper() 是一个大写转换的函数。它出现在 FROM 子句中,意味着它的结果也是一个表,只不过是 1 行 1 列的特殊表。

SELECT 子句用于指定需要查询的字段,可以包含表达式、函数值等。SELECT 在关系操作中被称为投影(Projection),看下面的示意图应该就比较好理解了。

除了 SELECT 之外,还有一些常用的 SQL 子句。

WHERE 用于指定数据过滤的条件,在关系运算中被称为选择(Selection),示意图如下:

ORDER BY 用于对查询的结果进行排序,示意图如下:

总之,SQL 可以完成各种数据操作,例如过滤、分组、排序、限定数量等;所有这些操作的对象都是关系表,结果也是关系表。

在这些关系操作中,有一个比较特殊,就是分组。

GROUP BY

分组( GROUP BY)操作和其他的关系操作不同,因为它改变了关系的结构。来看下面的示例:

SELECTdepartment_id,count(*),first_nameFROMemployeesGROUPBYdepartment_id;

该语句的目的是按照部门统计员工的数量,但是存在一个语法错误,就是 first_name 不能出现在查询列表中。原因在于按照部门进行分组的话,每个部门包含多个员工;无法确定需要显示哪个员工的姓名,这是一个逻辑上的错误。

所以说,GROUP BY 改变了集合元素(数据行)的结构,创建了一个全新的关系。分组操作的示意图如下:

尽管如此,GROUP BY 的结果仍然是一个集合。

UNION

SQL 面向集合特性最明显的体现就是 UNION(并集运算)、INTERSECT(交集运算)和 EXCEPT/MINUS(差集运算)。

这些集合运算符的作用都是将两个集合并成一个集合,因此需要满足以下条件:

  • 两边的集合中字段的数量和顺序必须相同;
  • 两边的集合中对应字段的类型必须匹配或兼容。具体来说,UNION 和 UNION ALL 用于计算两个集合的并集,返回出现在第一个查询结果或者第二个查询结果中的数据。它们的区别在于 UNION 排除了结果中的重复数据,UNION ALL 保留了重复数据。下面是 UNION 操作的示意图:

INTERSECT 操作符用于返回两个集合中的共同部分,即同时出现在第一个查询结果和第二个查询结果中的数据,并且排除了结果中的重复数据。INTERSECT 运算的示意图如下:

EXCEPT 或者 MINUS 操作符用于返回两个集合的差集,即出现在第一个查询结果中,但不在第二个查询结果中的记录,并且排除了结果中的重复数据。EXCEPT 运算符的示意图如下:

除此之外,DISTINCT 运算符用于消除重复数据,也就是排除集合中的重复元素。

SQL 中的关系概念来自数学中的集合理论,因此 UNION、INTERSECT 和 EXCEPT 分别来自集合论中的并集(∪ \cup∪)、交集(∩ \cap∩)和差集(∖ \setminus∖)运算。需要注意的是,集合理论中的集合不允许存在重复的数据,但是 SQL 允许。因此,SQL 中的集合也被称为多重集合(multiset);多重集合与集合理论中的集合都是无序的,但是 SQL 可以通过 ORDER BY 子句对查询结果进行排序。

JOIN

在 SQL 中,不仅实体对象存储在关系表中,对象之间的联系也存储在关系表中。因此,当我们想要获取这些相关的数据时,需要使用到另一个操作:连接查询(JOIN)。

常见的 SQL连接查类型包括内连接、外连接、交叉连接等。其中,外连接又可以分为左外连接、右外连接以及全外连接。

内连接(Inner Join)返回两个表中满足连接条件的数据,内连接的原理如下图所示:

左外连接(Left Outer Join)返回左表中所有的数据;对于右表,返回满足连接条件的数据;如果没有就返回空值。左外连接的原理如下图所示:

右外连接(Right Outer Join)返回右表中所有的数据;对于左表,返回满足连接条件的数据,如果没有就返回空值。右外连接与左外连接可以互换,以下两者等价:

t1RIGHTJOINt2t2LEFTJOINt1

全外连接(Full Outer Join)等价于左外连接加上右外连接,同时返回左表和右表中所有的数据;对于两个表中不满足连接条件的数据返回空值。全外连接的原理如下图所示:

其他类型的连接还有半连接(SEMI JOIN)、反连接(ANTI JOIN)。

集合操作将两个集合合并成一个更大或更小的集合;连接查询将两个集合转换成一个更大或更小的集合,同时获得了一个更大的元素(更多的列)。很多时候集合操作都可以通过连接查询来实现,例如:

SELECTdepartment_idFROMdepartmentsUNIONSELECTdepartment_idFROMemployees;

等价于:

SELECTCOALESCE(d.department_id, e.department_id)FROMdepartments dFULLJOINemployees eON(e.department_id=d.department_id);

我们已经介绍了许多查询的示例,接下来看看其他的数据操作。

DML

DML 表示数据操作语言,也就是插入、更新和删除。以下是一个插入语句示例:

CREATETABLEtest(idint);--MySQL、SQLServer等INSERTINTOtest(id)VALUES(1),(2),(3);--OracleINSERTINTOtest(id)(SELECT1ASidFROMDUALUNIONALLSELECT2FROMDUALUNIONALLSELECT3FROMDUAL);

我们通过一个 INSERT 语句插入了 3 条记录,或者说是插入了一个包含 3 条记录的关系表。因为,UNION ALL 返回的是一个关系表。VALUES 同样是指定了一个关系表,在 SQL Server 和 PostgreSQL 中支持以下语句:

SELECT*FROM(VALUES(1),(2),(3))test(id);

前面我们已经说过,FROM 之后是一个关系表,所以这里的 VALUES 也是一样。由于我们经常插入单条记录,并没有意识到实际上是以表为单位进行操作。

同样,UPDATE 和 DELETE 语句也都是以关系表为单位的操作;只不过我们习惯了说更新一行数据或者删除几条记录。

原文链接:https://mp.weixin.qq.com/s/kFSoIutQTfiFEFzDeRmSuw

,
    推荐阅读
  • 丈夫忍无可忍妻子屡次出轨的结果(妻子出轨有了私生子)

    九爷与邻村这个叫凤英的俊美姑娘的结合,可谓是一桩政治婚姻。凤英虽穿的是当时的粗布衣衫,却难掩她丰盈又苗条的好看身材。这都遭到了凤英的厉声咒骂,和坚决地动作反抗。尽管凤英始终坚守着底线,可众矢之的的漂亮女人还是在劫难逃地被出了轨。这时的凤英已羞愧得无地自容。照着子良开的方子,凤英喝了几付中药后病情有所减缓,药用完后,她又一次找到了子良。在子良和凤英好了一段时间后,终于他们的奸情被九爷发现。

  • 衣柜衣物收纳方法(看完你也整理完衣柜了吧)

    看完你也整理完衣柜了吧这个年假终于有时间可以慢慢的整理一下家里,为什么需要慢慢,因为家里熊孩子还要给你留下清净的时候整理呀,本来如何熊孩子能够帮忙那是最理想的情况,但是发现一件衣服都没给我叠好就觉得无聊,开始搞破坏了在加上。

  • 莜面怎么做好吃又简单(莜面如何做好吃又简单)

    下面更多详细答案一起来看看吧!莜面怎么做好吃又简单食材:莜面500g、开水适量、香菜一根、小米椒两个、大蒜一头、酱油适量、醋适量、辣椒油适量、香油适量。莜面倒入开水和成棉絮状,和成光滑的面团。取一小块莜面,用手掌心搓成长条,将所有莜面全部搓好。装入蒸笼里,开水上锅,大火蒸10分钟即可。

  • 推荐几本好看的小说(书荒是不存在的)

    推荐几本好看的小说《王者时刻》:《王者时刻》作者蝴蝶蓝,电子竞技小说大神级作家,作为继《全职高手》之后的又一本电子竞技小说,《王者时刻》还是受到了众多读者的期待,前王者荣耀kpl职业联赛选手黯然退役,作为弟弟的何遇不满哥哥遭受的待遇而重新投入王者荣耀游戏中,组战队,练技术,结识一众高手,请看《王者时刻》。将军折剑,公主自刎。黑水沉舟,青灯夜游。白衣祸世,血雨探花。请看《带着仓库到大明》。

  • 普利司通邓禄普哪个好(普利司通和邓禄普哪个好)

    普利司通邓禄普哪个更好?就性价比而言,邓禄普是一个不错的选择。它也是许多越野比赛的主要赞助商,因为邓禄普是最好的越野轮胎。针对中国的情况,邓禄普适当降低了一些小轮胎的定位,以满足几乎所有车型的需求,价格也相对合适。但普利司通轮胎是适用于各种车辆的优质轮胎之一。此外,普利司通轮胎的动力传递效率和响应性高,既能保证排水又能提高抓地力,兼顾节能和安全。

  • 太阳能热水器的安装步骤(如何安装太阳能热水器)

    此时就可以打开太阳能热水器的包装,检查装备是否齐全。一般情况下,太阳能热水器安装在屋顶,尽量安装在太阳照射多的位置与方向,之后做好标记。太阳能热水器安装步骤中会用到一个固定支架,平常这个支架称为太阳能支架。这一步的进行可以保证太阳能热水器的固定于安稳。之后完成后接好再接热带电线。这种控制仪主要是为了保证水箱的水足够,另外也可以进行自动的加水出水等功能。

  • 海安企业百强(海安打造台资集聚新高地)

    海安市委、市政府还发布了惠台政策,举全市之力打造两岸中小企业深化合作、创新创业、产业升级的新高地,这也是海安市全面贯彻落实南通市第十三次党代会精神的生动实践。海安是经济极具活力、文化特色明显、人居环境良好的沿海城市。截至目前,海安市累计批准台资项目数136个,协议吸引台资总额10.82亿美元,实际利用台资3.64亿美元。海安市对台经贸合作基础厚实,空间广阔。海安市委书记于立忠表示。

  • 花蟹要怎么保存(花蟹的保存方法)

    如果是死的,买回来的时候马上丢速冻刚死的海蟹冻在冰箱里,温度越低,冻的时间就能够越长,如果在零下18度的话,一、二个月没有问题,下面我们就来聊聊关于花蟹要怎么保存?花蟹要怎么保存如果是死的,买回来的时候马上丢速冻。花蟹在香港地区终年生产,是真正的咸水蟹,而在夏季和秋季的花蟹则更加肥壮。

  • 宝宝便秘怎么办 宝宝便秘怎么办按摩手法

    通常小宝宝有便秘症状时,常因粪便堵塞肠道,致使宝宝容易有吃不下、缺乏胃口的情形发生。若宝宝有便秘情况,可略微增加宝宝的母奶摄取量,以缓解便秘情况。因便秘属大肠经有火、有偏燥热的情况,故有便秘等症状。注意事项对新生儿来说,几天不见宝宝便便是常有的事,不一定属于便秘。新生儿消化系统未成熟,解便次数常不规律。