SQL学习笔记(一)

SQL学习笔记(一)

学习示例

Student

Sno Sname Ssex Sage Sdept
201215121 李勇 男 20 CS
201215122 刘晨 女 19 CS
201215123 张敏 女 18 MA
201215125 张立 男 19 IS

Course

Cno Cname Cpno Ccredit
1 数据库 5 4
2 数学 2
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 PASCAL语言 6 4

SC

Sno Cno Grade
201215121 1 92
201215121 2 85
201215121 3 88
201215122 2 90
201215122 3 80

数据定义

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA
表 CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

模式的定义与删除

定义

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

为用户WANG创建一个S-T模式

CREATE SCHEME "S-T" AUTHORIZATION WANG;

定义模式实际就是创建一个命名空间,或者通俗说创建了一个新的数据库,可以包含表、视图等,在MYSQL中和CREATE DATABASE等价。

可以在此语句后直接创建表、视图等用|分开即可。

删除

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

CASCADE:级联,表示在删除模式的同时把该模式中的所有数据库对象全部删除

RESTRICT:限制,表示如果该模式中已经定义了下属的数据库结构,则拒绝删除语句的执行。

DROP SCHEMA ZHANG CASCADE;

基本表的定义删除与修改

定义

1
2
3
4
CREATE TABLE <表名>(<列名><数据类型>[列表完整性约束条件]
,<列名><数据类型>[列表完整性约束条件]
,...
[,表级完整性约束条件]);
1
2
3
4
5
6
7
8
-- 创建一个学生表
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, --主码(主键)
Sname CHAR(20) UNIQUE, --唯一值
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
1
2
3
4
5
6
7
8
9
-- 创建一个课程表
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(40) NOT NULL,
Cpno CHAR(4),
Credit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno) --表级约束条件外键(码)
);
1
2
3
4
5
6
7
8
9
-- 创建选课表
CREAT TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

数据类型

数据类型 含义
CHAR(n),CHARACTER(n) 长度为n的定长字符串
VARCHAR(n),CHATACTERVARYING(n) 最大长度为n的变长字符串
CLOB 字符串大对象
INT,INTEGER 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
NUMERIC(p,d) 定点数,由p位数字组成,小数点后有d位
DECIMAL(p,d),DEC(p,d) 同上
REAL 取决机器精度的单精度浮点数
DOUBLE PRECISION 取决机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为n位数字
BOOLEAN 逻辑布尔量
DATE 日期(YYYY-MM-DD)
TIME 时间(HH:MM:SS)
TIMESTAMP 时间戳
INTERVAL 时间间隔

模式与表

CREATE TABLE "S-T".Student(...); 创建属于模式S-T的表Student

SHOW search_path; 显示当前的搜索路径

SET search_path TO "S-T",PUBLIC; 设置搜索路径

修改基本表

1
2
3
4
5
6
ALTER TABLE <表名>
[ADD [COLUMN] <新列名><数据类型>[完整性约束条件]]
[ADD<表级约束条件>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT<完整约束名> [RESTRICT|CASCADE]]
[ALTER COLUMN <列名><数据类型>];
1
2
3
4
5
6
-- Student添加“入学时间”列
ALTER TABLE Student ADD S_entrance DATE;
-- 将年龄由字符型变为整型
ALTER TABLE Student COLUMN Sage INT;
-- 增加课程名称唯一值限制条件
ALTER TABLE Course ADD UNIQUE(Cname);

删除基本表

DROP TABLE <表名> [RESTRICT|CASCADE];

1
2
-- 删除Student表
DROP TABLE Studnet CASCADE;

索引的建立与删除

建立索引

CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名> (<列名>[<次序>][,<列名>[<次序>]]...);

次序:ASC(升序),DESC(降序)

UNIQUE:每个文本只包含唯一文本

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

1
2
3
4
-- 为学生-课程数据库的Student、Course和SC三个表建立索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucuo ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

1
2
-- 将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;

删除索引

DROP INDEX <索引名>;

1
2
-- 删除Stuname索引
DROP INDEX Stuname;

数据查询

1
2
3
4
5
6
7
8
9
10
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>...]|(<SELECT语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];
/*
根据WHERE子句的条件表达式从FROM语句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表表达式选出元组中的属性值形成结果表。
GROUP BY 结果会按照列名1的值进行分组
ORDER BY 结果还要按照列名2进行升序或降序排序
*/

