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;

更新视图

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

参考资料

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