【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能

〇、本文所用数据库表格:

mysql sql语句 做运算 sql数据库运算_C++


mysql sql语句 做运算 sql数据库运算_C++_02


mysql sql语句 做运算 sql数据库运算_C++_03

一、关系运算:

        关系运算,数学名词,基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、连接、除法、外连接等),数据库操作的有些查询需要几个基本运算的组合,要经过若干步骤才能完成。关系是由元组构成的集合,可以通过关系的运算来表达查询要求。

1.1 传统的关系运算:

1.1.1 并:

  • R∪S
  • 仍为n 元关系 , 由属于R 或属于S 的元组组成
    R∪S = { t|t 属于 R∨t 属于S }
  • 示意图:

    1.1.2 差:
  • R - S
  • 仍为n元关系 , 由属于R 而不属于S 的所有元组组成
    R - S = { t|t属于R∧t不属于S }
  • 示意图:

1.1.3 交:

  • R∩S
  • 仍为n 元关系 , 由既属于R 又属于S 的元组组成
    R∩S = { t|t 属于R∧t 属于S }
    R∩S = R – (R-S)
  • 示意图:

1.1.4 笛卡尔积:

  • R ×S
  • 示意图:

1.2 专门的关系运算:

1.2.1 选择:

  • 在关系R中选择满足给定条件的诸元组。
  • σ F ® = {t|t属于R∧F(t)= ’ 真’}
    F:选择条件 :选择条件 , 是一个逻辑表达式
  • 示意图:

1.2.2 投影:

  • 从R 中选择出若干属性列组成新的关系
    π A ® = { t[A] | t属于R }
    A : R中的属性列。
  • 投影操作主要是从列的角度进行运算
    投影之后不仅取消了原关系中的某些列 , 而且还可能
    取消某些元组(避免重复行!)。
    1.2.3 连接:
  • 连接也称为θ连接。
  • 连接运算的含义:
    从两个关系的笛卡尔积中选属性间满足一定条件的元组。
  • 两类常用的连接运算:
    等值连接(equijoin)、自然连接(natrualjoin)。

1.等值连接:

    从关系R和S的广义笛卡尔积中选取A、B属性值相等的那些元组。

mysql sql语句 做运算 sql数据库运算_学习_04


2.自然连接:

值相等的分量,两个关系中可以没有相同的属性;进行自然连接的两个关系中必须有相同的属性。 等值连接不要求去掉重复属性列;自然连接时需要除掉重复的属性列。

自然连接的含义:

  • R和S的相同属性组的值相等。
  • 两个关系中进行比较的分量必须是相同的属性组。
  • 在结果中要把重复的属性列去掉。
  • 一般的连接操作是从行的角度进行运算,而自然连接需要取消重复列,是同时从行和列的角度进行运算。

3.内连接(Inner Join):

  • 两个关系做自然连接时,连接的结果是满足条件的元组保留下来,不满足条件的元组被舍弃了。

4.外连接(Outer Join):

  • 如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫外连接。
  • 左外连接:只把左边关系中要舍弃的元组保留。
  • 右外连接:只把右边关系中要舍弃的元组保留。

4.除:

mysql sql语句 做运算 sql数据库运算_C++_05

二、SQL语言介绍:

    SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。

  • SQL和SQL SERVER的区别:
  • SQL( structured query language) 结构化查询语言。
    它是一种标准,不是一种软件。
  • SQL SERVER 是数据库管理系统的一种,这种软件在遵循 SQL 这种标准,很多数据库管理软件及开发工具都支持 SQL。

2.1 SQL语言的特点:

1.综合统一:
数据定义语言(DDL),数据查询语言(DQL),数据操纵语言(DML),数据控制语言(DCL)于一体。可独立完成数据库生命周期中的全部活动,随时修改。数据操作符统一。

2.高度非过程化:
面向对象的第四代语言;SQL只要提出“做什么”,无须了解存取路径;存取路径的选择以及SQL的操作过程由系统自动完成。

3.面向集合的操作方式:
操作对象、查找结果可以是元组的集合;一次插入、删除、更新操作的对象是元组的集合。

4.以同一种语法结构提供多种使用方式:
独立的语言,能够独立用于联机交互的使用方式;嵌入式语言,能够嵌入到高级语言中使用。

2.2 SQL语言功能概述:

SQL语言有四部分功能: 数据定义、 数据控制、 数据查询、 数据操纵。

mysql sql语句 做运算 sql数据库运算_C_06


2.2.1 SQL支持关系数据库的三级模式结构:

