数据库复习——Ch3关系数据库语言SQL

关系数据库语言SQL

    • 知识点
      • SQL概述
        • SQL基本概念
        • SQL语句分类
      • SQL语言的数据类型
      • 数据定义
        • 模式定义
        • 基本表定义
          • 1. 定义基本表
          • 2. 修改基本表
          • 3. 删除基本表
        • 索引定义
          • 1. 索引的概念
          • 2. 索引分类
          • 3. 建立索引
          • 4. 删除索引
        • 视图定义
      • 数据查询
        • SELECT语句结构
        • 单表查询
        • 连接查询
        • 嵌套查询
          • 1. 带IN谓词的子查询
          • 2. 带比较谓词的子查询
        • 3.带有 EXISTS 谓词的子查询
        • 4.带有 ALL(SOME) 或 ANY 谓词的子查询
        • 集合查询
        • 视图查询
      • 数据更新
        • 数据插入
        • 数据修改
        • 数据删除
        • 视图更新
        • 更新操作与数据完整性
    • 习题3

知识点

SQL概述

SQL基本概念

SQL语言支持数据库的三级模式结构,如图
数据库复习——Ch3关系数据库语言SQL_第1张图片

  1. 基本表
  • 基本表是独立存在于数据库中的表,是“实表”。
  • 一个关系对应一个基本表,一个或多个基本表对应一个存储文件。
  1. 视图(View)
  • 视图是从一个或几个基本表(或视图)导出的表,是“虚表”。
  • 它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
  • 当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。
  1. 存储文件
  • 数据库是逻辑的,存储文件是物理的。
  • 一个基本表可以用一个或多个存储文件存储,存储文件的物理结构对用户是透明的。
  1. 索引
  • 表中的记录通常按其输入的时间顺序存放,这种顺序称为记录的物理顺序
  • 为了实现对表记录的快速查询,可以对表文件中的记录按某个和某些属性进行排序,这种顺
    序称为逻辑顺序
  • 索引即是根据索引表达式的值进行逻辑排序的一组指针,它可以实现对数据的快速访问。
  • 索引是关系数据库的内部实现技术,属于内模式,被存放在存储文件中。
  1. 模式

SQL语句分类

  • 数据定义。其功能是创建、更新和撤销模式及其对象。
    包含的语句动词主要有:CREATE、DROP、ALTER。
  • 数据查询。其功能是进行数据库的数据查询。包含的语
    句动词主要有:SELECT。
  • 数据操纵。其功能是完成数据库的数据更新。包含的语
    句动词主要有:INSERT、UPDATE、DELETE。
  • 数据控制。其功能是进行数据库的授权、事务管理和控
    制。包含的语句动词主要有:GRANT、REVOKE、
    COMMIT、ROLLBACK等。

SQL语言的数据类型

T-SQL提供的常用数据类型

数据定义

模式定义

  1. 定义数据库
 CREATE DATABASE <数据库名>  
  1. 使用数据库
 USE <数据库名> 
  1. 修改数据库
ALTER  DATABASE <数据库名> 
  1. 删除数据库
 DROP  DATABASE <数据库名>  

基本表定义

1. 定义基本表
CREATE TABLE <基本表名><列名> <数据类型>[ <列级完整性约束条件> ] 
      [,<列名> <数据类型>[ <列级完整性约束条件>] ][,<表级完整性约束条件> ]; 
  • <表名>:所要定义的基本表的名字

  • <列名>:组成该表的各个属性(列)

  • <列级完整性约束条件>:涉及相应属性列的完整性约束条件

  • <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

  • 列级完整性约束

    • 非空值约束: NOT NULL 限制列取值不能为空。
    • DEFAULT 指定列的默认值。
    • 唯一性约束: UNIQUE 限制列的取值不能重复。
    • CHECK 限制列的取值范围。
    • 主码约束: PRIMARY KEY 指定本列为主码。
    • FOREIGN KEY 指定本列为引用其他表的外码。
      格式为:
      [ FOREIGN KEY (<外码列名>)] REFERENCE <外表
      名>(<外表列名>)

例:定义SPDGB数据库的三个基本表

“商品订购数据库” 结构
数据库名:SPDG
包括三个基本表:
客户信息表(表名:KHB)
商品信息表(表名:SPB)
商品订购表(表名:SPDGB)

客户信息表(表名:KHB):
数据库复习——Ch3关系数据库语言SQL_第2张图片

CREATE TABLE KHB ( 
      客户编号   char(5)  PRIMARY KEY, 
      客户名称   char(20) NOT NULL, 
      出生日期   datetime, 
      性别           char(2), 
      所在省市   varchar(50), 
      联系电话   varchar(12), 
      备注           text 
);

商品信息表(表名:SPB):
数据库复习——Ch3关系数据库语言SQL_第3张图片