单表查询

  1. 选择表中的若干列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 查询全体学生的姓名、学号和所在系
SELECT Sname,Sno
FROM Student;

-- 查询全部列
SELECT *
FROM Student;

-- 查询经过计算的值
-- 查询全体学生的姓名及出生年月(假设2020年)
SELECT Sname,2020-Sage
FROM Student;

-- 查询全体学生的姓名、出生年份和所在院系,院系用小写字母
SELECT Sname,'Year of Birth:',2020-Sage,LOWER(Sdept)
FROM Student;
-- 指定别名
SELECT Sname NAME,'Year of Birth:' BIRTH,2020-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
  1. 选择表中的若干元组
1
2
3
4
5
6
-- 查询选修了课程的若干元组
SELECT Sno
FORM SC;
-- 去除重复结果,不指定DISTINCT则默认为ALL
SELECT DISTINCT Sno
FORM SC;
查询条件 谓词
比较 =,>,<,>=,<=,!>,!<,!=,<>,NOT
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件 AND,OR,NOT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-- 查询全体计科学生名单
SELECT Sname
FROM Student
WHERE Sdept='CS';

-- 查找所有20岁以下学生的姓名及年龄
SELECT Sname,Sage
FROM Student
WHERE Sage<20;

-- 查询考试不及格的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;

-- 查找在20~23岁的学生姓名、系别和年龄
SELECT Sname,Sdept,Sage
FORM Student
WHERE Sage BETWEEN 20 AND 23;

-- 查找不在20~23岁的学生姓名、系别和年龄
SELECT Sname,Sdept,Sage
FORM Student
WHERE Sage NOT BETWEEN 20 AND 23;

-- 查找CS、MA、IS系学生的姓名和性别
SELECT Sname,Ssex
FORM Student
WHERE Sdept IN('CS','MA','IS');

-- 查找不是CS、MA、IS系学生的姓名和性别
SELECT Sname,Ssex
FORM Student
WHERE Sdept NOT IN('CS','MA','IS');

-- 查询学号为201215121的学生的详细的情况
SELECT *
FORM Student
WHERE Sno='201215121';

-- 查询所有姓刘的学生的姓名、学号和性别
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '刘%';

-- 查询姓欧阳且全名为三个字的学生的姓名
SELECT Sname
FORM Studnet
WHERE Sname LIKE '欧阳_';

-- 查询第二个字为‘阳’的学生的姓名和学号
SELECT Sname,Sno
FORM Student
WHERE Sname LIKE '_阳%';

-- 查询DB_Design课程的课程号和学分
-- ESCAPE相当于定义了转义字符
SELECT Cno,Credit
FROM Course
WHERE Cname LIKE 'DB /_Design' ESCAPE '/';

-- 查询缺少成绩学生学号和课程号
SELECT Sno,CNO
FROM SC
WHERE Grade IS NULL;

-- 查询所有计算机系年龄20岁以下的学生姓名
SELECT Sname
FROM Student
WHERE Sdept='CS' AND Sage<20;
  1. ORDER BY子句
1
2
3
4
5
--查询选修了3号课程的学生的学号和成绩,查询结果按分数的降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;
  1. 聚集函数
函数 功能
COUNT(*) 统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数
SUM([DISTINCT|ALL]<列名>) 计算一列值的总和
AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值
MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值
MIN([DISTINCT|ALL]<列名>) 求一列值域中的最小值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 统计学生总人数
SELECT COUNT(*)
FROM Studnet;

-- 查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno)
FROM SC;

-- 查询选修1号课程学生的平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1';

-- 查询选修1号课程的学生最高分
SELECT MAX(Grade)
FORM SC
WHERE Cno='1';

-- 查询学号201215012选修课程的总学分数
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215012' AND SC.Cno=Couse.Cno;

聚集函数只能用户SELECT子句和GROUP BY中的HAVING子句。

  1. GROUP BY 子句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- GROUP BY子句将查询结果按某一列或多列的值域分组,值相等的为一组

-- 求各个课程号及相应的选课人数
SELECT Cno,Count(Sno)
FROM SC
GROUP BY Cno;

-- 查询选修了三门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>=3;

-- 查询平均成绩大于

连接查询

  1. 等值与非等值查询
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 查询每个学生及其选修课程情况
SELECT Student.*,SC.*
FORM Student,SC
WHERE Student.Sno=SC.Sno;