mysql sql语句 做运算 sql数据库运算_mysql sql语句 做运算_07

  • 基本表:
    本身独立存在的表。
    SQL中一个关系就对应一个基本表。
    一个(或多个)基本表对应一个存储文件。
    一个表可以带若干索引。
  • 视图:
    从一个或几个基本表导出的表。
    数据库中只存放视图的定义。
    视图是一个虚表。
    用户可以在视图上再定义视图。
  • 存储文件:
    逻辑结构组成了关系数据库的内模式。
    物理结构是任意的,对用户透明。
  • 索引:
    为快速访问数据,而在包含数据的表中增加的一种组织。
    分为聚簇索引和非聚簇索引。
    聚簇索引:指索引项的顺序与表中记录的物理顺序一致的索引组织。

2.3 SQL的数据类型:

2.3.1 数值型:
分为 准确型和近似型。

  • 准确型:
    整数:
    Bigint:8字节
    Int:4字节
    Smallint:2字节
    Tinyint:1字节(表示范围为0~255整数)
    Bit:1位,存储1或0
    小数:
    Numeric(p,q)或Decimal(p,q),
    其中:p为数字位长度,q为小数位长度。
  • 近似型:
    Float:8字节
    Real:4字节

2.3.2 字符串型:

  • 普通编码字符串类型:
    Char(n):定长存储,n<=8000
    Varchar(n):不定长存储(按实际),长度不超过n,n<=8000
    Text:存储大于8000字节的文本
  • 统一字符编码字符串类型:
    nchar(n):定长存储,n<=4000
    nvarchar(n):不定长存储,长度最大不超过n,n<=4000
    ntext:存储大于8000字节的文本
    特点:每个字符占两个字节。
  • 二进制字符串类型:
    Binary(n):固定长度,n<=8000
    Varbinary(n):可变长度,n<=8000
    注:n为二进制数据的字节数。
    Image:大容量、可变长二进制字符数据,可用于存储文件。
    2.3.3 日期时间型:
    Datatime:8字节,年月日时分秒毫秒
    SmallDateTime:4字节,年月日时分

2.4 SQL的数据定义功能:

1.定义基本表:
CREATE TABLE <表名>
2.删除表:
DROP TABLE <表名>
3.修改表结构:
ALTER TABLE <表名>

2.5 数据完整性:

2.5.1 完整性约束条件的作用对象:

  • 完整性检查是围绕完整性约束条件进行的,因此,完整性约束条件是完整性控制机制的核心。
  • 完整性约束条件的作用对象可以是表、元组和列。即:
    列级约束、元组约束、关系约束。

1.列级约束:
列级约束主要是对列的类型、取值范围、精度等的约束。

  • 对 数据类型 的约束:
    包括数据类型、长度、精度等。
  • 对 数据格式 的约束:
    如:规定学号的前两位表示学生的入学年份,第三位表示系的规定学号的前两位表示学生的入学年份,第三位表示系的编号,第四位表示专业编号,第五位代表班的编号等等。
  • 对 取值范围 的约束:
    如: 学生的成绩取值范围为0 ~100。 。
  • 对 空值

2.元组约束:
元组的约束是元组中各个字段之间的相互约束,如:
开始日期小于结束日期。
职工的最低工资不能低于规定的最低保障金。

3.关系约束:
指若干元组之间、关系之间的联系的约束,如:
学号的取值不能重复也不能取空值。
学生修课表中的学号的取值受学生表中的学号取值的约束。

2.5.2 实现数据完整性:

1.声明完整性:
在表定义时声明,使用约束、缺省值等。
2.过程完整性:
在客户端或服务器端用编程语言或工具来实现。
在Server端用触发器(Trigger)来实现。

2.5.3 实现约束:

  • PRIMARY KEY 约束:保证实体完整性。
  • UNIQUE 约束:确保在非主键列中不输入重复值。应用在客观具有唯一性质的列上。如:身份证号、社保号等。
  • FOREIGN KEY 约束:用于建立和加强两个表数据之间的连接的一列或多列。如:为雇员表的工作编号添加外码引用约束,此列引用工作表的工作编号列。
  • DEFAULT 约束:当向表中插入数据时,如果没有为定义了DEFAULT的列提供值,则此列使用默认值。一个DEFAULT只能约束一列。
  • CHECK 约束:通过限制输入到列中的值来强制域的完整性,可定义同表多列之间的约束关系。 如:在雇员表中,添加限制雇员的工资必须大于等于500的约束。再比如:添加限制工资表的最低工资小于等于最高工资的约束。