数据库-基础篇 第六讲(含习题)
SQL语言概述
- (1)DDL语句引导词 Create Alter Drop
(2)DML语句引导词:Insert, Delete, Update, Select
(3)DCL语句引导词:Grant(授权), Revoke(收回授权) - 交互式SQL→嵌入式SQL→动态SQL
利用SQL建立数据库
- 学生选课数据库
- 建立数据库
(1)定义数据库和表
1)create database 数据库名;
create database SCT;
2)create table 表名(列名 数据类型 [Primary key|Unique]【Not null】[,列名,数据类型…】
primary key:主键,每个表只有一个
Unique:候选键
not null:非空约束
create table student(S# char[8] not null,Sname char(10) , Ssex char(2), Sage integer, D# char(2), Sclass char(6));
create table course(C# char[3], Cname char(12), Chours integer, Credit float(1), T# char(3));
(2)向表中追加元素
1)追加元组Insert
insert into 表名【(列名【,列名】…】
values (值【,值】,…)
insert into student
values (‘9803030101’,‘张三’,‘男’,20,‘03’,‘980303’)
*insert into course
values(‘001’,‘数据库’,40,6,‘001’)
insert into course(Cname, C#,Credit,Chours,T#)
values(‘数据库’,‘001’,6,40,‘001’)*
利用SQL语言进行查询
-
单表查询 Select-From-Where
Select 列名
From 表名
【Where 检索条件】;
检索学生标中的所有信息:
Select *
From Student;
检索学生表中所有学生 的姓名&年龄:
Select Sname,Sage
From Student;
检索学生表中年龄小于19周岁的学生的年龄及姓名:
Select Sage, Sname
From Student
Where Sage<19;
- 检索条件的书写:与选择运算con条件写法一样,只是用and or not表示
检索教师表中工资少于1500或大于2000且是03系的教师姓名:
Select Tname
From Teacher
Where (Salary<1500 or Salary>2000) and D#=‘03’;
求或者学过001课程,或者学过002课程的学生学号
Select S#
From SC
Where c#=‘001’ or c#=‘002’;
- 结果唯一性问题
选课表中检索成绩大于80分的所有学号
Select S#
From SC
Where Score>80
//有重复元组出现
Select DISTINCT S#:防止重复元素,结果唯一性
- Select-From-Where 结果排序
Select
From
Where
order by 列名 [asc|desc]
默认为升序排列
按学号由小到大的顺序显示学生的学号和姓名:
Select S#, Sname
From Student
order by S# asc;
检索002号课大于80分的同学学号并且按成绩从高到低显示:
Select S#
From SC
Where Score>80 and C#=‘002’
order by score desc;
- Select-From-Where模糊查询
列名 【not】like “字符串”
% 匹配0或多个字符
—— 匹配任意单个字符
\ 转义字符,使符号不表达模糊查询的含义
检索所有姓张的学号和姓名:
Select Sname, S#
From Student
Where Sname like ‘张%’;
张某某:
Select Sname, S#
From Student
Where Sname like ‘张_ _’;
不姓张:
Select Sname, S#
From Student
Where Sname Not like ‘张%’;
利用SQL进行多表联合查询
Select-From-Where
(1)对表进行连接,”,”代表笛卡儿积
(2)检索条件包含连接条件
按001号课成绩由高到低显示所有学生姓名:
Select Sname
From Student, SC
Where Student.S#=SC.S# and SC.C#=‘001’
order by Score DESC;
按数据库成绩从高到低显示所有同学姓名:
Select Sname
From Student, SC, Course
Where Student.S# = SC.S# and SC.c#=Course.C# and Cname=‘数据库’
order by Score DECS;
- 重名处理:解决同一个表的连接问题
列名 as 列别名
表名 as 表别名
求有薪水差的任意两位教师:
Select T1.Tname as Teacher1, T2.Tname as Teacher2
From Teacher T1, Teacher T2
Where T1.Salary>T2.Salary;
求年龄有差异的任意两名同学的姓名:
Select S1.Sname as Sname1, S2.Sname as Sname2
From Student S1, Student S2
Where S1.Sage>S2.Sage
求001号课程有成绩差的任意两位同学:
Select SC1.S# as S#1, SC2.S# as S#2
From SC S1, SC S2
Where S1.Score>S2.Score;
结合SELECT的INSERT语句
- (1) 元组新增Insert
(2)元组更新Update
(3)元组删除delete - Insert命令的两种形式
(1)单一元组新增
insert into 表名 列名
values 值
(2)批数据新增
insert into 表名 列名
子查询(select-from -where)
在插入式会自动检测插入内容是否符合完整性,若不符合则插入失败
例:新建Table: SCt(S#, C#, Score)将检索到的成绩及格的同学记录到新表中
Insert into SCt(S#, C#, Score)
Select S#, C#, Score
From SC
Where SC.score>=60;
追加成绩优秀的同学记录
Insert into SCt(S#, C#, Score)
Select S#, C#, Score
From SC
Where SC.score>=90;
结合SELECT的UPDATE和DELETE语句
- 元组删除Delete命令:
Delete From 表名 【Where 条件表达式】;
删除SC表所有内容:
Delete from SC;
删除980101号同学所选的所有课程:
Delete from SC
Where SC.S#=‘980101’;
删除自动控制系的所有学生:
Delete from Student
Where D# in
(Select D# from Dept Where XXXXXX);
删除一批元组时也检查完整性;
- 元组更新命令:
Update 表名
Set 列名=表达式 | 子查询
【Where】;
将所有教师工资上涨5%:
Update Teacher
Set Salary = Salary1.05;*
将所有计算机系教师工资上涨5%:
Update Teacher
Set Salary = Salary1.1
Where D# in
(Select D# from Dept Where Dname=‘计算机’);*
利用SQL修正与撤销
- 撤销表:
drop table 表名; - 撤销数据库:
drop database 数据库名; - 指定当前数据库:
use 数据库名; - 关闭当前数据库:
close 数据库名;
习题
1
SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能_________。
A.
数据定义
B.
数据查询
C.
数据操纵
D.
数据控制
正确答案:A你选对了
2
已知有: 学生表Student(S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6))中,若要在学生表中追加一个元组“学号为98030101的男同学张三,年龄为20,所属系别03,所在班级980301”,则可用_________。
A.
INSERT INTO Student VALUES(‘98030101’,‘张三’,‘男’, 20,‘03’,‘980301’);
B.
ADD INTO Student VALUES(‘98030101’,‘张三’,‘男’,20,‘03’,‘980301’);
C.
INSERT INTO Student VALUES (9803010, 张三, 男, 20, 03, 980301);
D.
ADD INTO Student VALUES(98030101, 张三, 男, 20,03,980301);
正确答案:A你选对了
3
有学生表Student(S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6))。要检索学生表中“所有年龄小于等于19岁的学生的年龄及姓名”,SQL语句正确的是_________。
A.
Select Sage, Sname From Student Where Sage <= 19;
B.
Select Sname From Student Where Sage <= 19;
C.
Select * From Student Where Sage <= 19;
D.
Select Sage, Sname From Student;
正确答案:A你选对了
4
若用如下的SQL语句创建一个表SC:
CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER, NOTE CHAR(20));
向SC表中插入如下行时,_________行可以被插入。
A.
(‘200823’,‘101’,NULL,NULL)
B.
(‘201009’,‘101’,NULL,必修)
C.
(NULL,‘103’,80,‘选修’)
D.
(‘201132’,NULL,86,‘’)
正确答案:A你选对了
5
有学生表Student(S# char(8), Sname char(10), Ssex char(2),Sage integer, D# char(2), Sclass char(6))。若要“检索名字为张某某的所有同学姓名”,SQL语句正确的是_________。
A.
Select Sname From Student Where Sname Like ‘张____’;
B.
Select Sname From Student Where Sname Like ‘张%’;
C.
Select Sname From Student Where Sname Like ‘张_’;
D.
Select Sname From Student Where Sname Not Like ‘张_ _’;
正确答案:A你选对了
6
在关系模型中关于结果唯一性问题,结果排序问题,模糊查询问题,如下说法不正确的是_________。
A.
结果排序是在Select语句中通过增加order by子句实现的,后只能跟DESC或省略为降序。
B.
在Table中要求无重复元组是通过定义Primary key或Unique来保证的;而在检索结果中要求无重复元组, 是通过在SELECT子句中引入DISTINCT保留字来实现的。
C.
模糊查询是通过在Select语句的Where子句中引入运算符like来实现的
D.
在SELECT语句的Like条件中,用“%”去匹配字符%,用_ 去匹配字符_
正确答案:A你选对了
7
有关系表SC ( S# , C#, Score),求既学过“001”号课又学过 “002”号课的所有学生的学号,下列SQL语句正确的是_________。
A.
Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001’ and S2.C#=‘002 ;
B.
Select S# From SC Where C# = ‘001’ AND C#=‘002’;
C.
Select S2.S# From SC S1, SC S2 Where S1.S# = S2.S# or S1.C#=‘001’ and S2.C#=‘002 ;
D.
Select S1.S# From SC S1 Where S1. C# = ‘001’ AND S1.C#=‘002’;
正确答案:A你选对了
8
有关系表SC(S# , C#, Score),求“001”号课成绩比“002”号课成绩高的所有学生的学号。下列SQL语句正确的是_________。
A.
Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001’ and S2.C#=‘002’ and S1.Score > S2.Score;
B.
Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001’ and S2.C#=‘002’ and S2.Score > S1.Score;
C.
Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001’ and S2.C#=‘002 ;
D.
Select * From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001’ and S2.C#=‘002’ and S1.Score > S2.Score;
正确答案:A你选对了
9
假设学生关系S(S#,SNAME,SEX),课程关系C(C#,CNAME),学生选课关系SC(S#,C#,GRADE)。要查询选修“Computer”课的男生姓名,将涉及到关系_________。
A.
S,C,SC
B.
S
C.
S,SC
D.
SC
正确答案:A你选对了
10
SQL语言中,删除一个表的命令是________。
A.
DROP
B.
DELETE
C.
CLEAR
D.
REMOVE
正确答案:A你选对了
11
学生关系S(S#,Sname,Ssex,Sage,D#,Sclass),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是_________。
A.
ALTER TABLE S DROP Sage
B.
DELETE Sage from
C.
UPDATE S Sage
D.
ALTER TABLE S ‘Sage’
正确答案:A你选对了
12
若要撤销数据库中已经存在的表S,可用_________。
A.
DROP TABLE S
B.
DELETE TABLE S
C.
DELETE S
D.
DROP S
正确答案:A你选对了
13
WHERE条件中出现 LIKE 'A%’,下面哪一个结果是可以被检索出来的________。
A.
BAI
B.
AILI
C.
CCA
D.
以上所有都可以被检索出来
正确答案:A你选对了
14
查询时,若要输出无重复的记录,SELECT子句中使用的保留字是:_________。
A.
DISTINCT
B.
ALL
C.
TOP N
D.
TOP N PERCENT
正确答案:A你选对了
15
查询结果输出时要求按“总评成绩”降序排列,相同者按“性别”升序,正确的子句是_________。
A.
ORDER BY 总评成绩 DESC,性别
B.
ORDER BY 总评成绩,性别 DESC
C.
ORDER BY 总评成绩 DESC,性别 DESC
D.
ORDER BY 总评成绩 ASC,性别 DESC
正确答案:A你选对了
16
在下列SQL语句中,属于数据控制语言DCL的是_________。
1、CREATE 2、SELECT 3、UPDATE 4、GRANT 5、DELETE 6、ALTER 7、INSERT 8、REVOKE
A.
4,8
B.
1,5,6,7
C.
2,3,6,8
D.
1,5,7
正确答案:A你选对了
17
已知关系S(S#,SN,AGE,SEX),SC(C#,S#,GRADE),C(C#,CN,TEACHER)。若要检索学生姓名及其选修课程的课程号和成绩,正确的SELECT语句是_________。
A.
SELECT S.SN,SC.C#,SC.GRADE FROM S,SC WHERE S.S#=SC.S#
B.
SELECT S.SN,SC.C#,SC.GRADE FROM S WHERE S.S#=SC.S#
C.
SELECT S.SN,SC.C#,SC.GRADE FROM SC WHERE S.S#=SC.GRADE
D.
SELECT S.SN,SC.C#,SC.GRADE FROM S.SC
正确答案:A你选对了
18
INSERT INTO Goods(Name,Storage,Price) VALUES (’Keyboard’,3000,90.00)的作用是________。
A.
添加数据到一行中的部分列
B.
添加数据到一行中的所有列
C.
插入默认值
D.
插入多个行
正确答案:A你选对了
19
已知如下关系:学生Student(S#, Sname),课程Course(C#, Cname, T#),选课SC(S#, C#, Score),教师T(T#, Tname)。其中S#为学号,Sname为学生命名,C#为课号,Cname为课程名,T#为教师编号,Score为成绩,Tname为教师名。
阅读SQL语句:
SELECT Sname FROM Student, SC, Course WHERE Student.S#=SC.S# AND
Course.C#=SC.C# AND T#= ‘T01’ AND Score<60;
关于其查询结果,下列说法正确的是_____ 。
A.
学习T01号教师讲授课程不及格的所有学生的姓名
B.
学习T01号教师讲授课程及格的所有学生的姓名
C.
学习非T01号教师讲授课程不及格的所有学生的姓名
D.
课程不及格的所有学生的姓名
正确答案:A你选对了
20
如下几个表所示学生、课程、必修课和选课关系,用SQL语言实现下列操作。
将“选课”表中的1002号课的所有成绩提高10分,正确的SQL语句是_____。
A.
UPDATE 选课 SET 成绩=成绩+10 WHERE 课号=‘1002’;
B.
UPDATE 选课 SET 成绩=成绩+10 WHERE 课号=1002;
C.
SET 选课 UPDATE 成绩=成绩+10 WHERE 课号=‘1002’;
D.
UPDATE 选课 SET 成绩+10 WHERE 课号=‘1002’;
正确答案:A你选对了
21
如下几个表所示学生、课程、必修课和选课关系,用SQL语言实现下列操作。
从“课程”表中将2003号课去掉,正确的SQL语句是_____。
A.
DELETE FROM 课程 WHERE 课号=‘2003’;
B.
DELETE FROM 课程 WHERE 课号=2003;
C.
DELETE FROM 课程 WHERE ‘2003’;
D.
DELETE FROM 课程.课号=‘2003’;
正确答案:A你选对了
22
如下几个表所示学生、课程、必修课和选课关系。
已知SQL语句“SELECT DISTINCT 课号 FROM 必修课;”,其正确的检索结果是_____。
A.
B.
C.
D.
其它选项都不正确
正确答案:A你选对了
23
如下几个表所示学生、课程、必修课和选课关系。
已知SQL语句是“SELECT DISTINCT 学号 FROM 选课 WHERE 课号=‘1002’ OR 课号=‘2002’;正确的结果是_____。
A.
B.
C.
D.
正确答案:A你选对了
24
在SELECT语句中,与关系代数中s运算符对应的是________子句。
A.
WHERE
B.
SELECT
C.
FROM
D.
GROUP BY
正确答案:A你选对了
25
在SELECT语句中,与关系代数中p运算符对应的是________子句。
A.
SELECT
B.
FROM
C.
WHERE
D.
GROUP BY
正确答案:A你选对了
26
已知SC(S#, C#, Score)关系的元组,如下所示{<S1, C1, 80>,<S1, C2, 90>,<S1, C3, 60>, <S2, C1, 75>, <S2, C2, 80>, <S3, C2, 85>, <S3, C3, 75>, <S4, C2, 80>, <S5, C3, 50>, <S5, C1, 85>}。关于“SELECT S# FROM SC WHERE C#=‘C1’ and C# = ‘C3’”,下列说法正确的是___ _____。
A.
其它说法都不正确
B.
该查询结果中的元组为{ S1, S5 };
C.
该查询结果中的元组为{ S1, S2, S3, S5 };
D.
该查询结果中的元组为{ S1 };
正确答案:A你选对了