“SQL语言”的版本间的差异
Jihongchang(讨论 | 贡献) (→1)创建表) |
Jihongchang(讨论 | 贡献) (→考点3:查询) |
||
(未显示同一用户的20个中间版本) | |||
第38行: | 第38行: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
− | CREATE | + | CREATE TABLE S ( |
Sno char(5) PRIMARY KEY, | Sno char(5) PRIMARY KEY, | ||
Sname char(16) NOT NULL, | Sname char(16) NOT NULL, | ||
SD char(10), | SD char(10), | ||
Sage int, | Sage int, | ||
− | Sex char(2)); | + | Sex char(2) |
+ | ); | ||
CREATE TABLE C( | CREATE TABLE C( | ||
Cno char(2) PRIMARY KEY, | Cno char(2) PRIMARY KEY, | ||
− | teacher char(8)); | + | Cname char(16) UNIQUE, |
+ | teacher char(8) | ||
+ | ); | ||
+ | |||
+ | |||
+ | CREATE TABLE SC ( | ||
+ | Sno char(5), | ||
+ | Grade int, | ||
+ | PRIMARY KEY(Sno, Cno), | ||
+ | FOREIGN KEY(Sno) REFERENCES S(Sno), | ||
+ | FOREIGN KEY(Cno) REFERENCES C(Cno) | ||
+ | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === 考点1:创建表 === | ||
+ | 某高校教学管理系统中的院系关系 Department 和学生关系 Students 的模式分别为: | ||
+ | |||
+ | Department(院系号,院系名,负责人,办公电话),学生关系 Students(学号,姓名,身份证号,院系号,联系电话,家庭住址)。 | ||
+ | |||
+ | Department 中的“院系号”唯一标识一个院系,Students 中的“学号”能唯一标识一名学生,“家庭住址”可进一步分为邮编、省、市、街道。 | ||
+ | |||
+ | 根据以上描述可知,关系 Students 的候选键为(), | ||
+ | |||
+ | A、学号 | ||
+ | |||
+ | B、身份证号和院系号 | ||
+ | |||
+ | C、学号和身份证号 √ | ||
+ | |||
+ | D、学号和院系号 | ||
+ | |||
+ | “家庭住址”为()。 | ||
+ | |||
+ | A、简单属性 | ||
+ | |||
+ | B、复合属性 √ | ||
+ | |||
+ | C、多值属性 | ||
+ | |||
+ | D、派生属性 | ||
+ | |||
+ | |||
+ | |||
+ | 某高校教学管理系统中的院系关系 Department 和 学生关系 Students。 | ||
+ | |||
+ | Department 中的“院系号”唯一标识一个院系,Students 中的“学号”能唯一标识一名学生。 | ||
+ | |||
+ | 创建 Students 的SQL语句如下,请填补其中的空缺。 | ||
+ | |||
+ | CREATE TABLE Students ( | ||
+ | |||
+ | 学号 CHAR(8) PRIMARY KEY, | ||
+ | |||
+ | 姓名 CHAR(16), | ||
+ | |||
+ | 身份证号 CHAR(18), | ||
+ | |||
+ | 院系号 CHAR(4), | ||
+ | |||
+ | 联系电话 CHAR(13), | ||
+ | |||
+ | 家庭住址 CHAR(30), | ||
+ | |||
+ | FOREIGN KEY(); | ||
+ | |||
+ | A、(联系电话) REFERENCES Department(办公电话) | ||
+ | |||
+ | B、(院系号) REFERENCES Department(院系号) √ | ||
+ | |||
+ | C、(院系号) REFERENCES Students(学号) | ||
+ | |||
+ | D、(负责人号) REFERENCES Students(学号) | ||
+ | |||
+ | |||
+ | === 2)修改和删除 === | ||
+ | ALTER TABLE <表名> | ||
+ | |||
+ | [ADD <新列名><数据类型><列级完整性约束条件>] 添加属性列 | ||
+ | |||
+ | [DROP <列名/完整性约束条件>] 删除属性列 | ||
+ | |||
+ | [MODIFY/CHANGE<列名><数据类型>] 修改属性列的数据类型 | ||
+ | |||
+ | [CHANGE <列名><新列名><数据类型>] 修改属性列名 | ||
+ | |||
+ | |||
+ | DROP TABLE <表名> 例如用“DROP TABLE Student”删除表 Student | ||
+ | |||
+ | === 3)数据更新 === | ||
+ | {| class="wikitable" | ||
+ | !操作类别 | ||
+ | !语法 | ||
+ | !示例 | ||
+ | |- | ||
+ | |插入数据 | ||
+ | |INSERT INTO <表名> | ||
+ | [(<属性列1> | ||
+ | |||
+ | [,<属性列2>……)] | ||
+ | |||
+ | VALUES (<常量1>[,<常量2>]……); | ||
+ | |||
+ | 注:VALUES子句可用子查询替代 | ||
+ | |INSERT INTO student | ||
+ | VALUES ('95020', '李四', '男', 'CS', '18'); | ||
+ | |||
+ | INSERT INTO SC(Sno, Cno) | ||
+ | |||
+ | VALUES('95020', '1'); | ||
+ | |- | ||
+ | |修改数据 | ||
+ | |UPDATE <表名> | ||
+ | SET <列名>=<表达式>[,<列名>=<表达式>]…… | ||
+ | |||
+ | [WHERE <条件>]; | ||
+ | |将学生95001的年龄改为23岁 | ||
+ | UPDATE student | ||
+ | |||
+ | SET Sage=23 | ||
+ | |||
+ | WHERE Sno='95001'; | ||
+ | |- | ||
+ | |删除数据 | ||
+ | |DELETE | ||
+ | FROM <表名> | ||
+ | |||
+ | [WHERE <条件>]; | ||
+ | |删除学号为95019的学生记录 | ||
+ | DELETE FROM student | ||
+ | |||
+ | WHERE Sno='95019'; | ||
+ | |} | ||
+ | |||
+ | |||
+ | === 考点2:数据修改 === | ||
+ | 某数据库系统中,假设有部门关系 Dept(部门号,部门名,负责人,电话),其中, | ||
+ | |||
+ | “部门号”是该关系的主键;员工关系 Emp(员工号,姓名,部门,家庭住址),属性“家庭住址”包含省、市、街道以及门牌号, | ||
+ | |||
+ | 该属性是一个(1)属性。 | ||
+ | |||
+ | (1) | ||
+ | |||
+ | A、简单 | ||
+ | |||
+ | B、复合 √ | ||
+ | |||
+ | C、多值 | ||
+ | |||
+ | D、派生 | ||
+ | |||
+ | 创建 Emp 关系的SQL语句如下: | ||
+ | |||
+ | CREATE TABLE Emp( | ||
+ | |||
+ | 员工号 CHAR(4) (2), | ||
+ | |||
+ | 姓名 CHAR(10), | ||
+ | |||
+ | 部门 CHAR(4), | ||
+ | |||
+ | 家庭住址 CHAR(30), | ||
+ | |||
+ | (3); | ||
+ | |||
+ | ) | ||
+ | |||
+ | (2) | ||
+ | |||
+ | A、PRIMARY KEY √ | ||
+ | |||
+ | B、NULL | ||
+ | |||
+ | C、FOREIGN KEY | ||
+ | |||
+ | D、NOT NULL | ||
+ | |||
+ | (3) | ||
+ | |||
+ | A、PRIMARY KEY NOT NULL | ||
+ | |||
+ | B、PRIMARY KEY UNIQUE | ||
+ | |||
+ | C、FOREIGN KEY REFERENCES Dept(部门名) | ||
+ | |||
+ | D、FOREIGN KEY REFERENCES Dept(部门号) √ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 某数据库系统中,假设有部门关系 Dept(部门号,部门名,负责人,电话),其中, | ||
+ | |||
+ | “部门号”是该关系的主键;员工关系 Emp(员工号,姓名,部门,家庭住址), | ||
+ | |||
+ | 为在员工关系 Emp 中增加一个“工资”字段,其数据类型为数字型并保留2位小数,可采用的SQL语句为()。 | ||
+ | |||
+ | A、ALTER TABLE Emp ADD 工资 CHAR(6,2) | ||
+ | |||
+ | B、UPDATE TABLE Emp ADD 工资 NUMERIC(6,2) | ||
+ | |||
+ | C、ALTER TABLE Emp ADD 工资 NUMERIC(6,2) √ | ||
+ | |||
+ | D、ALTER TABLE Emp MODIFY 工资 NUMERIC(6,2) | ||
+ | |||
+ | |||
+ | === 4)创建索引 === | ||
+ | https://www.bilibili.com/video/BV1hg411V7Bm/?p=95 | ||
+ | |||
+ | 索引是某个表中的一列或者若干列值的集合,以及相应的指向表中物理标识这些值的数据页的逻辑指针清单。 | ||
+ | |||
+ | |||
+ | 聚集索引确定表中数据的物理顺序。 | ||
+ | |||
+ | 由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。 | ||
+ | |||
+ | 但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。 | ||
+ | |||
+ | |||
+ | 非聚集索引的逻辑顺序与磁盘上行的物理存储顺序不同。 | ||
+ | |||
+ | |||
+ | CREATE——创建索引 | ||
+ | |||
+ | ALTER——修改索引 | ||
+ | |||
+ | DROP——删除索引 | ||
+ | |||
+ | UNIQUE——建立唯一索引 | ||
+ | |||
+ | CLUSTERED——建立聚集索引 | ||
+ | |||
+ | NONCLUSTERED——建立非聚集索引 | ||
+ | |||
+ | ASC——索引升序排序 | ||
+ | |||
+ | DESC——索引降序排序 | ||
+ | |||
+ | |||
+ | CREATE UNIQUE INDEX S_SNO ON S(Sno); | ||
+ | |||
+ | CREATE UNIQUE INDEX SPJ_NO ON SPJ(Sno ASC, Pno DESC, JNO ASC); | ||
+ | |||
+ | |||
+ | === 5)查询语句 === | ||
+ | '''SELECT''' [ALL|DISTINCT] <目标表达式>[<目标表达式>]……] | ||
+ | |||
+ | '''FROM''' <表名>[<表名>]…… | ||
+ | |||
+ | ['''WHERE''' <条件表达式>] | ||
+ | |||
+ | ['''GROUP BY''' <列名1> ['''HAVING''' <条件表达式>]] | ||
+ | |||
+ | ['''ORDER BY''' <列名2> [ASC|DESC]……]; | ||
+ | {| class="wikitable" | ||
+ | !处理类型 | ||
+ | !处理子类 | ||
+ | !示例/语法 | ||
+ | |- | ||
+ | |结果排序 | ||
+ | |升序或降序 | ||
+ | |<nowiki>ORDER BY 字段名 DESC|ASC</nowiki> | ||
+ | |- | ||
+ | | rowspan="5" |集函数 | ||
+ | |统计 | ||
+ | |<nowiki>COUNT([DISTINCT|ALL]<列名>)</nowiki> | ||
+ | |- | ||
+ | |计算一列中值的总和 | ||
+ | |<nowiki>SUM([DISTINCT|ALL]<列名>)</nowiki> | ||
+ | |- | ||
+ | |计算一列值的平均值 | ||
+ | |<nowiki>AVG([DISTINCT|ALL]<列名>)</nowiki> | ||
+ | |- | ||
+ | |求一列值中的最大值 | ||
+ | |<nowiki>MAX([DISTINCT|ALL]<列名>)</nowiki> | ||
+ | |- | ||
+ | |求一列值中的最小值 | ||
+ | |<nowiki>MIN([DISTINCT|ALL]<列名>)</nowiki> | ||
+ | |- | ||
+ | |对结果分组 | ||
+ | |将查询结果按列值分组 | ||
+ | |GROUP BY <列名> | ||
+ | |- | ||
+ | |对分组结果筛选 | ||
+ | |对分组结果筛选 | ||
+ | |HAVING<条件表达式> | ||
+ | |} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === 5)查询语句——简单查询 === | ||
+ | 最简单的查询是找出关系中满足特定条件的元组。 | ||
+ | |||
+ | 只需要使用3个保留字 SELECT、FROM 和 WHERE。 | ||
+ | |||
+ | 设有学生、课程和学生选课关系,其基本表分别用S、C和SC表示。 | ||
+ | |||
+ | S(Sno, Sname, SD, Sage, Sex) 属性表示学号、姓名、系、年龄和性别 | ||
+ | |||
+ | C(Cno, Cname) 属性表示课程号、课程名 | ||
+ | |||
+ | SC(Sno, Cno, Grade) 属性表示学号、课程号和成绩 | ||
+ | |||
+ | |||
+ | □查询学生基本表中计算机系CS的学生学号、姓名及年龄 | ||
+ | |||
+ | SELECT Sno, Sname, Sage | ||
+ | |||
+ | FROM S | ||
+ | |||
+ | WHERE SD='CS'; | ||
+ | |||
+ | CS表示计算机系 | ||
+ | |||
+ | |||
+ | |||
+ | === 5)查询语句——连接、嵌套查询 === | ||
+ | 若涉及两个以上的表,则称为连接查询 | ||
+ | |||
+ | |||
+ | □检索选修了课程号为C1的学生,列出学号和学生姓名 | ||
+ | |||
+ | SELECT Sno, Sname | ||
+ | |||
+ | FROM S, SC | ||
+ | |||
+ | WHERE S.Sno=SC.Sno AND SC.Cno='C1'; | ||
+ | |||
+ | |||
+ | |||
+ | □检索选修了课程号为C1或C3的学生学号和学生姓名 | ||
+ | |||
+ | SELECT Sno, Sname | ||
+ | |||
+ | FROM S, SC | ||
+ | |||
+ | WHERE S.Sno=SC.Sno AND (SC.Cno='C1' OR SC.Cno='C3'); | ||
+ | |||
+ | |||
+ | |||
+ | === 5)查询语句——分组查询 === | ||
+ | |||
+ | |||
+ | 1)GROUP BY 子句 | ||
+ | |||
+ | □对于学生数据库中的SC关系,查询每个学生的平均成绩 | ||
+ | |||
+ | SELECT Sno, AVG(Grade) | ||
+ | |||
+ | FROM SC | ||
+ | |||
+ | GROUP BY Sno; | ||
+ | |||
+ | |||
+ | 2)HAVING 子句 | ||
+ | |||
+ | □查询平均成绩大于等于80的学生学号和其平均成绩,并按照学号的降序排列 | ||
+ | |||
+ | SELECT Sno, SVG(Grade) as avgGrade | ||
+ | |||
+ | FROM SC | ||
+ | |||
+ | GROUP BY Sno | ||
+ | |||
+ | HAVING AVG(Grade)>=80 | ||
+ | |||
+ | ORDER BY S.Sno DESC; | ||
+ | |||
+ | |||
+ | |||
+ | === 6)别名和匹配 === | ||
+ | AS子句为关系和属性指定不同的名称或别名 | ||
+ | |||
+ | Old-name AS New-name 进行设置别名 | ||
+ | |||
+ | |||
+ | LIKE 用于对字符串:%匹配任意字符串 _匹配任意一个字符 | ||
+ | |||
+ | 例如: | ||
+ | |||
+ | SELECT Sname | ||
+ | |||
+ | FROM S | ||
+ | |||
+ | WHERE Addr LIKE '%科技路%' 匹配含有科技路的地址 | ||
+ | |||
+ | |||
+ | SELECT Sname, Sno | ||
+ | |||
+ | FROM S | ||
+ | |||
+ | WHERE Sname LIKE '_小芳' 匹配名为小芳的单姓学生 | ||
+ | |||
+ | |||
+ | === 考点3:查询 === | ||
+ | 设有公民关系P(姓名,身份证号,年龄,性别,联系电话,家庭地址), | ||
+ | |||
+ | (1)唯一标识关系P中的每一个元组, | ||
+ | |||
+ | A、姓名 | ||
+ | |||
+ | B、身份证号 √ | ||
+ | |||
+ | C、联系电话 | ||
+ | |||
+ | D、家庭住址 | ||
+ | |||
+ | 并且应该用(2)来进行主键约束。 | ||
+ | |||
+ | A、NULL | ||
+ | |||
+ | B、NOT NULL | ||
+ | |||
+ | C、PRIMARY KEY √ | ||
+ | |||
+ | D、FOREIGN KEY | ||
+ | |||
+ | 该关系中,(3)属于复合属性。 | ||
+ | |||
+ | A、姓名 | ||
+ | |||
+ | B、身份证号 | ||
+ | |||
+ | C、联系电话 | ||
+ | |||
+ | D、家庭住址 √ | ||
+ | |||
+ | |||
+ | 若要将身份证号为“100120189502101111”的人的姓名修改为“刘丽华”,则对应的SQL语句为: | ||
+ | |||
+ | UPDATE P(4) | ||
+ | |||
+ | WHERE (5)= '100120189502101111'; | ||
+ | |||
+ | 若要查询家庭住址包含“朝阳区”的人的姓名及联系电话,则对应的SQL语句为: | ||
+ | |||
+ | SELECT 姓名,电话 | ||
+ | |||
+ | FROM P | ||
+ | |||
+ | WHERE 家庭住址 (6); | ||
+ | |||
+ | (4) | ||
+ | |||
+ | A、SET 姓名='刘丽华' √ | ||
+ | |||
+ | B、Modify 姓名='刘丽华' | ||
+ | |||
+ | C、SET 姓名=刘丽华 | ||
+ | |||
+ | D、Modify 姓名=刘丽华 | ||
+ | |||
+ | |||
+ | (5) | ||
+ | |||
+ | A、刘丽华 | ||
+ | |||
+ | B、'刘丽华' | ||
+ | |||
+ | C、身份证号 √ | ||
+ | |||
+ | D、'身份证号' | ||
+ | |||
+ | |||
+ | (6) | ||
+ | |||
+ | A、IN (朝阳区) | ||
+ | |||
+ | B、like '朝阳区' | ||
+ | |||
+ | C、IN ('朝阳区') | ||
+ | |||
+ | D、like '%朝阳区%' √ |
2022年9月29日 (四) 10:35的最新版本
https://www.bilibili.com/video/BV1hg411V7Bm/?p=94
1)创建表
CREATE TABLE <表名1> (
<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]]…… [,<表级完整性约束条件>]); |
数据类型:
- 字符型:char(N)
- 整型:int
- 浮点型:float
- 日期型:date YYYY-MM-DD
列级完整性约束:
- NULL(可以取空值)、NOT NULL(不能取空值)
- UNIQUE(取值唯一)
- PRIMARY KEY(列名)主键
- FOREIGN KEY(列名1) REFERENCES 表名2(列名2)外键
例题1:设有学生、课程和学生选课关系模式分别用基本表S、C和SC表示,
其中:S(Sno,Sname,SD,Sage,Sex),属性表示学号、姓名、系、年龄和性别;
C(Cno,Cname,teacher),属性表示课程号、课程名和授课教师;
SC(Sno,Cno,Grade),属性表示学号、课程号和成绩。
除年龄与成绩的数据类型为整型int外,其余属性均为字符型char。
CREATE TABLE S (
Sno char(5) PRIMARY KEY,
Sname char(16) NOT NULL,
SD char(10),
Sage int,
Sex char(2)
);
CREATE TABLE C(
Cno char(2) PRIMARY KEY,
Cname char(16) UNIQUE,
teacher char(8)
);
CREATE TABLE SC (
Sno char(5),
Grade int,
PRIMARY KEY(Sno, Cno),
FOREIGN KEY(Sno) REFERENCES S(Sno),
FOREIGN KEY(Cno) REFERENCES C(Cno)
);
考点1:创建表
某高校教学管理系统中的院系关系 Department 和学生关系 Students 的模式分别为:
Department(院系号,院系名,负责人,办公电话),学生关系 Students(学号,姓名,身份证号,院系号,联系电话,家庭住址)。
Department 中的“院系号”唯一标识一个院系,Students 中的“学号”能唯一标识一名学生,“家庭住址”可进一步分为邮编、省、市、街道。
根据以上描述可知,关系 Students 的候选键为(),
A、学号
B、身份证号和院系号
C、学号和身份证号 √
D、学号和院系号
“家庭住址”为()。
A、简单属性
B、复合属性 √
C、多值属性
D、派生属性
某高校教学管理系统中的院系关系 Department 和 学生关系 Students。
Department 中的“院系号”唯一标识一个院系,Students 中的“学号”能唯一标识一名学生。
创建 Students 的SQL语句如下,请填补其中的空缺。
CREATE TABLE Students (
学号 CHAR(8) PRIMARY KEY,
姓名 CHAR(16),
身份证号 CHAR(18),
院系号 CHAR(4),
联系电话 CHAR(13),
家庭住址 CHAR(30),
FOREIGN KEY();
A、(联系电话) REFERENCES Department(办公电话)
B、(院系号) REFERENCES Department(院系号) √
C、(院系号) REFERENCES Students(学号)
D、(负责人号) REFERENCES Students(学号)
2)修改和删除
ALTER TABLE <表名>
[ADD <新列名><数据类型><列级完整性约束条件>] 添加属性列
[DROP <列名/完整性约束条件>] 删除属性列
[MODIFY/CHANGE<列名><数据类型>] 修改属性列的数据类型
[CHANGE <列名><新列名><数据类型>] 修改属性列名
DROP TABLE <表名> 例如用“DROP TABLE Student”删除表 Student
3)数据更新
操作类别 | 语法 | 示例 |
---|---|---|
插入数据 | INSERT INTO <表名>
[(<属性列1> [,<属性列2>……)] VALUES (<常量1>[,<常量2>]……); 注:VALUES子句可用子查询替代 |
INSERT INTO student
VALUES ('95020', '李四', '男', 'CS', '18'); INSERT INTO SC(Sno, Cno) VALUES('95020', '1'); |
修改数据 | UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…… [WHERE <条件>]; |
将学生95001的年龄改为23岁
UPDATE student SET Sage=23 WHERE Sno='95001'; |
删除数据 | DELETE
FROM <表名> [WHERE <条件>]; |
删除学号为95019的学生记录
DELETE FROM student WHERE Sno='95019'; |
考点2:数据修改
某数据库系统中,假设有部门关系 Dept(部门号,部门名,负责人,电话),其中,
“部门号”是该关系的主键;员工关系 Emp(员工号,姓名,部门,家庭住址),属性“家庭住址”包含省、市、街道以及门牌号,
该属性是一个(1)属性。
(1)
A、简单
B、复合 √
C、多值
D、派生
创建 Emp 关系的SQL语句如下:
CREATE TABLE Emp(
员工号 CHAR(4) (2),
姓名 CHAR(10),
部门 CHAR(4),
家庭住址 CHAR(30),
(3);
)
(2)
A、PRIMARY KEY √
B、NULL
C、FOREIGN KEY
D、NOT NULL
(3)
A、PRIMARY KEY NOT NULL
B、PRIMARY KEY UNIQUE
C、FOREIGN KEY REFERENCES Dept(部门名)
D、FOREIGN KEY REFERENCES Dept(部门号) √
某数据库系统中,假设有部门关系 Dept(部门号,部门名,负责人,电话),其中,
“部门号”是该关系的主键;员工关系 Emp(员工号,姓名,部门,家庭住址),
为在员工关系 Emp 中增加一个“工资”字段,其数据类型为数字型并保留2位小数,可采用的SQL语句为()。
A、ALTER TABLE Emp ADD 工资 CHAR(6,2)
B、UPDATE TABLE Emp ADD 工资 NUMERIC(6,2)
C、ALTER TABLE Emp ADD 工资 NUMERIC(6,2) √
D、ALTER TABLE Emp MODIFY 工资 NUMERIC(6,2)
4)创建索引
https://www.bilibili.com/video/BV1hg411V7Bm/?p=95
索引是某个表中的一列或者若干列值的集合,以及相应的指向表中物理标识这些值的数据页的逻辑指针清单。
聚集索引确定表中数据的物理顺序。
由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。
但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
非聚集索引的逻辑顺序与磁盘上行的物理存储顺序不同。
CREATE——创建索引
ALTER——修改索引
DROP——删除索引
UNIQUE——建立唯一索引
CLUSTERED——建立聚集索引
NONCLUSTERED——建立非聚集索引
ASC——索引升序排序
DESC——索引降序排序
CREATE UNIQUE INDEX S_SNO ON S(Sno);
CREATE UNIQUE INDEX SPJ_NO ON SPJ(Sno ASC, Pno DESC, JNO ASC);
5)查询语句
SELECT [ALL|DISTINCT] <目标表达式>[<目标表达式>]……]
FROM <表名>[<表名>]……
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]……];
处理类型 | 处理子类 | 示例/语法 |
---|---|---|
结果排序 | 升序或降序 | ORDER BY 字段名 DESC|ASC |
集函数 | 统计 | COUNT([DISTINCT|ALL]<列名>) |
计算一列中值的总和 | SUM([DISTINCT|ALL]<列名>) | |
计算一列值的平均值 | AVG([DISTINCT|ALL]<列名>) | |
求一列值中的最大值 | MAX([DISTINCT|ALL]<列名>) | |
求一列值中的最小值 | MIN([DISTINCT|ALL]<列名>) | |
对结果分组 | 将查询结果按列值分组 | GROUP BY <列名> |
对分组结果筛选 | 对分组结果筛选 | HAVING<条件表达式> |
5)查询语句——简单查询
最简单的查询是找出关系中满足特定条件的元组。
只需要使用3个保留字 SELECT、FROM 和 WHERE。
设有学生、课程和学生选课关系,其基本表分别用S、C和SC表示。
S(Sno, Sname, SD, Sage, Sex) 属性表示学号、姓名、系、年龄和性别
C(Cno, Cname) 属性表示课程号、课程名
SC(Sno, Cno, Grade) 属性表示学号、课程号和成绩
□查询学生基本表中计算机系CS的学生学号、姓名及年龄
SELECT Sno, Sname, Sage
FROM S
WHERE SD='CS';
CS表示计算机系
5)查询语句——连接、嵌套查询
若涉及两个以上的表,则称为连接查询
□检索选修了课程号为C1的学生,列出学号和学生姓名
SELECT Sno, Sname
FROM S, SC
WHERE S.Sno=SC.Sno AND SC.Cno='C1';
□检索选修了课程号为C1或C3的学生学号和学生姓名
SELECT Sno, Sname
FROM S, SC
WHERE S.Sno=SC.Sno AND (SC.Cno='C1' OR SC.Cno='C3');
5)查询语句——分组查询
1)GROUP BY 子句
□对于学生数据库中的SC关系,查询每个学生的平均成绩
SELECT Sno, AVG(Grade)
FROM SC
GROUP BY Sno;
2)HAVING 子句
□查询平均成绩大于等于80的学生学号和其平均成绩,并按照学号的降序排列
SELECT Sno, SVG(Grade) as avgGrade
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=80
ORDER BY S.Sno DESC;
6)别名和匹配
AS子句为关系和属性指定不同的名称或别名
Old-name AS New-name 进行设置别名
LIKE 用于对字符串:%匹配任意字符串 _匹配任意一个字符
例如:
SELECT Sname
FROM S
WHERE Addr LIKE '%科技路%' 匹配含有科技路的地址
SELECT Sname, Sno
FROM S
WHERE Sname LIKE '_小芳' 匹配名为小芳的单姓学生
考点3:查询
设有公民关系P(姓名,身份证号,年龄,性别,联系电话,家庭地址),
(1)唯一标识关系P中的每一个元组,
A、姓名
B、身份证号 √
C、联系电话
D、家庭住址
并且应该用(2)来进行主键约束。
A、NULL
B、NOT NULL
C、PRIMARY KEY √
D、FOREIGN KEY
该关系中,(3)属于复合属性。
A、姓名
B、身份证号
C、联系电话
D、家庭住址 √
若要将身份证号为“100120189502101111”的人的姓名修改为“刘丽华”,则对应的SQL语句为:
UPDATE P(4)
WHERE (5)= '100120189502101111';
若要查询家庭住址包含“朝阳区”的人的姓名及联系电话,则对应的SQL语句为:
SELECT 姓名,电话
FROM P
WHERE 家庭住址 (6);
(4)
A、SET 姓名='刘丽华' √
B、Modify 姓名='刘丽华'
C、SET 姓名=刘丽华
D、Modify 姓名=刘丽华
(5)
A、刘丽华
B、'刘丽华'
C、身份证号 √
D、'身份证号'
(6)
A、IN (朝阳区)
B、like '朝阳区'
C、IN ('朝阳区')
D、like '%朝阳区%' √