CREATE TABLE SPB ( 
     商品编号   char(8)      PRIMARY KEY, 
     商品类别   char(20)     NOT NULL, 
     商品名称   varchar(50)   NOT NULL, 
     单价           float, 
     生产商       varchar(50), 
     保质期       datetime        DEFAULT '2000-1-1', 
     库存量       int, 
     备注           text 
     ); 

商品订购表(表名:SPDGB):
数据库复习——Ch3关系数据库语言SQL_第4张图片

CREATE TABLE SPDGB ( 
     客户编号   char(5)   NOT NULL, 
     商品编号   char(8)   NOT NULL, 
     订购时间   datetime  NOT NULL, 
     数量       int, 
     需要日期   datetime, 
     付款方式   varchar(40), 
     送货方式   varchar(50), 
     PRIMARY KEY (客户编号,商品编号,订购时间), 
     FOREIGN KEY (客户编号) REFERENCES KHB(客户编号), 
     FOREIGN KEY (商品编号) REFERENCES SPB(商品编号) 
 ) ; 
2. 修改基本表

ALERT TABLE语句用于更改基本表结构
包括增加列、删除列、修改已有列的定义等
该语句的基本格式为:

     ALTER TABLE <基本表名> 
     	ALTER COLUMN <列名> <新数据类型>[NULL | NOT NULL]   
                                                              -- 修改已有列定义 
      |  ADD <列名> <数据类型> [约束]           -- 增加新列 
      |  DROP COLUMN <列名>                      -- 删除列 
      |  ADD [CONSTRAINT <约束名>] <约束定义>                                    
                                                                       -- 添加约束 
      |  DROP CONSTRAINT <约束名>          -- 删除约束  
3. 删除基本表
 DROP  TABLE  <基本表名> 

索引定义

1. 索引的概念

数据库复习——Ch3关系数据库语言SQL_第5张图片

2. 索引分类
  • 聚簇索引(Clustered Index)对表的物理数据页中的数据按索引关键字进行排序,然后重新存储到磁盘上,即聚簇索引与数据是一体的
  • 非聚簇索引(Nonclustered Index)具有完全独立于数据的索引结构,它不将物理数据页中的数据按索引关键字排序
3. 建立索引

语句格式 :

    CREATE  [ UNIQUE ] [ CLUSTERED |  NONCLUSTERED ]  
       INDEX <索引名>  
       ON <基本表名>(<列名> [ ASC | DESC ] [ { , <列名> [ ASC | DESC ] }… ] );   
  • 用<表名>指定要建索引的基本表名字
  • 索引可以建立在该表的一列或多列上,各列名之间用“ , ”分隔
  • 用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
  • UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
  • CLUSTER表示要建立的索引是聚簇索引
4. 删除索引

当不需要某个索引时,可使用DROP INDEX
语句将其删除。DROP INDEX语句的格式为:

DROP  INDEX  <基本表名>.<索引名> 

视图定义

  1. 视图的概念
    同样的数据可能有不同的操作要求,于是根据不同需求,在数据库上定义他们所需的数据结构,这种根据用户观点定义的数据结构就是视图。
    视图是从一个或多个基本表(或视图)导出的表。
    是一个虚表。
  2. 定义视图
CREATE VIEW <视图名>   [(<列名>[<列名> ])]   
AS 
<SELECT 查询语句> 
  1. 修改视图
ALTER VIEW <视图名>   [(<列名>[<列名> ])]   
AS      
<SELECT 查询语句> 
  1. 删除视图
DROP VIEW <视图名>

数据查询

SELECT语句结构

SELECT [ALL|DISTINCT]  <目标列表达式> [<目标列表达式>]FROM <表名或视图名>[<表名或视图名> ][ WHERE <条件表达式> ] 
  [ GROUP BY <列名1> ]
  [ HAVING <条件表达式> ] ] 
  [ ORDER BY <列名2> [ ASC|DESC ] ]

SELECT 子句:指定要显示的属性列
FROM 子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY 子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
HAVING短语:筛选出只有满足指定条件的组
ORDER BY 子句:对查询结果表按指定列值的升序或降序排序

单表查询

  1. 选择列
  2. 选择行
    WHRER
  3. 对查询结果排序
    ORDER BY
  4. 聚合函数
    AVG
    COUNT
    MAX
    MIN
    SUM
  5. 对查询结果分组
    GROUP BY
    注意:
    使用GROUP BY子句后,SELECT子句列表里只能包含GROUP BY指出的列或在聚合函数中指出的列
  6. 使用HAVING子句进行筛选
    HAVING

数据库复习——Ch3关系数据库语言SQL_第6张图片
字符串匹配:

[NOT] LIKE<匹配串>[ ESCAPE<换码字符>] 
  • 通配符 :
    • % (百分号) 代表任意长度(长度可以为0) 字符串
    • _ (下横线) 代表任意单个字符