SELECT Student,Sno,Sname,Ssex,Sdept,Cno,Grade
FORM Student,SC
WHERE Student.Sno=SC.Sno;

-- 查询选修2号课程且成绩90分以上的所有学生的姓名
SELECT Sname
FORM Student,SC
WHERE SC.Grade>90 AND SC.Sno=2 AND SC.Sno=Student.SNO;
  1. 自身连接
1
2
3
4
-- 查询一门课的间接先修课
SELECT FIRST.Cno,SECOND.Cpno
FORM Course FIRST,Course SECOND
WHERE FIRST.Cpno=SECOND.Cno;
  1. 外连接
1
2
3
4
5
-- 左外连接
-- 查询所有学生的选课情况,包括未选课的学生
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FORM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);
-- 左外连接,左表全部包括,右外连接右表全部包括
  1. 多表连接
1
2
3
4
-- 查询每个学生的学号、姓名、选修课的名称及成绩
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND SC.Sno=Course.Sno;

嵌套查询

  1. 带有IN谓词的子查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- 查询与“刘晨”在同一个系学习的学生
SELECT Sno,Sname,Sdept
FORM Student
WHERE Sdept IN
(SELECT Sdept
FORM Student
WHERE Sname='刘晨'
);
-- 通过自身连接
SELECT S1.Sno,S1.Sname,S1.Sdept
FOMR Student S1,Student S2
WHERE S1.Dept=S2.Dept AND S2.Sname='刘晨';

-- 查询选修了课程名为“信息系统”的学生学号和姓名
SELECT Sno,Sname
FOMR Student
WHERE Sno IN
(SELECT Sno
FORM SC
WHERE Cno IN
(SELECT Cno
FROM Course
WHERE Cname='信息系统'
)
);
-- 通过连接实现
SELECT Student,Sno,Sname
FORM Student,SC,Course
WHERE Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Cname='信息系统';
  1. 带有比较运算符的子查询
1
2
3
4
5
6
7
-- 找出每个学生超过他自己选修课程平均成绩的课程号
SELECT Sno,Cno
FORM SC X
WHERE Grade>=
(SELECT AVG(Grade)
FORM SC y
WHERE Y.Sno=X.Sno);
  1. 带ANY或ALL谓词的子查询
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 查询非计科系比计科系任意一个学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FORM Student
WHERE Sdept!='CS' AND Sage<ANY(SELECT Sage
FORM Student
WHERE Sdept='CS');

-- 查询非计科系比计科系所有一个学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FORM Student
WHERE Sdept!='CS' AND Sage<ALL(SELECT Sage
FORM Student
WHERE Sdept='CS');
  1. 带有EXISTS谓词的子查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 查询选修了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 Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FOMR Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno=Course.Cno));
1
-- 查询至少选修了学生201215122选修的全部课程的学生号码

p:学生201215122选修了课程y

q:学生x选修了课程y

\(( \forall y) p \rightarrow q\)

SQL不存在蕴含逻辑运算,利用谓词验算将逻辑蕴含转化

\[ \begin{align} ( \forall y) p \rightarrow q & = \neg (\exists y (\neg (p\rightarrow q)))\\ & = \neg(\exists y(\neg (\neg p \vee q)))\\ & = \neg \exists y(p \wedge \neg q) \end{align} \]

1
2
3
4
5
6
7
8
9
SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISITS
(SELECT *
FROM SC SCY
WHERE SCY.Sno='201215122' AND NOT EXISTS
(SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));

集合查询

主要为UNION(并操作)、INTERSECT(交操作)、EXCEPT(差操作)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
-- 查询计算机科学系的学生及不大于19岁学生
SELECT * FROM
Student
WHERE Sdept='CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19;

-- 查询选修了课程1或者课程2的学生
SELECT Sno
FROM SC
WHERE Cno='1'
UNION
SELECT Sno
FROM SC
WHERE Cno='2';

-- 查询计算机科学系的学生与年龄不大于19岁的学生的交集
-- MYSQL不存在INTERSECT,用嵌套解决
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19;

-- 查询既选修了课程1又选修了课程2的学生
SELECT Sno
FROM SC
WHERE Cno='1'
INTERSECT
SELECT Sno
FROM SC
WHERE Sno='2';

