精华内容
下载资源
问答
  • 数据库SQL语言从入门到精通--Part 3--SQL语言基础知识
    千次阅读
    2020-03-22 14:01:56

    数据库从入门到精通合集(超详细,学习数据库必看)

    一、关系

    • 单一的数据结构----关系
      现实世界的实体以及实体间的各种联系均用关系来表示
    • 逻辑结构----二维表
      从用户角度,关系模型中数据的逻辑结构是一张二维表
    • 建立在集合代数的基础上
    1.域(Domain)

    域是一组具有相同数据类型的值的集合。

    2.笛卡尔积(Cartesian Product)

    笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合。

    简单来说就是两个集合相乘的结果,集合A和集合B中任意两个元素结合在一起,也叫交叉连接。集合A{a1,a2,a3} 集合B{b1,b2},笛卡尔积 A × B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}

    • 所有域的所有取值的一个组合
    • 不能重复
    1)元组(Tuple)

    笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)

    2)分量(Component)

    笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量

    3)基数(Cardinal number)

    若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
    在这里插入图片描述

    4)笛卡尔积的表示方法

    笛卡尔积可表示为一个二维表
    表中的每行对应一个元组,表中的每列对应一个域

    3.关系(Relation)
    1)关系

    D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的
    关系,表示为R(D1,D2,…,Dn)
    R:关系名
    n:关系的目或度(Degree)

    2)元组

    关系中的每个元素是关系中的元组,通常用t表示。

    3) 单元关系与二元关系

    当n=1时,称该关系为单元关系(Unary relation)或一元关系
    当n=2时,称该关系为二元关系(Binary relation)

    4) 关系的表示

    关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域

    5)属性

    关系中不同列可以对应相同的域
    为了加以区分,必须对每列起一个名字,称为属性(Attribute)
    n目关系必有n个属性

    6) 码

    候选码(Candidate key)
    若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
    简单的情况:候选码只包含一个属性
    全码(All-key)
    最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
    主码
    若一个关系有多个候选码,则选定其中一个为主码(Primary key)
    主属性
    候选码的诸属性称为主属性(Prime attribute)
    不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute)

    7) 三类关系

    基本关系(基本表或基表)
    实际存在的表,是实际存储数据的逻辑表示
    查询表
    查询结果对应的表
    视图表
    由基本表或其他视图表导出的表,是虚表,不对
    应实际存储的数据

    8)基本关系的性质

    ① 列是同质的(Homogeneous)
    ② 不同的列可出自同一个域:其中的每一列称为一个属性;不同的属性要给予不同的属性名
    ③ 列的顺序无所谓,,列的次序可以任意交换
    ④ 任意两个元组的候选码不能相同
    ⑤ 行的顺序无所谓,行的次序可以任意交换
    ⑥ 分量必须取原子值
    在这里插入图片描述

    二、关系模式

    1.什么是关系模式
    • 关系模式(Relation Schema)是型
    • 关系是值
    • 关系模式是对关系的描述
      元组集合的结构:属性构成、属性来自的域、属性与域之间的映象关系
      元组语义以及完整性约束条件
      属性间的数据依赖关系集合
    2.定义关系模式

    R(U,D,DOM,F)
    R——关系名
    U——组成该关系的属性名集合
    D——属性组U中属性所来自的域
    DOM——属性向域的映象集合
    F——属性间的数据依赖关系集合

    关系模式通常可以简记为
    R (U)或R (A1,A2,…,An)
    R: 关系名
    A1,A2,…,An : 属性名
    ps:域名及属性向域的映象常常直接说明为属性的类型、长度

    3.关系模式与关系
    1)关系模式

    对关系的描述
    静态的、稳定的

    2)关系

    关系模式在某一时刻的状态或内容
    动态的、随时间不断变化的

    3)关系模式和关系往往统称为关系

    三、关系数据库

    1.关系数据库

    在一个给定的应用领域中,所有关系的集合构成一个关系数据库

    2.关系数据库的型与值
    1)关系数据库的型: 关系数据库模式对关系数据库的描述。
    2)关系数据库模式包括

    若干域的定义
    在这些域上定义的若干关系模式

    3)关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库

    四、关系操作

    1. 基本关系操作
    1).常用的关系操作

    查询:选择、投影、连接、除、并、交、差
    数据更新:插入、删除、修改
    查询的表达能力是其中最主要的部分
    选择、投影、并、差、笛卡尔基是5种基本操作

    2).关系操作的特点

    集合操作方式:操作的对象和结果都是集合,一次一集合的方式

    2.关系数据库语言的分类
    1).关系代数语言

    用对关系的运算来表达查询要求
    代表:ISBL

    2).关系演算语言:

    用谓词来表达查询要求元组关系演算语言
    谓词变元的基本对象是元组变量
    代表:APLHA, QUEL
    域关系演算语言
    谓词变元的基本对象是域变量
    代表:QBE

    3).具有关系代数和关系演算双重特点的语言

    代表:SQL(Structured Query Language)

    五、关系的完整性

    1.关系的三类完整性约束
    1)实体完整性和参照完整性:

    关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持

    2)用户定义的完整性:

    应用领域需要遵循的约束条件,体现了具体领域中的语义约束

    2.实体完整性
    1) 实体完整性规则(Entity Integrity)

    若属性A是基本关系R的主属性,则属性A不能取空值

    • (1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
    • (2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
    • (3) 关系模型中以主码作为唯一性标识。
    • (4) 主码中的属性即主属性不能取空值。
    3.参照完整性
    1) 关系间的引用

    在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。

    2) 外码
    • (1)设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码
    • (2)基本关系R称为参照关系(Referencing Relation)
    • (3)基本关系S称为被参照关系(Referenced Relation) 或 目标关系(Target Relation)
    3). 参照完整性规则

    若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
    或者取空值(F的每个属性值均为空值)
    或者等于S中某个元组的主码值

    4) 用户定义的完整性
    • (1)针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
    • (2)关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

    六、关系代数

    1.概述
    集合运算符含义
    -
    ×笛卡儿积
    比较运算符含义
    大于
    大于等于
    小于
    小于等于
    等于
    <> !=不等于
    专门的关系运算符含义
    σ \sigma σ选择
    π \pi π投影
    ⋈ \bowtie 连接
    ÷
    逻辑运算符含义
    ∧ \wedge
    ∨ \vee
    2.传统的集合运算

    具有相同的目n(即两个关系都有n个属性)相应的属性取自同一个域

    1)R∪S

    仍为n目关系,由属于R或属于S的元组组成
    R∪S ={t|t∈R∨t ∈S}

    2)R - S

    仍为n目关系,由属于R而不属于S的所有元组组成
    R -S = { t|t∈R∧t∉S }

    3)R∩S

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

    4)R×S

    列:(n+m)列元组的集合
    元组的前n列是关系R的一个元组
    后m列是关系S的一个元组
    行:k1×k2个元组
    R×S = {t_r⌒t_s |t_r∈R ∧ t_s∈S }

    3.关系运算

    几个重要记号
    在这里插入图片描述

    1)专门的关系运算

    1、选择(selection):

    选择运算是单目运算,它从一个关系R中选择出满足给定条件的所有元组,并同R具有相同的结构。
    关系R的选择运算是从关系R中选择满足指定条件(用F表示)的元组构成的新关系.换言之,选择运算的结果是一个表的水平方向的子集,是从行的角度进行的运算。
    关系R的选择运算记为:σF(R)={t|t∈R∧F(t)= ‘真’}。
    F:选择条件,是一个逻辑表达式,基本形式为: X 1 θ Y 1 X_1θY_1 X1θY1
    在这里插入图片描述

    2、投影(projection):

    投影运算也是单目运算,它从一个关系R所有属性中选择某些指定属性,组成一个新的关系。选择运算选取关系的某些行,而投影运算选取关系的某些列,是从一个关系出发构造其垂直子集的运算。
    投影操作主要是从列的角度进行运算,但投影之后不仅取消可原关系中的某些列,而且还可能取消某些元组(避免重复行)
    在这里插入图片描述

    3、连接(join):

    连接运算是关系的二目运算.关系R与关系S的连接运算是从两个关系的广义笛卡尔积中选取属性间满足一定条件(称为连接条件,记为AθB)的元组形成一个新关系。
    在这里插入图片描述
    ①等值连接

    等值连接是从关系R与S的广义笛卡尔积中选取A、B属性相等的那些元组,按照属性相同的行将两(或以上)张表元组匹配连接;
    举个例子
    ID_Name表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    SELECT * FROM ID_Name N,ID_MingZhu M WHERE N.ID=M.ID;
    
    ID_Name.IDNameID_MingZhu.IDMingZhu
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传

    ② 自然连接

    自然连接是特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。

    举个例子:
    ID_Name表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    SELECT * FROM ID_Name N natural join ID_MingZhu M ON N.ID=M.ID;
    
    ID_Name.IDNameMingZhu
    3猪八戒西游记
    4孙悟空西游记
    5沙和尚西游记
    7唐三藏西游记
    8武松水浒传

    ③ 左外连接
    将返回右表的所有行。如果左表的某行在右表中没有匹配行,则将为右表返回空值左连接:
    例子:
    ID_Name表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N left join ID_MingZhu M ON N.ID=M.ID;
    
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    1大好人NULLNULL
    2大坏蛋NULLNULL
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传

    ④ 右外连接
    将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值;
    例子

    ID_Name表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N left join ID_MingZhu M ON N.ID=M.ID;
    
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传
    NULLNULL9红楼梦
    • 全外连接。
      左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充

    例子
    ID_Name表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N left join ID_MingZhu M ON N.ID=M.ID;
    
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    1大好人NULLNULL
    2大坏蛋NULLNULL
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传
    NULLNULL9红楼梦

    4、除

    给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。
    R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
    R与S的除运算得到一个新的关系P(X),
    P是R中满足下列条件的元组在 X 属性列上的投影:
    元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
    R÷S = {t_r [X] | t_r ∈ R∧πY (S) ⊆ Y_x }
    Y_x:x在R中的象集,x = tr[X]

    除操作是同时从行和列角度进行运算
    例子:
    在这里插入图片描述在这里插入图片描述

    这里还有数据库相关的优质文章:快戳我,快戳我😳

    更多相关内容
  • 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能 〇、本文所用数据库表格: 一、关系运算:         关系运算,数学名词,基本运算有两类:一类是传统的集合...

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

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

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    一、关系运算:

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

    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属性值相等的那些元组。
    在这里插入图片描述
    2.自然连接:

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

    自然连接的含义:

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

    3.内连接(Inner Join):

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

    4.外连接(Outer Join):

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

    4.除:
    在这里插入图片描述

    二、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语言有四部分功能: 数据定义数据控制数据查询数据操纵
    在这里插入图片描述
    2.2.1 SQL支持关系数据库的三级模式结构:
    在这里插入图片描述

    • 基本表:
      本身独立存在的表。
      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的约束。再比如:添加限制工资表的最低工资小于等于最高工资的约束。
    展开全文
  • SQL 语言入门

    2020-05-09 23:31:57
    结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 结构化查询语言是高级的非过程化编程语言,...

    结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

    结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

    我会讲以下内容:

    • SQL 语言概述
    • 数据库的安装 MySQL 安装
    • SQL 语言基础知识
    • 模式、基本表、视图
    • 单表查询,多表查询

    适合人群:SQL 语言初学者

    一、SQL 概述

    关系数据库标准语言 SQL(结构化查询语言)。 结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

    结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

    SQL 语言的精巧:仅有 9 个命令动词,后扩充至 10 个。

    二、SQL 语言的特点

    1.综合统一

    集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。可以独立完成数据库生命周期中的全部活动:

    • 定义关系模式,插入数据,建立数据库;
    • 对数据库中的数据进行查询和更新;
    • 数据库重构和维护
    • 数据库安全性、完整性控制等

    用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。数据操作符统一

    2.高度非过程化
    1. 非关系数据模型的数据操纵语言“面向过程”,必须指定存取路径
    2. SQL 只要提出“做什么”,无须了解存取路径。
    3. 存取路径的选择以及 SQL 的操作过程由系统自动完成。
    3.面向集合的操作方式
    1. 非关系数据模型采用面向记录的操作方式,操作对象是一条记录
    2. SQL 采用集合操作方式:
      ① 操作对象、查找结果可以是元组的集合 ②一次插入、删除、更新操作的对象可以是元组的集合
    4.以同一种语法结构提供多种使用方式
    1. SQL 是独立的语言 能够独立地用于联机交互的使用方式
    2. SQL 又是嵌入式语言 SQL 能够嵌入到高级语言(例如 C,C++,Java)程序中,供程序员设计程序时使用
    5.语言简单,易学易用

    语言简洁,易学易用。尽管 SQL 的功能很强,但语言十分简洁,核心功能只用了 9 个动词。SQL 的语法接近英语口语,所以,用户很容易学习和使用。

    SQL 语言的动词

    SQL 功 能动 词
    数 据 查 询SELECT
    数 据 定 义CREATE,DROP,ALTER
    数 据 操 纵INSERT,UPDATE,DELETE

    数 据 控 制 | GRANT,REVOKE

    三、SQL 语言基本概念

    1.SQL 支持关系数据库三级模式结构

    在这里插入图片描述 ##### 2.结构化查询语言包含 6 个部分:

    1. 数据查询语言(DQL:Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字 SELECT 是 DQL(也是所有 SQL)用得最多的动词,其他 DQL 常用的保留字有 WHERE,ORDER BY,GROUP BY 和 HAVING。这些 DQL 保留字常与其它类型的 SQL 语句一起使用。
    2. 数据操作语言(DML:Data Manipulation Language):其语句包括动词 INSERT、UPDATE 和 DELETE。它们分别用于添加、修改和删除。
    3. 事务控制语言(TCL):它的语句能确保被 DML 语句影响的表的所有行及时得以更新。包括 COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
    4. 数据控制语言(DCL):它的语句通过 GRANT 或 REVOKE 实现权限控制,确定单个用户和用户组对数据库对象的访问。某些 RDBMS 可用 GRANT 或 REVOKE 控制对表单个列的访问
    5. 数据定义语言(DDL):其语句包括动词 CREATE,ALTER 和 DROP。在数据库中创建新表或修改、删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。
    6. 指针控制语言(CCL):它的语句,像 DECLARE CURSOR,FETCH INTO 和 UPDATE WHERE CURRENT 用于对一个或多个表单独行的操作。

    查询和更新指令构成了 SQL 的 DML 部分:

    SELECT - 从数据库表中获取数据UPDATE - 更新数据库表中的数据DELETE - 从数据库表中删除数据INSERT INTO - 向数据库表中插入数据SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

    SQL 中最重要的 DDL 语句:

    CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改数据库CREATE TABLE - 创建新表ALTER TABLE - 变更(改变)数据库表DROP TABLE - 删除表CREATE INDEX - 创建索引(搜索键)DROP INDEX - 删除索引

    3.数据库中常用的概念
    1. 模式:基本表的集合定义为 SQL 模式。一个 SQL 模式(即"数据库模式")由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表、视图、索引等)的定义。
    2. 索引
    3. 视图

    视图与表的异同:

    1. 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改。
    2. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
    3. 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

    视图可以在以下几个方面使程序与数据独立:

    1. 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。
    2. 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。
    3. 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。
    4. 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。



    ## 首先给出的简单安装方式,文末给出标准的安装方式。第一步下载我的压缩包链接https://pan.baidu.com/s/1EE40dU0j2U1d-bAfj7TeVA 提取码:n25c 复制这段内容后打开百度网盘手机 App,操作更方便哦第二步解压到D 盘都放进来看图。在这里插入图片描述第三步打开MySQL 文件夹,就是D 盘的那个 在这里插入图片描述第四步管理员身份运行环境变量.bat在这里插入图片描述在这里插入图片描述完事了。输入mysql -uroot -p试一下密码不用输入,直接跳过。在这里插入图片描述

    安装完成





    问题解决:

    如果不行的话,任务管理(ctrl+alt+del)找一下服务

    在这里插入图片描述在这里插入图片描述

    根目录找到 my.ini在这里插入图片描述删除第二行

    [mysqld]# skip-grant-tables# 如果不输入密码报错,删除上一句的“#”然后参考前面修改密码。# 设置 3306 端口port=3306# 设置 mysql 的安装目录basedir=D:\\Mysql\\mysql-8.0.19-winx64# 设置 mysql 数据库的数据的存放目录datadir=D:\\Mysql\\mysql-8.0.19-winx64\\data# 允许最大连接数max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为 UTF8character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置 mysql 客户端默认字符集default-character-set=utf8[client]# 设置 mysql 客户端连接服务端时默认使用的端口port=3306default-character-set=utf8

    再试一试

    如果出现的 vcruntime140.dll 缺失

    是因为没有 VC++的支持去官网下载一个https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads


    如果 mysql 服务不能正常运行,打开后直接停止。

    大概率是 data 初始化失败,即没有完成操作就关闭了.bat请删除 mysql 根目录下的 data 文件夹,然后手动在运行 cmd 运行以下代码。

    mysqld --initialize-insecure --user=mysqlmysqld -install

    workbench 的安装

    workbench 是 mysql 官方的数据库管理软件,相对来说功能很全。

    下载链接是这个 https://dev.mysql.com/downloads/file/?id=492434直接点击就可以下载,因为下载比较忙,可以拷贝到迅雷下载

    修改密码

    最后最后,因为我的配置是跳过了密码所以直接回车就可以,但是如果需要的话,参考一下改密码。1.运行 cmd,输入mysql -u root -p 出现 password: 直接回车可以进入。

    2 进入 mysql 数据库:

    use mysql

    提示Database changed

    3 给 root 用户设置新密码:

    update user set password=password("123456") where user="root";

    别忘了标点

    提示:Query OK, 1 rows affected (0.04 sec)Rows matched: 1 Changed: 1 Warnings: 0

    4.刷新数据库

    flush privileges;

    提示:Query OK, 0 rows affected (0.01 sec)

    5 退出 mysql:

    exit

    然后:

    根目录找到 my.ini在这里插入图片描述删除第二行在这里插入图片描述

    问题通解

    如果问题还没有解决,那打开日志文件。在数据根目录下的 data 里面,有一个.err文件打开它,你就知道真正不能运行的原因是什么。

    mysql-8.0.19-winx64\data\计算机名.err

    环境变量.bat

    @echo offset My_PATH=D:\MySQL\mysql-8.0.19-winx64\bin  goto start      =  上面的 path 改成自己 mysql 的安装目录下的 bin 的路径     :startset PATH=%PATH%;%My_PATH%reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "Path" /t REG_EXPAND_SZ /d "%PATH%" /fmysqld --initialize-insecure --user=mysqlmysqld -install goto start2      =  mysql 的初始化数据库,和安装     :start2pause

    如果运行出现问题,删除 goto 语句即可

    my.ini

    [mysqld]# skip-grant-tables# 如果不输入密码报错,删除上一句的“#”然后参考前面修改密码。# 设置 3306 端口port=3306# 设置 mysql 的安装目录basedir=D:\\Mysql\\mysql-8.0.19-winx64# 设置 mysql 数据库的数据的存放目录datadir=D:\\Mysql\\mysql-8.0.19-winx64\\data# 允许最大连接数max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为 UTF8character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置 mysql 客户端默认字符集default-character-set=utf8[client]# 设置 mysql 客户端连接服务端时默认使用的端口port=3306default-character-set=utf8

    标准的安装方式如下:

    1. 安装 mysql(或者解压)
    2. 环境变量
    3. 配置 my.ini (即将上文中的 my.ini 放置到 MySQL 根目录
    4. 初始化数据库(cmd 运行mysqld --initialize-insecure --user=mysql)
    5. 安装数据库(cmd 运行mysqld -install

    -----------------

    一、关系

    • 单一的数据结构----关系现实世界的实体以及实体间的各种联系均用关系来表示
    • 逻辑结构----二维表从用户角度,关系模型中数据的逻辑结构是一张二维表
    • 建立在集合代数的基础上
    1.域(Domain)

    域是一组具有相同数据类型的值的集合。

    2.笛卡尔积(Cartesian Product)

    笛卡尔积在 SQL 中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合。

    简单来说就是两个集合相乘的结果,集合 A 和集合 B 中任意两个元素结合在一起,也叫交叉连接。集合 A{a1,a2,a3} 集合 B{b1,b2},笛卡尔积 A × B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}

    • 所有域的所有取值的一个组合
    • 不能重复
    1)元组(Tuple)

    笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个 n 元组(n-tuple)或简称元组(Tuple)

    2)分量(Component)

    笛卡尔积元素(d1,d2,…,dn)中的每一个值 di 叫作一个分量

    3)基数(Cardinal number)

    若 Di(i=1,2,…,n)为有限集,其基数为 mi(i=1,2,…,n),则 D1×D2×…×Dn 的基数 M 为:在这里插入图片描述

    4)笛卡尔积的表示方法

    笛卡尔积可表示为一个二维表表中的每行对应一个元组,表中的每列对应一个域

    3.关系(Relation)
    1)关系

    D1×D2×…×Dn 的子集叫作在域 D1,D2,…,Dn 上的关系,表示为 R(D1,D2,…,Dn)R:关系名n:关系的目或度(Degree)

    2)元组

    关系中的每个元素是关系中的元组,通常用 t 表示。

    3) 单元关系与二元关系

    当 n=1 时,称该关系为单元关系(Unary relation)或一元关系当 n=2 时,称该关系为二元关系(Binary relation)

    4) 关系的表示

    关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域

    5)属性

    关系中不同列可以对应相同的域为了加以区分,必须对每列起一个名字,称为属性(Attribute)n 目关系必有 n 个属性

    6) 码

    候选码(Candidate key)若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码简单的情况:候选码只包含一个属性全码(All-key)最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)主码若一个关系有多个候选码,则选定其中一个为主码(Primary key)主属性候选码的诸属性称为主属性(Prime attribute)不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute)

    7) 三类关系

    基本关系(基本表或基表)实际存在的表,是实际存储数据的逻辑表示查询表查询结果对应的表视图表由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

    8)基本关系的性质

    ① 列是同质的(Homogeneous)② 不同的列可出自同一个域:其中的每一列称为一个属性;不同的属性要给予不同的属性名③ 列的顺序无所谓,,列的次序可以任意交换④ 任意两个元组的候选码不能相同⑤ 行的顺序无所谓,行的次序可以任意交换⑥ 分量必须取原子值在这里插入图片描述

    二、关系模式

    1.什么是关系模式
    • 关系模式(Relation Schema)是型
    • 关系是值
    • 关系模式是对关系的描述元组集合的结构:属性构成、属性来自的域、属性与域之间的映象关系元组语义以及完整性约束条件属性间的数据依赖关系集合
    2.定义关系模式

    R(U,D,DOM,F)R——关系名U——组成该关系的属性名集合D——属性组 U 中属性所来自的域DOM——属性向域的映象集合F——属性间的数据依赖关系集合

    关系模式通常可以简记为R (U)或 R (A1,A2,…,An)R: 关系名A1,A2,…,An : 属性名ps:域名及属性向域的映象常常直接说明为属性的类型、长度

    3.关系模式与关系
    1)关系模式

    对关系的描述静态的、稳定的

    2)关系

    关系模式在某一时刻的状态或内容动态的、随时间不断变化的

    3)关系模式和关系往往统称为关系

    在这里插入图片描述

    三、关系数据库

    1.关系数据库

    在一个给定的应用领域中,所有关系的集合构成一个关系数据库

    2.关系数据库的型与值
    1)关系数据库的型: 关系数据库模式对关系数据库的描述。
    2)关系数据库模式包括

    若干域的定义在这些域上定义的若干关系模式

    3)关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库

    四、关系操作

    1. 基本关系操作
    1).常用的关系操作

    查询:选择、投影、连接、除、并、交、差数据更新:插入、删除、修改查询的表达能力是其中最主要的部分选择、投影、并、差、笛卡尔基是 5 种基本操作

    2).关系操作的特点

    集合操作方式:操作的对象和结果都是集合,一次一集合的方式

    2.关系数据库语言的分类
    1).关系代数语言

    用对关系的运算来表达查询要求代表:ISBL

    2).关系演算语言:

    用谓词来表达查询要求元组关系演算语言谓词变元的基本对象是元组变量代表:APLHA, QUEL域关系演算语言谓词变元的基本对象是域变量代表:QBE

    3).具有关系代数和关系演算双重特点的语言

    代表:SQL(Structured Query Language)

    五、关系的完整性

    1.关系的三类完整性约束
    1)实体完整性和参照完整性:

    关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持

    2)用户定义的完整性:

    应用领域需要遵循的约束条件,体现了具体领域中的语义约束

    2.实体完整性
    1) 实体完整性规则(Entity Integrity)

    若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值

    • (1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
    • (2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
    • (3) 关系模型中以主码作为唯一性标识。
    • (4) 主码中的属性即主属性不能取空值。
    3.参照完整性
    1) 关系间的引用

    在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。

    2) 外码
    • (1)设 F 是基本关系 R 的一个或一组属性,但不是关系 R 的码。如果 F 与基本关系 S 的主码 Ks 相对应,则称 F 是基本关系 R 的外码
    • (2)基本关系 R 称为参照关系(Referencing Relation)
    • (3)基本关系 S 称为被参照关系(Referenced Relation) 或 目标关系(Target Relation)
    3). 参照完整性规则

    若属性(或属性组)F 是基本关系 R 的外码它与基本关系 S 的主码 Ks 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值必须为:或者取空值(F 的每个属性值均为空值)或者等于 S 中某个元组的主码值

    4) 用户定义的完整性
    • (1)针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
    • (2)关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能

    六、关系代数

    1.概述
    集合运算符含义
    -
    ×笛卡儿积
    比较运算符含义
    大于
    大于等于
    小于
    小于等于
    等于
    <> !=不等于
    专门的关系运算符含义
    $\sigma$选择
    $\pi$投影
    $\bowtie$连接
    ÷
    逻辑运算符含义
    $\wedge$
    $\vee$
    2.传统的集合运算

    具有相同的目 n(即两个关系都有 n 个属性)相应的属性取自同一个域

    1)R∪S

    仍为 n 目关系,由属于 R 或属于 S 的元组组成R∪S ={t|t∈R∨t ∈S}

    2)R - S

    仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成R -S = { t|t∈R∧t∉S }

    3)R∩S

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

    4)R×S

    列:(n+m)列元组的集合元组的前 n 列是关系 R 的一个元组后 m 列是关系 S 的一个元组行:k1×k2 个元组R×S = {tr⌒ts |tr∈R ∧ ts∈S }

    3.关系运算

    几个重要记号在这里插入图片描述

    1)专门的关系运算

    1、选择(selection):

    选择运算是单目运算,它从一个关系 R 中选择出满足给定条件的所有元组,并同 R 具有相同的结构。关系 R 的选择运算是从关系 R 中选择满足指定条件(用 F 表示)的元组构成的新关系.换言之,选择运算的结果是一个表的水平方向的子集,是从行的角度进行的运算。关系 R 的选择运算记为:σF(R)={t|t∈R∧F(t)= ‘真’}。F:选择条件,是一个逻辑表达式,基本形式为: $X1θY1$在这里插入图片描述

    2、投影(projection):

    投影运算也是单目运算,它从一个关系 R 所有属性中选择某些指定属性,组成一个新的关系。选择运算选取关系的某些行,而投影运算选取关系的某些列,是从一个关系出发构造其垂直子集的运算。投影操作主要是从列的角度进行运算,但投影之后不仅取消可原关系中的某些列,而且还可能取消某些元组(避免重复行)在这里插入图片描述

    3、连接(join):

    连接运算是关系的二目运算.关系 R 与关系 S 的连接运算是从两个关系的广义笛卡尔积中选取属性间满足一定条件(称为连接条件,记为 AθB)的元组形成一个新关系。在这里插入图片描述①等值连接

    等值连接是从关系 R 与 S 的广义笛卡尔积中选取 A、B 属性相等的那些元组,按照属性相同的行将两(或以上)张表元组匹配连接;举个例子ID_Name 表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    SELECT * FROM ID_Name N,ID_MingZhu M WHERE N.ID=M.ID;
    ID_Name.IDNameID_MingZhu.IDMingZhu
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传
    ② 自然连接

    自然连接是特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。

    举个例子:ID_Name 表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    SELECT * FROM ID_Name N natural join ID_MingZhu M ON N.ID=M.ID;
    ID_Name.IDNameMingZhu
    3猪八戒西游记
    4孙悟空西游记
    5沙和尚西游记
    7唐三藏西游记
    8武松水浒传

    ③ 左外连接将返回右表的所有行。如果左表的某行在右表中没有匹配行,则将为右表返回空值左连接:例子:ID_Name 表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N left join ID_MingZhu M ON N.ID=M.ID;
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    1大好人NULLNULL
    2大坏蛋NULLNULL
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传

    ④ 右外连接 将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值; 例子

    ID_Name 表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N right join ID_MingZhu M ON N.ID=M.ID;
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传
    NULLNULL9红楼梦
    • 全外连接。左表和右表都不做限制,所有的记录都显示,两表不足的地方用 null 填充

    例子 ID_Name 表

    IDName
    1大好人
    2大坏蛋
    3猪八戒
    4孙悟空
    5沙和尚
    7唐三藏
    8武松

    ID_MingZhu 表

    IDMingZhu
    3西游记
    4西游记
    5西游记
    7西游记
    8水浒传
    9红楼梦
    SELECT * FROM ID_Name N full join ID_MingZhu M ON N.ID=M.ID;
    ID_Name.IDNameID_MingZhu.IDMingZhuNu
    1大好人NULLNULL
    2大坏蛋NULLNULL
    3猪八戒3西游记
    4孙悟空4西游记
    5沙和尚5西游记
    7唐三藏7西游记
    8武松8水浒传
    NULLNULL9红楼梦

    4、除

    给定关系 R (X,Y) 和 S (Y,Z),其中 X,Y,Z 为属性组。R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自相同的域集。R 与 S 的除运算得到一个新的关系 P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上分量值 x 的象集 Yx 包含 S 在 Y 上投影的集合,记作:R÷S = {tr [X] | tr ∈ R∧πY (S) ⊆ Yx }Yx:x 在 R 中的象集,x = tr[X]

    除操作是同时从行和列角度进行运算 例子: 在这里插入图片描述在这里插入图片描述




    E-R 图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”或圆角矩形表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

    用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n 或 m:n)。中文名实体-联系图外文名 Entity Relationship Diagram 简称 E-R 图类别概念模型

    在 ER 图中有如下四个成分:

    • 矩形框: 表示实体,在框中记入实体名。
    • 菱形框: 表示联系,在框中记入联系名。
    • 椭圆形框: 表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
    • 连线: 实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写 1; 对于一对多联系,要在一的一方写 1,多的一方写 N;对于多对多关系,则要在两个实体连线方向各写 N,M。

    上一张图

    简单点说就是

    • 方框表示实体

    • 椭圆表示属性

    • 菱形表示联系

    • 连接实体要用菱形框并且在菱形框两侧的直线标注关系的特点

      • 一对一:1 --- 1
      • 一对多:1 --- n
      • 多对一:n--- 1
      • 多对多:n --- n

    在这里插入图片描述

    一、数据查询的语句格式

     SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> ....] --可以选择多个列FROM <表名或视图名>[, <表名或视图名> ....]--可以选择多个表或视图[ WHERE <条件表达式> ]  --查询什么条件的数据[ GROUP BY <列名 1> [ HAVING <条件表达式> ] ]  --按什么条件分组[ ORDER BY <列名 2> [ ASC|DESC ] ];--按什么条件排序
    • SELECT 子句:指定要显示的属性列
    • FROM 子句:指定查询对象(基本表或视图)
    • WHERE 子句:指定查询条件
    • GROUP BY 子句: 细化聚集函数的作用对象
      • 未对查询结果分组,聚集函数将作用于整个查询结果
      • 对查询结果分组后,聚集函数将分别作用于每个组
      • 作用对象是查询的中间结果表
      • 按指定的一列或多列值分组,值相等的为一组

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。

    例子:BILL 表

    CustomerQuantityDate
    张三102020-3-19
    李四292020-3-19
    王五92020-3-19
    张三212020-3-19
    王五192020-3-20
    执行SELECT Customer ,SUM(Quantity) FROM BILL GROUP BY Customer
    我们会得到如下表
    CustomerQuantity
    ----
    张三312020-3-19
    李四292020-3-19
    王五282020-3-19
    如果我们不加 GROUP BY 会得到这样一个表
    CustomerQuantity
    ----
    张三882020-3-19
    李四882020-3-19
    王五882020-3-19
    张三882020-3-19
    王五882020-3-20
    当然 GROUP BY 也可以按多个列分组,即两个都想同时才会被分到一个组
    还是对 BILL 表操作 SELECT Customer ,SUM(Quantity) FROM BILL GROUP BY Customer,Date
    我们会得到如下表
    CustomerQuantity
    ----
    张三312020-3-19
    李四292020-3-19
    王五92020-3-19
    王五192020-3-20

    • HAVING 短语:筛选出只有满足指定条件的组例子:BILL 表

      CustomerQuantityDate
      张三102020-3-19
      李四292020-3-19
      王五92020-3-19
      张三212020-3-19
      王五192020-3-20
      我们查询购买总量小于 30 的 Customer
      sqlSELECT Customer,SUM(Quantity) From BILL GROUP BY CustomerHAVING SUM(Quantity)>30
      我们会得到如下:
      CustomerQuantity
      ----
      张三31
    • ORDER BY 子句:对查询结果表按指定列值的升序或降序排序

      还是对 BILL 表操作
    Customer
    Quantity
    Date
    张三
    10
    2020-3-19
    李四
    29
    2020-3-19
    王五
    9
    2020-3-19
    张三
    21
    2020-3-19
    王五
    19
    2020-3-20
    我们想按照购买总数量排列查询结果
    SELECT Customer ,SUM(Quantity) FROM BILL
    GROUP BY CustomerORDER BY SUM(Quantity) ASC

    我们会得到如下表

    CustomerQuantity王五28李四29张三31 ORDER BY 子句
    • 可以按一个或多个属性列排序
    • 升序:ASC;降序:DESC;缺省值为升序
    • 当排序列含空值时
    • ASC:排序列为空值的元组最后显示
    • DESC:排序列为空值的元组最先显示

    二、单表查询

    刚才在介绍那几个保留字的时候,我们简单的举了几个查询的例子,现在我们详细系统的介绍一下,有点重复,但是比较基础,加深印象。

    1.选择表中的若干列查询

    选择某几列查询:

    SELECT <列 1>,<列 2>......FROM <数据表>;

    选择全部列查询:当然我们可以,把所有的列一一列举,我们也可以使用SELECT *

    SELECT  *FROM <数据表>; 

    举例: 还是 BILL 表

    CustomerQuantityDate
    张三102020-3-19
    李四292020-3-19
    王五92020-3-19
    张三212020-3-19
    王五192020-3-20
    SELECT Customer From BILL

    得到如下表| Customer|
    |--|--|--|| 张三|10 |2020-3-19| 李四| 29 |2020-3-19| 王五| 9 |2020-3-19| 张三| 21 |2020-3-19| 王五|19 |2020-3-20执行:

    SELECT Customer ,Quantity,Date FROM BILL--或者SELECT * FROM BILL

    得到如下结果

    CustomerQuantityDate
    张三102020-3-19
    李四292020-3-19
    王五92020-3-19
    张三212020-3-19
    王五192020-3-20
    2.查询经过计算的值

    之前我们给出了 SELECT 标准格式:

     SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> ....] --可以选择多个列FROM <表名或视图名>[, <表名或视图名> ....]--可以选择多个表或视图[ WHERE <条件表达式> ]  --查询什么条件的数据[ GROUP BY <列名 1> [ HAVING <条件表达式> ] ]  --按什么条件分组[ ORDER BY <列名 2> [ ASC|DESC ] ];--按什么条件排序

    其中目标表达式可以为:

    • 算术表达式
    • 字符串常量
    • 函数
    • 列别名

    例子:Students 表

    NameBirth
    李勇1999
    刘晨1997
    王敏1996
    张立1998

    我们查询每个人的年龄:

    SELECT NAME,2020-Birth    FROM Student;

    得道如下的查询结果:

    Name2020-Birth
    李勇21
    刘晨23
    王敏24
    张立22

    在查询中添加新的字符串列例子

    NameBirth
    李勇1999
    刘晨1997
    王敏1996
    张立1998
    SELECT  Name,'Birth is:',BirthFROM Students ;

    结果:

    Name'Birth is:'Birth
    李勇Birth is:1999
    刘晨Birth is:1997
    王敏Birth is:1996
    张立Birth is:1998

    查询中显示列别名例子Students 表

    NameBirth
    李勇1999
    刘晨1997
    王敏1996
    张立1998
    SELECT  Name 姓名, Birth 生日FROM Students ;

    结果

    姓名生日
    李勇1999
    刘晨1997
    王敏1996
    张立1998
    3.选择表中的若干元组(行)

    元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。

    DISTINCT 语句:指定 DISTINCT 关键词,去掉表中重复的行 例子:BILL 表

    CustomerQuantityDate
    张三102020-3-19
    李四292020-3-19
    王五92020-3-19
    张三212020-3-19
    王五192020-3-20

    我们执行以下语句查看区别:

    SELECT DISTINCT Customer FROM BILL 

    | Customer|
    |--|--|--|| 张三|10 |2020-3-19| 李四| 29 |2020-3-19| 王五| 9 |2020-3-19

    如果不加 DISTINCT,结果如下: | Customer|
    |--|--|--|| 张三|10 |2020-3-19| 李四| 29 |2020-3-19| 王五| 9 |2020-3-19| 张三| 21 |2020-3-19| 王五|19 |2020-3-20

    作用显而易见

    查询满足条件的元组:

    常用的查询条件谓词
    比 较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
    确定范围BETWEEN AND,NOT BETWEEN AND
    确定集合IN,NOT IN
    字符匹配LIKE,NOT LIKE
    空 值IS NULL,IS NOT NULL
    多重条件(逻辑运算)AND,OR,NOT

    这次我们多举几个例子:Student 表

    SnameSageSdeptSgradeSsex
    张三18C.S801
    李四18C.S720
    王五17I.C.S630
    韩六18C.S981
    周七19I.C.S340
    赵八20C.S601
    以下所有查询的基本表都默认为 Student 表

    例一: 查询计算机科学系全体学生的名单

    SELECT Sname    FROM Student    WHERE Sdept='C.S.'; 

    结果:|Sname| |--|--|--|--|--||张三|18|C.S|90|1|李四|18|C.S|90|0|韩六|18|C.S|90|1|赵八|20|C.S|90|1

    例二: 查询所有年龄在 18 岁以上的学生姓名及其年龄。

    SELECT Sname,Sage FROM    Student    WHERE Sage>18;

    结果|Sname|Sage|--|--|--|--|--||周七|19|I.C.S|90|0|赵八|20|C.S|90|1

    BETWEEN…AND…语句例三: 查询年龄在 18~20 岁(包括 18 岁和 20 岁)之间的学生的姓名、系别和年龄

    SELECT Sname,Sage,SdeptFROM     StudentWHERE   Sage BETWEEN 18 AND 20; 

    结果|Sname|Sage|Sdept||--|--|--|--|--||张三|18|C.S|80|1|李四|18|C.S|72|0|韩六|18|C.S|98|1|周七|19|I.C.S|34|0|赵八|20|C.S|60|1例四: 查询年龄在 18~20 岁(包括 18 岁和 20 岁)之间的学生的姓名、系别和年龄

    SELECT Sname,Sage,SdeptFROM     StudentWHERE   Sage NOT BETWEEN 18 AND 20; 

    结果|Sname|Sage|Sdept||--|--|--|--|--||王五|17|I.C.S|63|0

    IN/NOT IN 语句例四: 查询年龄为 17 和 20 岁的学生姓名,年龄及专业

    SELECT Sname,Sage,SdeptFROM     StudentWHERE   Sage IN (17,20);

    结果|Sname|Sage|Sdept||--|--|--|--|--||王五|17|I.C.S|63|0|赵八|20|C.S|60|1

    例五: 查询年龄不为 17 和 20 岁的学生姓名,年龄及专业

    SELECT Sname,Sage,SdeptFROM     StudentWHERE   Sage NOT IN (17,20);

    |Sname|Sage|Sdept||--|--|--|--|--||张三|18|C.S|80|1|李四|18|C.S|72|0|韩六|18|C.S|98|1|周七|19|I.C.S|34|0

    字符串匹配:语法格式:谓词: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]<匹配串>:指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时, 可以用 = 运算符取代 LIKE 谓词 用 != 或 < >运算符取代 NOT LIKE 谓词

    通配符:

    通配符描述
    %代表任意长度(长度可以为 0)的字符串
    _仅替代一个字符
    [charlist]字符列中的任何单一字符
    [^charlist]或者[!charlist]不在字符列中的任何单一字符
    例:
    a%b 表示以 a 开头,以 b 结尾的任意长度的字符串。如 acb,addgb,ab 等都满足该匹配串
    a_b 表示以 a 开头,以 b 结尾的长度为 3 的任意字符串。如 acb,afb 等都满足该匹配串
    ESCAPE 短语:
    当用户要查询的字符串本身就含有 % 或 _ 时,要使用 ESCAPE '<换码字符>' 短语对通配符进行转义。

    类型 1: 匹配串为固定字符串
    查询学号为 200215121 的学生的详细情况。

      SELECT *         FROM  Student       WHERE  Sno LIKE ‘200215121';

    等价于:

      SELECT  *   FROM  Student   WHERE Sno = ' 200215121 ';

    类型 2: 匹配串为含通配符的字符串

    查询所有姓刘学生的姓名、学号和性别。

      SELECT Sname,Sno,Ssex  FROM Student  WHERE  Sname LIKE ‘刘%’;

    查询姓"欧阳"且全名为三个汉字的学生的姓名。

      SELECT Sname  FROM   Student  WHERE  Sname LIKE '欧阳__';

    查询名字中第 2 个字为"阳"字的学生的姓名和学号。

      SELECT Sname,Sno  FROM Student  WHERE Sname LIKE ‘__阳%’;

    查询所有不姓刘的学生姓名。

       SELECT Sname,Sno,Ssex      FROM Student      WHERE Sname NOT LIKE '刘%';

    类型 3: 使用换码字符将通配符转义为普通字符

    查询 DB_Design 课程的课程号和学分。

      SELECT Cno,Ccredit  FROM Course  WHERE Cname LIKE 'DB\_Design' ESCAPE '\‘;

    查询以"DB_"开头,且倒数第 3 个字符为 i 的课程的详细情况。

      SELECT  *  FROM   Course  WHERE  Cname LIKE  'DB\_%i_ _' ESCAPE ' \ ‘;

    ESCAPE '\' 表示“ \” 为换码字符 学过 C++的大家都知道\n 代表换行,\为转义字符。这里是说,我们通过 ESCAPE 语句将\定义为换码字符(可以理解为转义字符)

    类型 4: 涉及空值的查询

    谓词:IS NULL 或 IS NOT NULL 而且 “IS” 不能用 “=” 代替。如果某些同学的信息不完整,比如在某个表中手机号未填写,那这位同学的元组中的手机号这一属性为 NULL;要想查出这类同学的姓名我们可以执行以下操作

    Student 表

    SnameSageSdeptSgradeSsexSpho
    张三18C.S80112345678
    李四18C.S72012345679
    王五17I.C.S63012345680
    韩六18C.S981NULL
    周七19I.C.S340234234234
    赵八20C.S601NULL
    SELECT Sname,Spho From StudentWHERE Spho IS NULL;

    |Sname| Spho||--|--|--|--|--|--|韩六|NULL|赵八|NULL

    类型 5: 多重条件查询逻辑运算符:AND:且 连接前后两个条件都成立时表达式为真OR:或 连接前后表达式有一个为真时表达式为真AND 优先级大于 OR,可以加括号进行复合运算,进而改变优先级。

    常用的查询条件谓词
    比 较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
    确定范围BETWEEN AND,NOT BETWEEN AND
    确定集合IN,NOT IN
    字符匹配LIKE,NOT LIKE
    空 值IS NULL,IS NOT NULL
    多重条件(逻辑运算)AND,OR,NOT
    可以连接上面表中的所有运算符,只要保证最后得到表达可以分辨真假有意义即可。

    这个比较简单我们举一个例子:查询 18 岁的学生且属于计算机科学专业的姓名,年龄,专业

    SnameSageSdeptSgradeSsexSpho
    张三18C.S80112345678
    李四18C.S72012345679
    王五17I.C.S63012345680
    韩六18C.S981NULL
    周七19I.C.S340234234234
    赵八20C.S601NULL
    SELECT Sname,Sage,Sdept FROM StudentsWHERE Sage=18 AND Sdept='C.S.';

    |Sname|Sage|Sdept| |--|--|--|--|--|--|张三|18|C.S|80|1|12345678|李四|18|C.S|72|0|12345679|韩六|18|C.S|98|1|NULL

    4.聚集函数

    计数SQL COUNT(columnname) 语法COUNT(columnname) 函数返回指定列的值的数目(NULL 不计入):

    SELECT COUNT(column_name) FROM table_name

    SQL COUNT() 语法COUNT() 函数返回表中的记录数:

    SELECT COUNT(*) FROM table_name

    SQL COUNT(DISTINCT columnname) 语法COUNT(DISTINCT columnname) 函数返回指定列的不同值的数目:

    SELECT COUNT(DISTINCT column_name) FROM table_name

    例:查询学生总人数。

    SELECT COUNT(*)FROM  Student;

    查询选修了课程的学生人数。

     SELECT COUNT(DISTINCT Sno) FROM SC

    计算总和

    SQL SUM() 语法

    SELECT SUM(column_name) FROM table_name

    开头举过例子,这里就不再重复赘述。

    计算平均值

    AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

    SQL AVG() 语法

    SELECT AVG(column_name) FROM table_name

    计算 1 号课程的学生平均成绩。

      SELECT AVG(Grade)  FROM SC  WHERE Cno= ‘ 1 ’;

    最大最小值

    MAX() 函数和 MIN()函数MAX 函数返回一列中的最大值,MIN 函数返回一列中的最小值。NULL 值不包括在计算中。

    SQL 中的语法

    SELECT MAX(column_name) FROM table_nameSELECT MIN(column_name) FROM table_name

    MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。例:查询选修 1 号课程的学生最高分数。

       SELECT MAX(Grade)   FROM SC   WHERE Cno= ‘ 1 ’;

    阅读全文: http://gitbook.cn/gitchat/activity/5eb363bd399fe8072467d0ea

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • 1.以下面的数据库关系模式例,写出完成以下查询功能的SQL语句。(每小题2分) 关系模式如下: 学生(学号,学生姓名,性别,出生年月,出生地,专业号,班级) 简写s(s#,sname,ssex,sbirthin,placeofb,scode#,...

    Content

    更正

    应用题第8题第7小问:
    

    在这里插入图片描述

    感谢网友남산남.的指正!

    /*SQL语句基本格式:*/
    select [distinct] <目标列表达式>,......
    from <表名或视图名>
    [where<条件表达式>]
    [group by <列名1>,......]
    [having <条件表达式>]
    [order by <列名2> [desc]
    
    1.创建表:
    create table <表名>
    (<列名> <数据类型> [列级完整性约束条件],
     ......,
     [表级完整性约束条件]
    )
    2.删除表:
    drop table <表名> [cascade]
    3.建立索引:
    create [unique] index <索引名> on <表名>(<列名> [<次序>]...)
    4.删除索引:
    drop index <表名><索引名>
    5.外连接:
    左外连接:
    from 表1 left [outer] join 表2 on 条件
    右外连接:
    from 表1 right [outer] join 表2 on 条件
    完整外连接:
    from 表1 full [outer] join 表2 on 条件
    6.insert 语句格式:
    insert
    into <表名> [<属性1>,...]
    values(<常量1>,...)
    7.update语句格式:
    update <表名>
    set <列名>=<表达式>,......
    [where<条件>]
    8.delete 语句格式:
    delete
    [from]  <表名>
    [where<条件>]
    9.创建视图:
    create view <视图名> [<类名>,......]
    as
    <子查询>
    [with check option]
    10.删除视图:
    drop view <视图名> [cascade]
    
    /*重点归纳:*/
    1、判断一个属性的值是否为空值,用is null或is not null来表示。
    2、
    a.如果select子句选择列表的列,既有普通列,又有聚集函数的列,则一定要分组,
    并且把select选择列表中的普通列,全部放到group by子句的后面。
    b.如果select子句后面仅仅只有普通列,没有聚集函数的列,则不一定需要分组,
    需要分组时,select子句后面的全部普通列放到group by子句的后面。
    3.SQL语句中,列名之间用",",条件之间用and。
    4.where子句中是不能用聚集函数作为条件表达式的。
    聚集函数只能用于select子句和group by中的having子句。
    5.where子句与having短语的区别在于作用对象不同。where子句作用于基本表或视图,
    从中选择满足条件的元组。having短语作用于组,从中选择满足条件的组。
    6.delete语句删除的是表中的数据,而不是关于表的定义,删除关于表的定义用到的
    是SQL语句关键字drop。
    7.with check option表示对视图进行update、insert和delete操作时要保证更新、
    插入或删除的行满足视图定义中的谓词条件(即子查询中条件表达式,where条件)
    8.%(百分号)代表任意长度(长度可以为0)的字符串。_(下划线)代表任意单个字符。
    9.子查询的select语句中不能使用order by子句,order by子句只能对最终查询结果排序。
    10.集合操作主要包括并操作union、交操作intersect和差操作except.
    参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。
    
    /*错题再练整理:*/
    1.关系代数中的π运算符对应SQL语句中的select子句。
    2.关系代数中的σ运算符对应SQL语句中的where子句。
    3.关系代数中的×(笛卡尔积)运算符对应SQL语句中的from子句。
    4.在SQL语言中,用于删除一个视图的命令关键字是drop。
    5.在SQL语言中,用alter table语句修改表结构。
    6.在聚集函数中遇到空值时,除了COUNT(*)外,都跳过空值而去处理非空值。
    7.SQLServer中,COUNT()聚集函数里面,只能写*或者列名,不能写表达式,如
    COUNT(Ssex='女')这一写法是错误的。
    

    一、选择题

    1.SQL语言是( )的语言,易学习。
    A.过程化    B.非过程化    C.格式化    D.导航式  
    参考解答:B
    解析:(书本P77)
    高度非过程化。
      
    2.SQL语言是( )语言。
    A.层次数据库    B.网络数据库    C.关系数据库    D.非数据库 
    参考解答:C
    解析:(书本P75)
    结构化查询语言(Structured Query Ianguage,SQL)是关系数据库的标准语言。
    
    3.SQL语言具有( )的功能。
    A.关系规范化、数据操纵、数据控制    B.数据定义、数据操纵、数据控制
    C.数据定义、关系规范化、数据控制    D.数据定义、关系规范化、数据操纵 
    参考解答:B
    解析:(书本P77)
    SQL集数据定义语言、数据操纵语言、数据控制语言的功能为一体,语言风格统一。
      
    4.SQL语言具有两种使用方式,分别称为交互式SQL和( )。
    A.提示式SQL    B.多用户SQL    C.嵌入式SQL    D.解释式SQL
    参考解答:C
    解析:(书本P77,见本段代码块下方解析图片)
    SQL语言既是独立的语言,又是嵌入式语言。
     
    5.假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),
    学生选课关系是SC(S#,C#,GRADE)。要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系(  )。
    A.S      B.SC,C      C.S,SC      D.S,C,SC  
    参考解答:D
                               
    6.若用如下的SQL语句创建一个student表:
    CREATE TABLE student
    (NO Char(4) NOT NULL,
     NAME Char(8) NOT NULL,
     SEX Char(2),
     AGE tinyint
    )
    可以插入到student表中的是                    。
    A.(‘1031’,‘曾华’,男,23)    B.(‘1031’,‘曾华’,NULL,NULL)
    C.(NULL,‘曾华’,‘男’,‘23’)  D.(‘1031’,NULL,‘男’,23)  
    参考解答:B
    解析:(见本段代码块下方解析图片)
    A.男为字符类型,没加单引号。
    C.没满足“NO非空”和"AGE为tinyint数据类型"的条件。
    D.没满足“NAME非空”条件。
                                           
    7. SQL语言的数据操纵语句包括select,insert,update和delete等。
    其中最重要的,也是使用最频繁的语句是()。
    A.select    B.insert   C.update    D.delete
    参考解答:A
    
    第8到第10题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下:
    S(S#,SN,SEX,AGE,DEPT)
    C(C#,CN)
    SC(S#,C#,GRADE)
    其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。
    
    8.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SQL语句是( )
    A.
    SELECT SN,AGE,SEX 
    FROM S
    WHERE AGE>(SELECT AGE
        		FROM S
                WHERE SN='王华'
               )
    B.
    SELECT SN,AGE,SEX
    FROM S
    WHERE SN='王华'
    C.
    SELECT SN,AGE,SEX 
    FROM S
    WHERE AGE>(SELECT AGE
                WHERE SN='王华'
               )
    D.
    SELECT SN,AGE,SEX 
    FROM S
    WHERE AGE>王华.AGE
    参考解答:A
    
    9、检索选修课程“C2”的学生中成绩最高的学生的学号。正确的SQL语句是          。
    A.
    SELECT S# 
    FORM SC    
    WHERE C#='C2'AND GRAD>=(SELECT GRADE 
       					     FORM SC
                    		 WHERE C#='C2'
                    		 )
    B.
    SELECT S# 
    FORM SC
    WHERE C#='C2' AND GRADE IN(SELECT GRADE
     						      FORM SC
                     		      WHERE C#='C2'
                     		      )
    C.
    SELECT S# 
    FORM SC
    WHERE C#='C2' AND GRADE NOT IN(SELECT GRADE
       							   FORM SC
                                   WHERE C#='C2'
                                   )
    D.
    SELECT S# 
    FORM SC
    WHERE C#='C2'AND GRADE>=ALL(SELECT GRADE 
       							 FORM SC
                   			     WHERE C#='C2'
                   			     ) 
    参考解答:D
                   					  
    10、检索学生姓名及其所选修课程的课程号和成绩。正确的SQL语句是            。 
    A.
    SELECT S.SN,SC.C#,SC.GRADE
    FROM S
    WHERE S.S#=SC.S#
    B.
    SELECT S.SN,SC.C#,SC.GRADE
    FROM SC
    WHERE S.S#=SC.GRADE
    C.
    SELECT S.SN,SC.C#,SC.GRADE
    FROM S,SC
    WHERE S.S#=SC.S#
    D.
    SELECT S.SN,SC.C#,SC.GRADE
    FROM S.SC
    参考解答:C
    
    11.视图是一个“虚表”,视图的构造基于(    )
    A.基本表     	B.视图   
    C.基本表或视图   D.数据字典
    参考解答:C
    解析:(书本P78,见本段代码块下方解析图片)
    视图是从一个或几个基本表导出的表。
    视图在概念上与基本表等同,用户可以在视图上再定义视图。
    
    12.关系代数中的π运算符对应SQL语句中的以下哪个子句?(   )
    A.SELECT	B.FROM
    C.WHERE	D.GROUP BY
    参考解答:A
    
    13.关系代数中的σ运算符对应SQL语句中的以下哪个子句?(   )
    A.SELECT	B.FROM
    C.WHERE	D.GROUP BY
    参考解答:C
    
    14.关系代数中的×(笛卡尔积)运算符对应SQL语句中的以下哪个子句?(   )
    A.SELECT	B.FROM
    C.WHERE	D.GROUP BY
    参考解答:B
    
    15.在SQL的排序子句:ORDER BY 总分 DESC, 英语 DESC 表示(  )
    A. 总分和英语分数都是最高的在前面
    B. 总分和英语分数之和最高的在前面
    C. 总分高的在前面,总分相同时英语分数高的在前面
    D. 总分和英语分数之和最高的在前面,相同时英语分数高的在前面
    参考解答:C
    
    16.使用查询语句:
    SELECT STUDENT.学号, STUDENT.姓名, SUM(分数) 
    FROM STUDENT, GRADE
    WHERE STUDENT.学号=GRADE.学号
    GROUP BY STUDENT.学号, STUDENT.姓名
    查询结果是()
    A.按学号分类的每个学生所有课程成绩的总分
    B.按学号分类的每个学生各课程成绩
    C.全体学生的各课程分类的成绩总分
    D.所有学生的所有课程成绩总分
    参考解答:A
    
    17.在T-SQL语言中,用于删除一个视图的命令的关键字是()
    A. DELETE    B. DROP   C. CLEAR  D. REMOVE
    参考解答:B
    解析:(书本P124)
    删除视图语句格式:
    drop view <视图名> [cascade]
    
    18. T-SQL语言的GRANT和REMOVE语句主要是用来维护数据库的()
    A.完整性   B.可靠性    C.安全性    D.一致性
    参考解答:C
    解析:(书本P141,见本段代码块下方解析图片)
    
    19.SQL语言中,实现数据检索的语句是( )。
    A.SELECT      B.INSERT
    C.UPDATE      D.DELETE
    参考解答:A
    
    20.下列SQL语句中,修改表结构的是( )。
    A.ALTER       B.CREATE
    C.UPDATE      D.INSERT
    参考解答:A
    解析:(书本P85)
    SQL语言中用alter table语句修改基本表。
    
    21. 用于实现数据存取安全性的SQL语句是( )
    A.CREATE TABLE		B.COMMIT	
    C.GRANT和REVOKE 	D.ROLLBACK
    参考解答:C
    

    题4解析图片:
    在这里插入图片描述

    题6解析图片:
    在这里插入图片描述

    题11解析图片:
    在这里插入图片描述

    题18解析图片:
    在这里插入图片描述

    二、应用题

    在这里插入图片描述

    /*参考解答:*/1/*查询201002班男生的信息*/
    select *
    from s
    where class='201002' and ssex='男'2/*查询最低分大于70、最高分小于90的学生的姓名*/
    select sname
    from s,sc
    where s.s#=sc.s#
    group by sname
    having min(grade)>70 and max(grade)<903/*查询所有女生记录信息,并以班级降序排列*/
    select *
    from s
    where ssex='女'
    order by class desc4/*查询选取修数据结构课程的学生姓名及所在专业代码*/
    select sname scode#
    from s,sc,c
    where s.s#=sc.s# and sc.c#=c.c# and cname='数据结构'5/*查询至少有5名学生选修的并以3开头的课程号的平均分*/
    select c#,avg(grade)
    from sc
    where c# like '3%'
    group by c#
    having count(*)>=5
    

    在这里插入图片描述

    /*参考解答:*/1/*查询来自南京或上海的学生学号和姓名*/
    select s#,sname
    from s
    where placeofb in('南京','上海')2/*查询选修课程号为C401001的学号和成绩,并要求对查询结果按成绩降序排列,
    如果成绩相同则按学号升序排列*/
    select s#,grade
    from sc
    where c#='c401001'
    order by grade desc,s# ---或者写成order by grade desc,s# asc。3/*查询计算机科学或网络工程专业姓张的学生的信息*/
    select *
    from s,ss
    where s.scode#=ss.scode# and ssname in ('计算机科学','网络工程') and sname like '张%'4/*查询缺少了成绩的学生的学号和课程号*/
    select s#,c#
    from sc
    where grade is null5/*查询每个专业的男、女生分别有多少人数*/
    select scode#,ssex,count(*)
    from s
    group by scode#,ssex
    

    在这里插入图片描述
    在这里插入图片描述

    /*参考解答:*/1/*找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名*/
    select A#,ANAME
    from A
    where WQTY<=100 or CITY='长沙'2/*找出供应书包的商店名*/
    select ANAME
    from B,AB,A
    where B.B#=AB.B# and AB.A#=A.A# and BNAME='书包'3/*找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市(一般含有“至少”等字眼的题目,
    均为难题,考试时出现的概率较低,可跳过!)*/
    ---记满足条件的商店供应代号为X,则问题等价于不存在这样的商品,供应代号为256的商店供应了,
    ---而商店X没有供应。
    select ANAME,CITY
    from A
    where not exists(select *
    				from B
    				where exists(select *
    							 from AB w1
    							 where A#=256 and B#=B.B#
    							 )
    				and not exists(select *
    							  from AB w2
    							  where A#!=256 and A#=A.A# and B#=B.B#
    							  )
    

    应用题3,第3小问题解传送门

    在这里插入图片描述

    /*参考解答:*/1/*将R、S和T三个关系按关联属性建立一个视图R-S-T*/
    create view R-S-T
    as
    select R.A,B,C,S.D,E,T.F---列名之间用",",条件之间用"and"。
    from R,S,T
    where R.A=S.A and S.D=T.D
    (2/*对视图R-S-T按属性A分组后,求属性C和E的平均值*/
    select avg(C),avg(E)
    from R-S-T
    group by A
    

    在这里插入图片描述

    /*参考解答:*/1/*查询属性C>50时,R中相关联的属性B之值*/
    select B
    from R,S
    where R.A=S.A and C>502/*当属性C=40时,将R中与之相关连的属性B值修改为b4*/
    update R
    set B='b4'
    where A in (select A
    		    from S
    			where C=40
    			)
    

    在这里插入图片描述

    /*参考解答:*/1/*查询“信息系”的学生来自哪些省区*/
    select distinct PROV
    from s
    where SD='信息系'2/*按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数*/
    select SN,GR
    from S,SC
    where S.SNO=SC.SNO and SD='英语系' and CN='计算机'
    order by GR desc
    

    在这里插入图片描述
    在这里插入图片描述

    /*参考解答:*/1/*取出所有工程的全部细节*/
    select *
    from JB
    (2/*取出所在城市为上海的所有工程的全部细节*/
    select *
    from JB
    where CITY='上海'3/*取出重量最轻的零件代号*/
    select PN
    from PB
    where WEIGHT=(select min(WEIGHT)
    			  from PB
    			 )4/*取出为工程J1提供零件的供应商代号*/
    select distinct SN
    from SPJB
    where JN='J1'5/*取出为工程J1提供零件P1的供应商代号*/
    select distinct SN
    from SPJB
    where JN='J1' and PN='P1'6/*取出由供应商S1提供零件的工程名称*/
    select distinct JNAME
    from JB,SPJB
    where JB.JN=SPJB.JN and SN='S1'7/*取出供应商S1提供的零件的颜色*/
    select distinct COLOR
    from PB,SPJB
    where PB.PN=SPJB.PN and SN='S1'8/*取出为工程J1或J2提供零件的供应商代号*/
    select distinct SN
    from SPJB
    where JN in('J1','J2')9/*取出为工程J1提供红色零件的供应商代号*/
    select distinct SN
    from SPJB,PB
    where SPJB.PN=PB.PN and JN='J1' and COLOR='红色'10/*取出为所在城市为上海的工程提供零件的供应商代号*/
    select distinct SN
    from SPJB,JB
    where SPJB.JN=JB.JN and CITY='上海'11/*取出为所在城市为上海或北京的工程提供红色零件的供应商代号*/
    select distinct SN
    from JB,SPJB,PB
    where JB.JN =SPJB.JN and SPJB.PN=PB.PN and CITY in('上海','北京') and color='红色'12/*取出供应商与工程所在城市相同的供应商提供的零件代号*/
    select distinct PN
    from SB,SPJB,JB
    where SB.SN=SPJB.SN and SPJB.JN=JB.JN and SB.CITY=JB.CITY
    (13/*取出上海的供应商提供给上海的任一工程的零件的代号*/
    select distinct PN
    from SB,SPJB,JB
    where SB.SN=SPJB.SN and SPJB.JN=JB.JN and SB.CITY='上海' and JB.CITY='上海'14/*取出至少由一个和工程不在同一个城市的供应商提供零件的工程代码*/
    select distinct SPJB.JN
    from SB,SPJB,JB
    where SB.SN=SPJB.SN and SPJB.JN=JB.JN and SB.CITY!=JB.CITY
    (15/*取出上海供应商不提供任何零件的工程的代号*/
    select distinct JN
    from SPJB
    where JN not in(select distinct JN
    				from SPJB,SB
    				where SB.SN=SPJB.SN and SB.CITY='上海'
    				)16/*取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件*/
    select distinct SN
    from SPJB
    where PN in(select SPJB.PN
    			from SPJB,PB
    			where SPJB.PN=PB.PN and color='红色'
    			)17/*取出由供应商S1提供零件的工程的代号*/
    select distinct JN
    from SPJB
    where SN='S1'
    

    在这里插入图片描述
    在这里插入图片描述

    /*参考解答:*/1/*检索在北京的供应商的名称*/
    select SNAME
    from SUPPLIER
    where ADDR='北京'2/*检索发给供应商S6的订购单号*/
    select ONO
    from ORDER
    where SNO='S6'3/*检索出职工E6发给供应商S6的订购单号*/
    select ONO
    from ORDER
    where ENO='E6' and SNO='S6'4/*检索出向供应商S3发过订购单的职工的职工号和仓库号*/
    select ORDER.ENO,WHNO ---或者写成select EMPLOYEE.ENO,WHNO。
    from ORDER,EMPLOYEE
    where ORDER.ENO=EMPLOYEE.ENO and SNO='S3'5/*检索出目前与S3供应商没有联系的职工信息*/
    select *
    from EMPLOYEE
    where ENO not in(select ENO
    				 from ORDER
    				 where SNO='S3'
    				 )6/*检索出目前没有任何订购单的供应商信息*/
    select *
    from SUPPLIER
    where SNO not in(select SNO
    			     from ORDER
    			     )7/*检索出和职工E1、E3都有联系的北京的供应商信息*/
    select  *  
    from  SUPPLIER  
    where ADDR=‘北京’ 
    and (exists (select * 
    			 from ORDER 
    			 where SNO=SUPPIER.SNO and ENO=‘E1’)
    			 )
    and (exists (select * 
    			 from  ORDER 
    			 where SNO=SUPPIER.SNO and ENO=‘E3’)
    			 )8/*检索出和职工E1、E3都有联系的北京的供应商信息*/
    select EMPLOYEE.ENO,SALARY
    from EMPLOYEE,ORDER,SUPPLIER
    where EMPLOYEE.ENO=ORDER.ENO and ORDER.SNO=SUPPLIER.SNO and SNAME='华通电子公司'9/*检索出与工资在1220元以下的职工没有联系的供应商的名称*/
    select SNAME
    from SUPPLIER
    where SNO not in(select SNO
    				 from EMPLOYEE,ORDER
    				 where EMPLOYEE.ENO=ORDER.ENO and salary<1220
    				 )10/*检索出向S4供应商发出订购单的仓库所在的城市*/
    select CITY
    from WAREHOUSE,EMPLOYEE,ORDER
    where WAREHOUSE.WHNO=EMPLOYEE.WHNO and EMPLOYEE.ENO=ORDER.ENO and SNO='S4'11/*检索出在上海工作并且向S6供应商发出了订购单的职工号*/
    select ORDER.ENO ---或者写成select EMPLOYEE.ENO。
    from WAREHOUSE,EMPLOYEE,ORDER
    where WAREHOUSE.WHNO=EMPLOYEE.WHNO and EMPLOYEE.ENO=ORDER.ENO and CITY='上海' 
    and SNO='S6'12/*检索出在广州工作并且只向S6供应商发出了订购单的职工号*/
    select ENO  
    from EMPLOYEE
    WHERE WHNO in(select WHNO       and ENO in (select ENO     and not exist(select *
    			  from WAREHOUSE                from ORDER              	 from ORDER
    			  where CITY='广州'              where SNO='S6'				 where SNO!='S6' 
    			  )                 			)							 and ENO=EMPLOYEE.ENO)13/*检索出由工资多于1230元的职工向北京的供应商发出的订购单号*/
    select ONO
    from EMPLOYEE,ORDER,SUPPLIER
    where EMPLOYEE.ENO=ORDER.ENO and ORDER.SNO=SUPPLIER.SNO and SALARY>1230 
    and ADDR='北京'14/*检索出仓库的个数*/
    select COUNT(*)
    from WAREHOUSE
    (15/*检索出有最大面积的仓库信息*/
    select *
    from WAREHOUSE w1
    where w1.SIZE=(select MAX(SIZE)
    			   from WAREHOUSE w2
    			   )16/*检索出所有仓库的平均面积*/
    select AVG(SIZE)
    from WAREHOUSE
    (17/*检索出向S4供应商发出订购单的那些仓库的平均面积*/
    select AVG(SIZE)
    from WAREHOUSE,EMPLOYEE,ORDER
    where WAREHOUSE.WHNO=EMPLOYEE.WHNO and EMPLOYEE.ENO=ORDER.ENO and SNO='S4'18/*检索出每个城市的供应商个数*/
    select ADDR,COUNT(*)
    from SUPPLIER
    group by ADDR
    (19/*检索出每个仓库中工资多于1220元的职工个数*/
    select WHNO,COUNT(*)
    from EMPLOYEE
    group by WHNO
    having salary>122020/*检索出和面积最小的仓库有联系的供应商的个数*/
    select COUNT(*)
    from WAREHOUSE w1,EMPLOYEE,ORDER
    where w1.WHNO=EMPLOYEE.WHNO and EMPLOYEE.ENO=ORDER.ENO and w1.SIZE=(select MIN(SIZE)
          			   													from WAREHOUSE w2
          			  												   )21/*检索出工资低于本仓库平均工资的职工信息*/
    select *
    from EMPLOYEE e1
    where e1.SALARY<(select AVG(SALARY)
    				 from EMPLOYEE e2
    				 where e2.WHNO=e1.WHNO
    				 group by WHNO
    				 )
    

    在这里插入图片描述

    /*参考解答:*/1/*插入一个新的供应商元组(S9,智通公司,沈阳)*/
    insert
    into SUPPLIER
    values('S9','智通公司','沈阳')2/*删除目前没有任何订购单的供应商*/
    delete
    from SUPPLIER ---或者写成SUPPLIER。
    where SNO not in(select SNO
    				 from ORDER
    				 )3/*删除由在上海仓库工作的职工发出的所有订购单*/
    delete
    ORDER ---或者写成from ORDER
    where ENO in(select ENO
    			 from EMPLOYEE,WAREHOUSE
    			 where EMPLOYEE.WHNO=WAREHOUSE.WHNO and CITY='上海'
    			 )4/*北京的所有仓库增加100m^2的面积*/
    update WAREHOUSE
    set size=size+100
    where CITY='北京'5/*给低于所有职工平均工资的职工提高5%的工资*/
    update EMPLOYEE E1
    set E1.SALARY=1.05*E1.SALARY
    where E1.SALARY<(select avg(SALARY)
    				 from EMPLOYEE E2
    				 )
    

    在这里插入图片描述

    参考解答(第五题涉及到除运算,可跳过):
    

    在这里插入图片描述

    1/*检索所有选修了课程号为“C112”的课程的学生的学号和分数*/
    select 学号,分数
    from 学习
    where 课程号='C112'2/*检索“英语”专业学生所学课程的信息,包括学号、姓名、课程名和分数*/
    select 学生.学号,姓名,课程名,分数
    from 学生,学习,课程
    where 学生.学号=学习.学号 and 学习.课程号=课程.课程号 and 专业='英语'3/*检索“数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数*/
    select 学生.学号,姓名,专业,分数
    from 学生,学习,课程
    where 学生.学号=学习.学号 and 学习.课程号=课程.课程号 and 课程名='数据库原理' and 分数>904/*检索没学课程号为“C135”课程的学生信息,包括学号,姓名和专业*/
    select 学号,姓名,专业
    from 学生
    where 学号 not in (select 学号
    				  from 学习
    				  where 课程号='C135'
    				  )5/*检索至少学过课程号为’C135’和’C219’的课程的学生的信息,包括学号、姓名和专业	*/
    select 学号,姓名,专业
    from 学生
    where 学号 in(select x1.学号
    			  from 学习 x1,学习 x2
    			  where x1.学号=x2.学号 and x1.课程号='C135' and x2.课程号='C219'
    			  )		  
    

    在这里插入图片描述
    在这里插入图片描述

    /*参考解答(第一小问涉及到除运算,可跳过):*/2/*用关系代数及SQL语言写出查询语句,查询“DB”课成绩在90分以上的学生的姓名*/
    select SN
    from S,SC,C
    where S.SNO=SC.SNO and SC.CNO=C.CNO and CN='DB' and G>903/*将选修课程“DB”的学生学号,姓名建立视图SDB*/
    create view SDB
    as
    select S.SNO,SN
    from S,SC,C
    where S.SNO=SC.SNO and SC.CNO=C.CNO and CN='DB'4/*在学生选课关系SC中,把英语课的成绩提高10%*/
     update SC
     set G=1.1*G
     where CNO = (select CNO
     			  from C
     			  where CN='英语'
     			  )	
    

    在这里插入图片描述

    /*参考解答:*/1/*用SQL语句建立数据表SC,以(Sno, Cno)作为主键*/
    create table SC
    (sno char(5),
     cno char(1),
     Grade int,
     primary key(Sno,Cno)
    )2/*向Student表插入一条记录(95011, 张三, 女, 19,CS)*/
    insert
    into Student
    values('95011','张三','女',19,'CS')3/*检索计算机系(CS)所有女同学的姓名和年龄*/
    select Sname,Sage
    from Student
    where Sdept='CS' and Ssex='女'4/*检索选修了2号课程学生的学号、姓名、成绩,并按成绩降序排序*/
    select SC.Sno,Sname,Grade
    from Student,SC
    where Student.Sno=SC.Sno and Cno=2
    order by Grade desc5/*建立一个信息系(IS)所有不及格(Grade<60)学生的视图*/
    create view IS_fail
    as
    select *
    from Student,SC
    where Student.Sno=SC.Sno and Sdept='IS' and Grade <60
    
    展开全文
  • SQL语句的执行一般是先翻译关系代数再被执行的(能有效提高执行速度),所以我们有必要了解关系代数与SQL语句间的对应关系。就像高中代数由+-*/和数字组成,关系代数是由union、intersection、join等运算符和关系...
  • 数据库理论:关系代数与 SQL

    千次阅读 多人点赞 2021-01-13 23:29:44
    关系代数通过符号化的语言,来描述数据库的行为关系,相当于简化版的 SQL。比如并,交,差,笛卡尔积,除法,select 语句等等。 SQL 则是结构化查询语句,相比于关系代数,更方便被计算机识别的一种查询语言。 其余...
  • 前提说明: Student (Sno, Sname, Age, sex, place ...其中Student表中Sno主键、Study表中Sno和Cno合起来做主键、Course表中Cno主键。 一、简单查询 1、查询所有学生的学号、姓名、年龄。 select sno,sname,age ...
  • 关系代数中除法的SQL实现

    千次阅读 2020-03-05 13:21:10
    目前,SQL 没有直接实现关系除法,需要我们用低阶谓词来表达
  • 2.[单选题] 在SQL语言中授权的操作是通过( )语句实现的。 A.CREATE B.REVOKE C.GRANT D.INSERT 正确答案:C 3.[单选题] SQL语言的一体化特点是主要同( )相比较而言的。 A.操作系统命令 B.非关系模型的数据语言 C....
  • [转载] SQL习题及答案

    千次阅读 2019-04-19 20:00:39
    SQL 练习题答案 一、补充作业一、 设有三个关系: S(SNO, SNAME, AGE, SEX,Sdept) SC(SNO, CNO, GRADE) C(CNO, CNAME, TEACHER) 试用关系代数表达式表示下列查询: 1、查询学号S3学生所学课程的课程名与任课教师名...
  • 1.在视图上不能完成的操作是( )B 更新视图 在视图上定义新的表 在视图上定义新的视图 查询 2.有关系SS#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,...
  • Database之SQLSever:SQLSever数据库管理人员国家职业资格证书中级、高级考试知识点总结 目录 SQLSever数据库管理人员中级、高级考试知识点总结 基础概念 数据库的三种模型 1、网状模型数据库 2、层次...
  • 在这里,我们 SALARY 列添加 CHECK,所以工资不能零: runoobdb=# create table employee4(id int primary key not null, name text not null, age int not null, address char(50), salary real check(salary >...
  • 关系代数与sql语句

    万次阅读 多人点赞 2019-04-25 06:54:57
    关系代数定义: 关系代数是以关系运算对象的一组高级运算的集合。关系代数的运算有集合运算(集合<表>与集合<表>之间的运算)和关系运算(集合&... 并运算: R U S 差运算: R - S 交运算: R ∩ B ...
  • 投影(Π)与并(∪)的交换 然后看一个基于关系代数优化的实际 sql 案例: 有三个关系 A(a1,a2,a3,…)、B(b1,b2,b3, … )、C(a1,b1,c1,c2, … ) 有一个查询请求如下: SELECT A.a1 FROM AB,C WHERE A.a1 =...
  • SQL 语句

    2021-11-17 21:35:57
    文章目录基本概念数据库表模式行和列列行主键关系数据库数据库管理系统SQL 语句分类SQL 语法字段SELECT 语句ALL 和 DISTINCT限制返回的行ORDER BY 排序数据指定排序方向WHERE 过滤数据逻辑操作符IN 指定条件范围...
  • 最全的SQL练习题(做完你就是高手)
  • 这里写目录标题一、绪论1.1数据库的四个基本概念1.2关系模型1.3数据库系统的三级模式结构二、关系数据库2.1关系数据结构形式化定义2.2关系2.3关系模式2.4关系代数三、关系数据库标准语言SQL3.1开始:新建一个表3.2:...
  • S(SNO, SNAME, AGE, SEX,Sdept) SC(SNO, CNO, GRADE) C(CNO, CNAME, TEACHER) 试用关系代数表达式表示下列查询: -- 1、查询学号S3学生所学课程的课程名与任课教师名。 SELECT c.`name`, c.teacher FROM ...
  • 首先介绍一下什么是关系数据库,关系数据库基于关系模型,是一个或多个关系组成的集合,而关系通俗来讲就是表(由行列构成),关系模型的主要优点是具有简单的数据表示而且能易于表示复杂的查询,到目前为止,SQL语言是...
  • 每一种数据库有自己版本的SQL语言,但是为了与ANSI标准相兼容,SQL必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE等等)。 除了SQL标准之外,大部分SQL数据库程序都...
  • 数据库——SQL 中(数据查询)

    万次阅读 多人点赞 2019-05-17 20:27:47
    R.A=S.B,R.B=S.B 自然连接:特殊的等值连接。运算作用于两个关系并产生一个关系作为结果,在相同属性上进行相等比较,并投影去掉重复属性 列出属性的顺序:先是两个关系模式中的共同属性,然后是只出现在第...
  • 数据库作业——SQL总结

    千次阅读 多人点赞 2021-04-20 15:48:37
    S = { | tr  R ∧ ts S ∧ tr[A]θts[B] } ❖两类常用连接运算 ◼ 等值连接(equijoin) ⚫ θ“=”的连接运算称为等值连接 ⚫从关系R与S的广义笛卡尔积中选取AB属性值相等的那些元组,即等值连接:...
  •   提升和巩固个人现有知识水平,选择牛客网的选择题进行练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢! 存储过程(Stored Procedure) 【问】下列哪个不是存储过程的好处   A. 更加...
  • 1 、普通SQL语句可以用Exec执行 9Kp=A ' CdaFr1 eg: Select * from tableName Wsc+A: Exec('select * from tableName') #Btn( Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定
  • 图片中,式子意思是,从关系R中找到B列里等于‘d’并且C列里等于‘e’的那一行 从行的角度进行的运算 连接 连接,作用于两个关系,该运算的作用是: 从关系R和关系S的笛卡尔积中选取满足条件r的地...
  • 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析:制定逻辑查询计划(优化相关)制定物理查询...
  • sql server 总复习

    千次阅读 2020-11-11 12:02:37
    写在前面:这学期的数据库sql server结课了,为了期末的考试,把老师讲的重点汇总一下,期末考个好成绩。 第一章 数据库概述 1.1数据库系统概述 一、数据库(DB) 数据库系统(DBS) 数据库管理系统(DBMS) 数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 954
精华内容 381
关键字:

πa,b(s)怎么转换为sql语言