连接查询

  1. 连接谓词(用在where中)
  • 用来连接两个表的条件称为连接条件或连接谓词,一般格式:
[<表名1>.]<列名1>  <比较运算符>  [<表名2>.]<列名2> 

比较运算符:<、<=、=、>、>=、!=、<>、!< 和 !>

[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND[<表名2>.]<列名3>
  • 其中,当谓词为“=”时,就是等值连接。若在目标列中去除相同的字段名,则为自然连接。
  • 可用逻辑运算符AND和OR来连接多个连接谓词,实现复杂条件的连接查询。
  1. 以JOIN关键字指定的连接(用在from中)
    INNER JOIN 表示内连接
    OUTER JOIN 表示外连接
    INNER和OUTER均可省略
    (1)内连接
FROM <表名1> JOIN <表名2> ON <表名1.列名>=<表名2.列名>

(2)外连接
LEFT OUTTER JOIN
RIGHT OUTTER JOIN
FULL OUTTER JOIN

嵌套查询

1. 带IN谓词的子查询

有些嵌套查询可以用连接查询代替,但有些则不能
当子查询返回的结果是一个集合时,这样的子查询往往难以用连接查询代替

嵌套查询分类 :

  • 不相关子查询
    子查询的查询条件不依赖于父查询
  • 相关子查询
    子查询的查询条件依赖于父查询

嵌套查询求解方法 :

  • 不相关子查询 (子查询一次完成)
    是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
  • 相关子查询 (反复求值)
  1. 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;
  2. 然后再取外层表的下一个元组;
  3. 重复这一过程,直至外层表全部检查完为止。
2. 带比较谓词的子查询

3.带有 EXISTS 谓词的子查询

EXISTS谓词用于测试子查询的结果是否为空表。若子查询的结果集不空,则EXISTS返回TRUE,否则返回FALSE。

4.带有 ALL(SOME) 或 ANY 谓词的子查询

<表达式>{ < | <= | = | > | >= | != | <> | !< | !> }  { ALL | SOME | ANY }(子查询) 
  • ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较关系时,才返回TRUE,否则返回FALSE。

  • ANY与SOME的限制含义相同,通常采用ANY,表示表达式只要与子查询结果集中的某个值满足比较关系时,就返回TRUE,否则返回FALSE。

    Tip:通常,使用聚合函数实现子查询比直接使用ANY或ALL效率高

集合查询

集合操作主要包括:
并(UNION)
交(INTERSECT)
差(EXCEPT)

视图查询

数据更新

数据插入

  • 1、插入元组
INSERT INTO <表名> [(<1> [<2>])] 
     VALUES (<常量1>  [<常量2>]) 
  • 2、插入子查询结果
INSERT INTO <表名> [(<1> [<2>])] 
<子查询> 

数据修改

 UPDATE <表名> [ [ AS ] < 别名> ] 
  SET <列名> =<表达式> [<列名><表达式> ][WHERE <条件表达式>] 

数据删除

DELETE  [FROM] <表名> 
[WHERE <条件表达式>] 

视图更新

与表格操作相同

更新操作与数据完整性

对某个基本表进行增、删、改操作有可能会破坏参照完
整性。

习题3

  1. 什么是基本表?什么是视图?二者有何关系与区别?
    基本表:
    基本表是独立存在于数据库中的表,是“实表”。
    一个关系对应一个基本表,一个或多个基本表对应一个存储文件。
    视图(View):
    视图是从一个或几个基本表(或视图)导出的表,是“虚表”。
    它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
    当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。

  2. SQL语句按其功能分为哪几类?
    数据定义
    数据查询
    数据操纵
    数据控制

  3. SQL的数据定义主要包括哪几类对象的定义?
    模式
    基本表
    索引

  4. 什么是索引?定义索引的目的是什么?

  5. 什么是视图?视图有哪些优点?

  6. 设有学生成绩数据库XSCJ,期中包含关系如下:
    (1)学生关系:名为Student,描述学生信息。
    关系模式为:Student(学号,姓名,专业名,性别,出生时间,总学分,备注)
    (2)Course(课程号,课程名,开课学期,学时,学分)
    (3)StuCourse(学号,课程号,成绩)
    试写出以下操作的SQL语句:
    (1)查询专业名为”计算机科学与技术“的学生学号与姓名

select 学号,姓名
	from Student
	where 专业名='计算机科学与技术'

(2)查询开课学期为”2“的课程号与课程名

select 课程号,课程名
	from Course
	where 开课学期=2

(3)查询修读”计算机科学与技术“的学生的学号

select 学号
	from StuCourse
	where 课程号=
	(
	select 课程号
		from Course
		where 课程名='计算机科学与技术'
	)

你可能感兴趣的:(期末复习,数据库,sql)