/*嵌套实现*/
SELECT Sno
FROM SC
WHERE SC='1' AND Sno IN
(SELECT Sno
FROM SC
WHERE Cno='2');

-- 查询计算机科学系的学生与年龄不大于19岁学生的差集
SELECT *
FORM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage<=19;

SELECT *
FROM Student
WHERE Sdept='CS' AND Sage>19;

基于派生表的查询

子查询不仅可以出现在WHERE语句中,还可以出现在FROM语句中。此时子查询生成的临时派生表(derived table)成为主查询的查询对象。

1
2
3
4
5
6
7
-- 超出每个学生超过他自己选修课程平均成绩的课程号
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;

数据更新

插入数据

  1. 插入元组
1
2
3
INSERT
INTO <表名>[(<属性列1>[,<属性列2>])...]
VALUES(<常量1>[,<常量2>]...);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 将一个新学生的元组插入到Student表中
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈冬','男','IS',18);

-- 将学生张成民的信息插入到Student表中
INSERT
INTO Student
VALUES('201215126','张成民'.'男',18,'CS');

-- 插入一条选课记录
INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1');
  1. 插入子查询的结果
1
2
3
4
5
6
7
8
9
-- 对每个系,求学生的平均年龄并存入数据库
CREATE TABLE Dept_age
(Sdept CHAR(15)
Avg_age SMALLINT);
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

修改数据

1
2
3
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 修改学生20121521的年龄为22岁
UPDATE Student
SET Age=22
WHERE Sno='20121521';

-- 将所有学生的年龄增加一岁
UPDATE Student
SET Sage=Sage+1;

-- 将计算机系全体学生的成绩置0
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');

删除数据

1
2
3
DELETE
FROM <表名>
[WHERE <条件>];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 删除学号为201215128的学生记录
DELETE
FROM Student
WHERE Sno='201215128';

-- 删除所有学生的选课记录
DELETE
FROM SC;

-- 删除计算机科学系所有学生的选课记录
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');

空值的处理

1
2
3
4
-- 从Student表中找出漏填数据的学生信息
SELECT *
FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;
三值逻辑
1
2
3
4
5
6
7
8
9
10
-- 找出选修了1号课程的不及格的学生
SELECT Sno
FROM SC
WHERE Grade<60 AND Cno='1';
/*并不包含缺考,缺考为UNKNOWN*/

-- 查询选修了1号课程的不及格及缺考的学生
SELECT Sno
FROM SC
WHERE Cno='1' AND (Grade<60 OR Grade IS NULL);

视图

定义视图

  1. 建立视图
1
2
3
CTEATE VIEW <视图名>[<列名>[,<列名>]...]
AS <子查询>
[WITH CHECK OPTION];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-- 简历信息系学生的视图
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
/*CREATE VIEW只是把视图定义存入数据字典,并不执行其中的SELECT语句*/

-- 建立信息系的学生视图,并要求进行修改和插入时仍需保证该视图只有信息系的学生
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;

-- 建立信息系选修了1号课程的学生的视图
CTEATE VIES IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE SC.Cno='1' AND Sdept='IS' AND Student.Sno=SC.Sno;

-- 建立信息系选修了1号课程且成绩在90分以上学生的视图
CREATE VIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROM IS_S1
WHERE Grade>=90;

--定义一个反应学生出生年份的视图
CREATE VIEW BT_S(Sno,Sname,Sage)
AS
SELECT Sno,Sname,2020-Sage
FROM Student;

-- 将学生的学号及平均成绩定义为一个视图
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

-- 将Student的所有女生定义为一个视图
CREATE VIEW F_Student
AS
SELECT *
FROM Student
WHERE Ssex='女';
  1. 删除视图
1
2
DROP VIEW <视图名>[CASCADE];
-- CASCADE级联,把本身极其导出的其他视图一同删除
1
2
3
-- 删除视图BT_S和视图IS_S1
DROP VIEW BT_S;
DROP VIEW IS_S1 CASCADE;/*由于IS_S1有导出视图IS_S2*/

查询视图

1
2
3
4
-- 在信息系学生的视图中找出年龄小于20岁的学生
SELECT Sno,Sage
FORM IS_Student
WHERE Sage<=20;

更新视图

增删查改与表完全相同,只是有部分不允许更新,各种关系型数据库不太相同,一般情况也不对视图进行查询之外的操作

参考资料

  • 数据库系统概论.第五版