数据库-基础篇 第六讲(含习题)

SQL语言概述

  1. (1)DDL语句引导词 Create Alter Drop
    (2)DML语句引导词:Insert, Delete, Update, Select
    (3)DCL语句引导词:Grant(授权), Revoke(收回授权)
  2. 交互式SQL→嵌入式SQL→动态SQL

利用SQL建立数据库

  1. 学生选课数据库
    数据库-基础篇 第六讲(含习题)
    数据库-基础篇 第六讲(含习题)
  2. 建立数据库
    (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语言进行查询

  1. 单表查询 Select-From-Where
    Select 列名
    From 表名
    【Where 检索条件】;

检索学生标中的所有信息:
Select *
From Student;

检索学生表中所有学生 的姓名&年龄:
Select Sname,Sage
From Student;

检索学生表中年龄小于19周岁的学生的年龄及姓名:
Select Sage, Sname
From Student
Where Sage<19;

  1. 检索条件的书写:与选择运算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’;

  1. 结果唯一性问题

选课表中检索成绩大于80分的所有学号
Select S#
From SC
Where Score>80

//有重复元组出现

Select DISTINCT S#:防止重复元素,结果唯一性

  1. 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;

  1. 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;

  1. 重名处理:解决同一个表的连接问题
    列名 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. (1) 元组新增Insert
    (2)元组更新Update
    (3)元组删除delete
  2. 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语句

  1. 元组删除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);

删除一批元组时也检查完整性;

  1. 元组更新命令:
    Update 表名
    Set 列名=表达式 | 子查询
    【Where】;

将所有教师工资上涨5%:
Update Teacher
Set Salary = Salary
1.05;*

将所有计算机系教师工资上涨5%:
Update Teacher
Set Salary = Salary
1.1
Where D# in
(Select D# from Dept Where Dname=‘计算机’);*

利用SQL修正与撤销

数据库-基础篇 第六讲(含习题)

  1. 撤销表:
    drop table 表名;
  2. 撤销数据库:
    drop database 数据库名;
  3. 指定当前数据库:
    use 数据库名;
  4. 关闭当前数据库:
    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你选对了