SQL编程思想

  在计算机领域中有许多伟大的设计理念和思想;在Unix中,一切皆文件;在面向对象的编程语言中,一切皆对象;在关系型数据库中,一切皆关系。

一、SQL编程思想

关系模型

  关系模型以集合论中的关系概念为基础;无论是现实世界的实体对象还是它们之间的联系都用关系表示。我们在数据库中看到的关系就是二维表,由行和列组成。所以可以说是关系表是由数据行构成的集合。

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

  • 数据结构:关系模型中的数据结构就是关系表,包括基础表、派生表(查询结果)和虚拟表(视图)。
  • 关系操作:增加、删除、修改、和查询,使用的就是SQL语言。其中查询操作最为复杂,包括选择、投影、并集、交集、差集以及笛卡尔积。
  • 完整性约束:用于维护数据的完整性或者满足业务约束的需求,包括实体完整性(主键约束)、参照完整性(外键约束)以及用户定义的完整性(非空约束、唯一约束、检查约束和默认值)。

面向集合

  SQL是操作关系数据库的标准语言。我们通常只需要说明想要的结果,而将数据处理的过程交给数据库管理系统。SQL是一种面向集合的编程语言,它的操作对象是集合,操作的结果也是集合。(在关系数据库中,关系、表、集合三者通常表示相同的概念)

SELECT  

select id,name,age,create_time
from student;
select *
from (select id,name,age,create_time from student)t

  第一个SQL的作用是从学生表中查询学生信息。from之后是一个表,不仅如此查询结果也是一个表,我们可以将查询的结果作为一个表使用,()内的内容被称为派生表,指定了一个别名叫做t。

  select字句用于指定需要查询的字段,可以包括表达式、函数值等。select在关系操作中被称作为投影。选择自己想要的结果重新组成一个集合。

  where用于指定数据过滤的条件,在关系运算中被称作为选择。

  order by用于对查询的结果进行排序,总之,SQL可以完成各种数据操作,过滤、分组、排序、限定数量等,所有这些操作的对象是关系表,结果也是关系表。

分组GROUP BY

  分组操作和其他的关系操作不同,因为它改变了关系的结构。

select max(id),max(name),age,count(*)
from student
group by age

  分组的其他字段,查询时都需要套用函数字段进行取值,否则出现多个值时不知道取哪个值,会出现报错。所以,group by 改变了集合元素的结构,创建了一个全新的关系。

UNION

  SQL面向集合特性最明显的体现就是union、intersect、except/minus,这些集合运算符的作用都是将两个集合并成一个集合,必须满足一下条件:

  • 两边的集合中字段的数量和顺序必须相同
  • 两边的集合中对应字段的类型必须匹配或者兼容

集合操作运算符具体操作:

  • union:计算两个集合的并集,排除了结果中的重复数据
  • union all:计算两个集合的并集,保留了重复数据
  • intersect:返回两个集合中的共同部分,并且排除了结果中的重复数据
  • except:返回出现在第一个结果集中,但不出现在第二个结果集中的记录,并且排除了结果中的重复数据
  • minus:返回出现在第一个结果集中,但不出现在第二个结果集中的记录,并且排除了结果中的重复数据
  • distinct:用于消除重复数据,排除集合中的重复元素

JOIN

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

  JOIN:连接查类型包括内连接、外连接、交叉连接等,外连接分为左外连接、右外连接以及全外连接:

  • 内连接:返回两个表中满足连接条件的数据
  • 左外连接:返回左表中所有的数据,对于右表,返回满足连接条件的数据,如果没有就返回空值
  • 右外连接:返回右表中所有的数据,对于左表,返回满足连接条件的数据,如果没有就返回空值
  • 全外连接:同时返回左表和右表中的所有数据,对于两个表中不满足条件的数据返回空值
  • 交叉连接:笛卡尔积

DML

  表示数据操作语言,也就是插入、更新和删除。由于我们经常插入单条记录,并没有意思到实际上是以表为单位进行操作。update和delete语句都是以关系表尾单位的操作,只不过我们习惯说更新一行

数据或者删除几条记录。

原文地址:https://www.cnblogs.com/yfstudy/p/13548755.html