《数据库原理》第三章 关系数据库标准语言SQL

目录

3.1SQL概述

3.2数据定义

3.2.1定义基本表

1. 创建基本表 CREATE TABLE

2. 修改基本表

3. 删除基本表

3.2.2定义视图

3.2.3定义索引

1. 建立索引

2.修改索引

3. 删除索引

4.数据字典

3.3数据查询

3.3.1表单查询

1. 选择表中的若干列

2. 选择表中的若干元组

3. ORDER BY 子句

4. 聚集函数

5. GRUOP BY子句

3.3.2连接查询

等值与非等值连接查询

自身连接

外连接

3.3.3嵌套查询

1.带有IN谓词的子查询

2.带有比较运算符的子查询

相关子查询

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

4.带有EXISTS谓词而的子查询

5.基于派生表的查询

3.3.4集合查询

3.4数据更新

3.4.1插入数据

1.两种插入数据的方式:

3.4.2修改数据

3.4.3删除数据

3.5空值的处理

3.6视图

3.6.1定义视图

3.6.2删除视图

3.6.3查询视图

3.6.4更新视图


3.1SQL概述

SQL既有关系代数特点又有关系演算特点的查询语言。

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

SQL的功能

  • 数据定义
  • 数据查询
  • 数据更新
  • 视图定义
  • 数据安全性

SQL语言的特点

  • 综合统一
  • 高度非过程化
  • 面向集合的操作方式
  • 以同一种语法结构提供两种使用方式交互式和嵌入式
  • 语法简洁、易学易用
SQL的动词
SQL功能动词
数据查询SELECT
数据定义CREATE、DROP、ALTER
数据操控INSERT 、UPDATE 、DELETE
数据控制GRANT、 REVOKE

数据库语言的两种交互方式:

  1. 交互式:用户通过计算机终端设备直接向数据库系统输入数据库语言语句,向数据库系统请求服务。
  2. 嵌入式:把数据库语言嵌入到某个程序设计语言中,作为这个程序设计语言的子语言使用。程序员可以在宿主语言程序的任何地方使用数据库语言语句,向数据库系统提出操作请求。

SQL语言中的基本概念

基本表:

是独立存在的表,不是有其他表导出的。一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干个索引。

视图:

是一个虚拟的表,是从一个或几个基本表导出的表。他本身并不全部放在数据库中,数据库中只存放视图的定义,但是并不存放视图对应的数据,这些数据存放在导出视图的基本表中。当基本表中的数据发生改变时,从视图中查询出来的数据也随之改变。

存储文件:

逻辑结构组成了关系数据库中的内模式物理结构,用户不可见。

3.2数据定义

关系数据库管理系统->数据库->模式->表、视图、索引

3.2.1定义基本表

1. 创建基本表 CREATE TABLE

主码:PRIMARY KEY

约束:UNIQUE

外码:FOREIGN KEY

参照:REFERENCES 被参照表Course 被参照列Cno

建立一个学生表,学号是主码,姓名取值唯一。

构成:表名、列名、数据类型、列级完整性约束条件、表级完整性约束条件

功能:建立一个新关系模式,定义关系模式的每一个属性的数据类型、长度和完整性约束条件。

CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
FOREIGN KEY(Cpno),
REFERENCES Course(Cno),
Sdept CHAR(20));

2. 修改基本表

ALTER TABLE

ADD用来增加新列、新的列级完整性约束条件和新的表计完整性约束条件。

DROP COLUMN用于删除表中的列。加了CASCADE,自动删除引用了该列的其他对象;加了RESTRICT,如果该列被其他对象引用,关系数据库管理系统将不会删除该列。

DROP CONSTRAINT 用于删除指定的完整性约束条件。

ALTER COLUMN 用于修改原有的列定义,包括修改列名和数据类型。

不管基本表中原来是否已经有数据,新增加的列一律为空值。

将年龄的数据类型改成整型

ALTER TABLE Student
ALTER COLUMN Sage INT;

3. 删除基本表

DROP TABLE删除基本表

RESTRICT :删除表是有限制的 要求删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除。

CASCADE:删除表的时候没有限制,在删除表的同时,相关的依赖对象一起删除。

例:删除Student表

DROP TABLE Student CASCADE;

 基本表被删除时,数据会被删除,表上建立的索引、视图、触发器等一般也会被删除。

3.2.2定义视图

3.2.3定义索引

1. 建立索引

建立索引可以有效的提高查询的速度。

格式:CREATE INDEX 索引名 ON 表名 列名

功能:在一个指定关系的指定属性上建立一个索引

UNIQUE:表示此索引的每一个索引值只对应唯一的数据记录。//唯一索引

CLUSTER:表示要建立的索引是聚簇索引

聚簇索引也称为聚集索引,聚类索引,簇集索引,聚簇索引确定表中数据的物理顺序。聚簇索引类似于电话簿,后者按姓氏排列数据。由于聚簇索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚簇索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。汉语字典也是聚簇索引的典型应用,在汉语字典里,索引项是字母+声调,字典正文也是按照先字母再声调的顺序排列。

2.修改索引

ALTER INDEX

格式:ALTER INDEX <旧索引名> RENAME TO <新索引名>

功能:给指定索引重新命名

例:将CS表中的SCno索引名改成SCSno

ALTER INDEX SCno RENAME TO SCSno

3. 删除索引

格式:DROP INDEX <索引名>

功能:删除一个指定的索引,在删除索引时,系统会自动从数据字典里删除有关索引的描述。

例:删除Student表中的Stusname索引

DROP INDEX Stusname;

4.数据字典

数据字典是关系数据库管理系统内部的一组系统表,记录数据库中的所有定义信息。

数据字典包含了关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限和统计信息等。

关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典标准的相应信息。

3.3数据查询

 SELECT 子句:指定要显示的属性列

FROM子句:指定的查询对象、基本表或视图

WHERE子句:指定查询条件

GROUP BY子句:对查询结果按照指定列的值分组,该属性列值相等的元组为一个组

HAVING短语:满足条件的组输出

OEDER BY子句:对查询结果表按照指定列值升序或降序排列。

3.3.1表单查询

1. 选择表中的若干列

查询指定列

例:查询全体学生的学号和姓名

SELECT Sno,Sname
FROM Student;

查询全部列

例:查询全体学生的详细记录

SELECT *
FROM Student;

查询需要计算的列

例:查询器全体学生的姓名及其出生年份

SELECT Sname,2021-Sage
FROM Student;

2. 选择表中的若干元组

3. ORDER BY 子句

4. 聚集函数

5. GRUOP BY子句

3.3.2连接查询

同时涉及两个以上的表的查询

等值与非等值连接查询

等值连接

嵌套循环法

排序合并法

索引连接

散列连接

自身连接

一个表跟自己连接,需要给表起别名以示区别,属性名前必须使用别名前缀。

外连接

外连接 将主表中的不满足条件的元组也一并输出。

3.3.3嵌套查询

1.带有IN谓词的子查询

查询和“刘晨”在一个系学习的学生

SELECT Sno,Sname,Sdept
    FROM Student 
WHERE Sdept in(
    SELECT Sdept
    FROM Student 
  WHERE Sname="刘晨");

2.带有比较运算符的子查询

带有比较运算符的子查询是父查询与子查询之间用比较运算符进行连接。

运算符包含> < = >= <= != <>

例:找出每个学生超过他自己选修课程平均成绩的课程号

SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade)
            FROM SC y
            WHERE y.Sno=x.Sno);

相关子查询

子查询中的参数值和父查询相关。

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

子查询返回多值。

例:查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄。

SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(SELECT Sage
                FROM Student
                WHERE Sdept='CS')
AND Sdept<>'CS'

4.带有EXISTS谓词而的子查询

存在量词

带有存在量词的子查询不返回任何数据,只产生逻辑真值true或逻辑假值false

内层查询结果非空,外层WHERE子句返回真值

内层查询结果为空,外层WHERE子句返回假值

例:查询所有选修了1号课程的学生姓名

SELECT Sname
FROM Student
WHERE EXISTS
        (SELECT *
            FROM SC
            WHERE Sno=Student.Sno AND Cno='1');

例:查询没有选修1号课的学生姓名

SELECT Sname
FROM Student
WHERE NOT EXISTS
        (SELECT *
            FROM SC
            WHERE Sno=Student.Sno AND Cno='1');

例:查询与'刘晨'在一个系学习的学生

SELECT Sno,Sname,Sdept
FROM Student S1
WHERE EXISTS
        (SELECT *
            FROM Student S2
            WHERE S2.Sdept=S1.Sdept AND S2.name='刘晨');

5.基于派生表的查询

例:找出每个学生超过他自己选修课程平均成绩的课程号

SELECT Sno,Cno
FROM SC,(SELECT Sno,Avg(Grade)
        FROM SC
        GROUP BY Sno)
        AS Avg_sc(avg_sno,avg_grade)
WHERE  SC.Sno=Avg_sc.avg_sno AND SC.Grade>=Avg_sc.avg_grade;

3.3.4集合查询

操作集合包括并UNION、交INTERSECT、差EXCEPY(MINUS)

参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同。

3.4数据更新

3.4.1插入数据

1.两种插入数据的方式:

  • 插入元组
  • 插入子查询结果,通过这种方式,可以插入多个元组

3.4.2修改数据

3.4.3删除数据

3.5空值的处理

3.6视图

3.6.1定义视图

CREATE VIEW

行列子集视图是从单个基本表导出的,删掉了基本表的某些行或列但,导出的列里有主码。

基于视图的视图、基于多表的视图、带表达式的视图、分组视图

3.6.2删除视图

DROP VIEW

3.6.3查询视图

关系数据库管理系统实现视图查询的方法:视图消解法 视图转化成基本表查询

3.6.4更新视图

视图的作用:

  • 简化用户操作
  • 使用户以多角度看待同一数据
  • 对数据库重构提供了一定程度的逻辑独立性
  • 对机密数据提供安全保护
  • 能更清晰的表达查询

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二琳爱吃肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值