数据库系统原理实验—SQL学习总结

一,CREATE(创建)

1.创建模式

要先有个用户。
在没有说明模式名的情况下,默认和用户名相同

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

2.创建表

CREATE TABLE <表名>(
<列名><数据类型>[列级完整性条件]
[,<列名><数据类型>[列级完整性条件]]
...
[<表级完整性约束条件>]);

3.创建索引

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

4.创建视图

CREATE VIEW <视图名>[(<列名>[<列名>...)]]
AS<子查询>
[WITH CHECK OPTION];

5.创建角色

CREATE ROLE <角色名>

二,INSERT(插入)

1.插入信息到表里

INSERT
INTO <表名> [(<属性列1>[,<属性列2 >)]
VALUES (<常量1> [,<常量2>]);
  • 1.插入的表后没写顺序,则插入的信息必须和表中的书行一致。
  • 2.插入时注意表中不能为空和有外码约束的属性

三,ALTER(修改)

1.修改表

ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;

ADD 子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN 子句用于删除表中的列

  • 如果指定了 CASCADE 短语,则自动删除引用了该列的其他对象
  • 如果指定了 RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列

DROP CONSTRAINT 子句用于删除指定的完整性约束条件
ALTER COLUMN 子句用于修改原有的列定义,包括修改列名和数据类型

四,SELECT(查询)

SELECT [ALL|DISTINCT]
<目标列表达式> [别名] [ ,<目标列表达式> [别名]] …
FROM <表名或视图名> [别名]
[ ,<表名或视图名> [别名]] …
|(<SELECT语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

1.查询指定列

SELECT <>或者*--*代表全部列
FROM <>;

2.查询经过计算的值

SELECT Sname,2021-Sage   --计算出生年份
FROM Student;

3.使用列别名改变查询结果的列标题

   SELECT Sname NAME,'Year of Birth:'  BIRTH,
   2021-Sage  BIRTHDAY,LOWER(Sdept)  DEPARTMENT
   FROM Student;

4.消除取值重复的行

 -- SELECT (ALL) Sno  FROM SC;没有指定DISTINCT关键词 ,则缺省ALL
SELECT DISTINCT Sno 
FROM SC

DISTINCT关键词,可以去掉表中重复的行

SELECT DISTINCT Sno
    FROM SC; 

5.比较大小

--查询所有年龄在20岁以下的血红色呢个姓名及其年龄。
SELECT Sname,Sage
FROM Student
WHERE Sage<20

6.确定范围

--查询年龄在20~23(包括20岁和23岁)之间的学生的姓名,系别和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23

7.集合的查询

SELECT Sname,Ssex
FROM Student
WHERE Sdept [NOT] IN ('CS','MA','IS')

8.模糊查询

1.% (百分号) 代表任意长度(长度可以为0)的字符串
2._ (下横线) 代表任意单个字符。

--where [NOT] LIKE  ‘<匹配串>’  [ESCAPE ‘ <换码字符>’]
-- 匹配串为含通配符的字符串的模糊查询 姓刘的同学
SELECT Sname, Sno, Ssex
FROM Student
WHERE  Sname LIKE '刘%';
--查询名字中第2个字为"阳"字的学生的姓名和学号。
SELECT Sname,Sno
FROM     Student
WHERE  Sname LIKE '_ _阳%';
--数据库字符集为ASCII时,一个汉字需要两个_
--数据库字符集为 GBK 时,一个汉字需要一个_

9.使用换码字符将通配符转义为普通字符

--查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM     Course
WHERE  Cname LIKE 'DB\_Design' ESCAPE '\ ' ;

10.涉及空值的查询

SELECT Sno,Cno
FROM sc
WHERE Grade IS NULL

11.多重条件查询

逻辑运算符:AND和 OR来连接多个查询条件
1.AND的优先级高于OR
2.可以用括号改变优先级

--查询计算机系年龄在20岁以下的学生姓名。
SELECT Sname
FROM Student
WHERE Sdept='CS' AND Sage<20

12.ORDER BY子句

ORDER BY可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为ASC

--查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC

13.聚集函数

◼ 统计元组个数 COUNT(*)
◼ 统计一列中值的个数 COUNT([DISTINCT|ALL] <列名>)
◼ 计算一列值的总和 SUM([DISTINCT|ALL] <列名>)
◼ 计算一列值的平均值 AVG([DISTINCT|ALL] <列名>)
◼ 求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)

--查询每个选修课程的学生平均分
SELECT AVG(Grade)
FROM SC
GROUP BY Cno
--查询选修了2门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>=2--要用having(WHERE子句是不能用聚集函数作为条件表达式的)

14.连接查询

--等值连接查询
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno
--自然连接
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno
--可以和and一起用,一条语句同时完成选择和连接查询
SELECT Student.Sno,Sname
FROM Student,SC
WHERE Student.Sno=SC.Sno
AND SC.Cno='2'
AND SC.Grade>50

①.自身连接

SELECT FIRST.*,SECOND.*
FROM Course FIRST,Course SECOND
WHERE FIRST.Cpno = SECOND.Cno

②.外连接

左连接列出左边关系的所有元组

SELECT Student.Sno,Sname,Ssex,Sage,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno)

③.多表查询

[例3.54]查询每个学生的学号、姓名、选修的课程名及成绩

SELECT Student.Sno,Sname,Cname,Grade
FROM Student,Course,SC
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno

15.嵌套查询

①.不相关子查询

SELECT Sno,Sname
FROM Student
WHERE Sno IN
(
SELECT Sno
FROM SC
WHERE CNO IN
(
SELECT Cno
FROM Course
WHERE CNAME='信息系统'
)
)

带有比较运算符的子查询
[例 3.57 ]找出每个学生超过他选修课程平均成绩的课程号。

SELECT Sno,Cno
FROM SC x
WHERE Grade>=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno
)

使用ANY或ALL谓词时必须同时使用比较运算
语义为:
ANY 大于子查询结果中的某个值
ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值
< ALL 小于子查询结果中的所有值
= ANY 大于等于子查询结果中的某个值
= ALL 大于等于子查询结果中的所有值

[例 3.58] 查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄

SELECT Sname,Sage
FROM Student
WHERE Sage<ANY(
				SElECT Sage
				FROM Student
				WHERE Sdept='CS' 
				)
AND Sdept <> 'CS'

EXISTS谓词
1.存在量词 ∃
2.带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
⚫ 若内层查询结果非空,则外层的WHERE子句返回真值
⚫ 若内层查询结果为空,则外层的WHERE子句返回假值
3.由EXISTS引出的子查询,其目标列表达式通常都用 *

在这里插入图片描述
在这里插入图片描述

②.相关子查询

再看看这里:
https://blog.csdn.net/m0_49868511/article/details/115613589?spm=1001.2014.3001.5502

集合查询

集合操作的种类
①并-UNION
②交-INTERSECT
③差-EXCEPT

[例 3.64] 查询计算机科学系的学生及年龄不大于19岁的学生。(此题也可以用or解决)并

SELECT *
FROM Student
WHERE Sdept= 'CS'
UNION
SELECT *
FROM Student
WHERE Sage <=19;

[例3.66] 查询计算机科学系的学生与年龄不大于19岁的学生的交集。(此题也可用AND解决)交

SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19

[例 3.68] 查询计算机科学系的学生与年龄不大于19岁的学生的差集。(实际上是查询计算机科学系中年龄大于19岁的学生)差

SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage<=19

16.基于派生表的查询

[例3.57]找出每个学生超过他自己选修课程平均成绩的课程号

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

如果子查询中没有聚集函数,
派生表可以不指定属性列,
子查询SELECT子句后面的列名为其缺省属性。

五,UPDATE

UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];

六,DROP

1.删除表

DROP TABLE <表名>[RESTRICT| CASCADE]

2.删除索引

DROP INDEX Stusname;

3.删除视图

DROP VIEW BT_S ; --注意级联删除
drop schema Wang cascade;--cascade删除模式的同时把该模式中所有的数据库对象全部删除

七,DELETE

DELETE
FROM     <表名>
[WHERE <条件>]

删除指定表中满足WHERE子句条件的元组

DELETE
FROM Student
WHERE Sno= '201215128 '; --在Student 表中删除属性Sno= 201215128 的元组

八,GRANT

GRANT<权限>[<权限>]
ON<对象类型><对象名>[<对象类型><对象名>]
TO<用户>[<用户>]
[WITH GRANT OPTION];

[WITH GRANT OPTION] 获得某种权限的用户还可以把这种权限授予其他用户

GRANT SELECT --把查询Student表权限授给用户U1
ON Student  --ON TABLE Student会报错应该是SQL和T-SQL的差别
TO U1
GRANT ALL PRIVILIGES --把对Student表和Course表的全部权限授予用户U2和U3
ON TABLE Student,Course 
TO U2,U3;

九,REVOKE

REVOKE <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型><对象名>]FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
REVOKE SELECT --收回所有用户对表SC的查询权限
ON TABLE SC 
FROM PUBLIC;
REVOKE INSERT --把用户U5对SC表的INSERT权限收回
ON TABLE SC 
FROM U5 CASCADE

十,AUDIT(审计)

**对修改SC表结构或修改SC表数据的操作进行审计**
AUDIT ALTER,UPDATE  
ON  SC;

取消对SC表的一切审计

NOAUDIT  ALTER,UPDATE  
ON  SC;

总结

有很多的东西要记,练习的题也很多,多看看

1、 Find the name, loan number and loan amount of all customers; rename the column name loan_number as loan_id. 2、 Find the names of all customers whose street includes the substring “Main”. 3、Find all customers who have a loan, an account, or both: 4、Find all customers who have both a loan and an account. 5、Find all customers who have an account but no loan. 6、Find the average account balance at the Perryridge branch. 7、 Find the number of tuples in the customer relation. 8、 Find the number of depositors in the bank. 9、 Find the number of depositors for each branch. 10、Find the names of all branches where the average account balance is more than $1,200. 11、Find all loan number which appear in the loan relation with null values for amount. 12、Find all customers who have both an account and a loan at the bank. 13、Find all customers who have a loan at the bank but do not have an account at the bank 14、Find all customers who have both an account and a loan at the Perryridge branch 15、Find all branches that have greater assets than some branch located in Brooklyn. 16、Find the names of all branches that have greater assets than all branches located in 1、创建一个School数据库,该数据库的主数据文件逻辑名称为SCHOOL_data,物理文件名为School.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为School_log,物理文件名为School.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。 2、用SQL语句建立上述表,自定义主键和外键,对于student表建立约束条件:ssex仅能取male或female;sage在18和22之间。并完成下面的查询语句。 1、查询所有选修过“Bibliometrics”课的学生的姓名和成绩; 2、查询考试成绩不及格的学生的个数; 3、查询名字中至少含有一个“z”字符的学生的姓名、学号和性别; 4、查询选修了“Introduction to the Internet”课程的学生的学号及其成绩,查询结果按分数的降序排列; 5、查询“Zuo li”同学选修课程的总学时(time)数 6、查询年龄不大于20岁的学生的平均考试成绩; 7、查询 “computer science”专业学生选修 “Database System”的人数; 8、查询同时选修课程“Database System”和“Introduction to the Internet”的学生姓名; 9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 10、查询“Information Technology for Information Management”考试成绩为空的学生姓名及专业名称。 11、查询“computer science”专业学生每个人的选修课总学分。 12、查询个人考试平均成绩高于专业平均成绩的学生姓名 13、查询个人考试平均成绩高于女生平均成绩的男生姓名 14、查询比“computer science”专业所有学生年龄都大的学生姓名。 15、查询考试成绩仅有一科不及格学生姓名
数据库原理及应用》课程实验 实验1 创建数据库数据表 一、实验目的 熟悉SQL Server Management Studio界面;掌握通过图形化向导和执行Transact-SQL语句创建数据库的方法。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容 SQL Server中的一个数据库必须至少包含一个数据文件和一个事务日志文件,所以创建数据库就是建立主数据文件和日志文件。 在SQL Server中创建数据库的方法主要有两种:一是在SQL Server Management Studio窗口中使用可视化界面,通过方便的图形化向导创建,二是通过执行Transact-SQL语句创建。 (一)向导方式创建 1、从“开始”菜单选择“所有程序”→“Microsoft SQL Server ”,打开“SQL Server Management Studio”窗口,使用Windows或SQL Server身份验证建立连接。 2、在“对象资源管理器”窗格中展开服务器,选择“数据库”节点右击,从弹出的快捷菜单中选择“新建数据库”命令,打开“新建数据库”窗口。 3、该窗口中有3个页,分别是“常规”、“选项”和“文件组”,完成这3个页的内容即可完成数据库的创建。这里,我们仅设置“常规”的相应内容,其他2个页的内容按照默认设置即可。 (1)“数据库名称”文本框中输入数据库的名称,如“student”,再输入该数据库的所有者,这里使用默认值即可。(也可以通过单击文本框右边的“浏览”按钮选择所有者。 (2)“数据库文件”列表中包括两行,一个是数据文件,一个是日志文件。通过单击下面相应的按钮可以添加或删除相应的数据文件。  逻辑名称:指定该文件的文件名。  文件类型:用于区别当前文件是数据文件还是日志文件。  文件组:显示当前数据库文件所属的文件组。  初始大小:指定该文件的初始容量。在SQL Server 中数据文件的默认值为3MB,日志文件的默认值为1MB。  自动增长:用于设置在文件容量不够用时,文件根据何种增长方式自动增长。  路径:指定存放在文件的目录。默认情况下,SQL Server 将存放路径设置为其安装目录下的data子目录,单击该列中的按钮可以在打开的“定位文件夹”对话框中更改数据库的存储路径。 完成上述操作后,单击“确定”按钮关闭“新建数据库”窗口,即完成了数据库的创建,可以在“对象资源管理器”窗格中看到新建的数据库。 (二)语言方式创建 SQL Server 使用的Transact-SQL语言是标准SQL的增强版本,使用它提供的Create Database语句同样可以完成对数据库的建立(参考内容见附录)。 1、单击“新建查询”按钮,创建一个查询输入窗口将附录中的语句复制到该窗口。选择创建数据库的命令,单击工具栏中的“分析”按钮,可以检语法错误;单击“执行”按钮即可执行语句,在查询窗口内的“查询”窗格中可以看到“命令已成功完成”的提示消息。在“对象资源管理器”窗格中刷新,即可看到新建的数据库。 2、继续执行Create Database之后的语句,在“student”数据库中用Create Table命令依次建立S、C和SC这三个数据表,各表字段如下: STUDENT(SNO,SNAME,SEX,DOB,DEPT,TELNO) COURSE(CNO,CNAME,CPNO,TEACHER,CREDIT) SC(SNO,CNO,SCORE) 表1:STUDENT表 列名 类型 长度 约束 NULL PK FK CHECK sno char 10 N Y sname varchar 8 N sex Char 2 N ‘男’ or ‘女’ DOB datetime dept varchar 10 telno char 11 N 表2:COURSE表 列名 类型 长度 约束 NULL PK FK CHECK cno char 5 N Y cname varchar 10 N Cpno char 5 teacher varchar 8 N credit smallint 表3:SC表 列名 类型 长度 约束 NULL PK FK CHECK sno char 10 N Y References s(sno) cno char 5 N References c(cno) score decimal(6,2) 0-100 要求:当主表STUDENT中的主码SNO和COURSE中的主码CNO发生修改或删除时,SC表中的相应外码做CASCADE操作。 (三)知识巩固 用SQL-DDL语言创建“产品订购”数据库,包含四个数据表S、P、J和SPJ,表结构及内容如下(下划线为主码): S(SNO,SNAME, ADDRESS,TEL) 释义:供应商(供应商编号,姓名,地址,电话) J(JNO,JNAME,LEADER,BG) 释义:项目(编号,项目名,负责人,预算) P(PNO,PNAME,SPEC,CITY,COLOR) 释义:零件(编号,零件名,规格,生产地,颜色) SPJ(SNO,JNO,PNO,QTY) 释义:供应(供应商编号,项目编号,零件编号,数量) 其中,sno,jno,pno分别为对应S表,J表,P表的外码。 S表 列名 类型 长度 约束 NULL PK FK CHECK sno char 10 N Y sname varchar 8 N address char 10 N tel char 11 N J表 列名 类型 长度 约束 NULL PK FK CHECK jno char 10 N Y jname varchar 8 N leader varchar 8 N bg int N P表 列名 类型 长度 约束 NULL PK FK CHECK pno char 10 N Y pname varchar 8 N spec char 10 N city char 10 N color char 10 N SPJ表 列名 类型 长度 约束 NULL PK FK CHECK sno char 10 N Y References s(sno) jno char 10 N References j(cno) pno char 10 N References p(pno) qty int 实验2 数据库的简单查询 一、实验目的 掌握单表查询中各个子句(Select、From、Where、Group、Having、Order)的用法,特别要掌握比较运算符和逻辑运算符的使用。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容 在已建立的学生数据库数据表的基础上,用Select语句完成下列查询操作。 STUDENT(SNO,SNAME,SEX,DOB,DEPT,TELNO) COURSE(CNO,CNAME,CPNO,TEACHER,CREDIT) SC(SNO,CNO,SCORE) 1、 查询全体学生的学号和姓名。 Select sno,sname From s 2、 查询全体学生的所有基本信息(仅针对S表)。 Select * From S 3、 对SC表查询全体学生的选课记录,并对score列增加5分。 Select sno,cno,score=score+5 From SC 4、 查询全体学生的学号和姓名,将原来的英文列名设置中文别名。 Select sno,sname from 5、 显示所有选课学生的学号,去掉重复结果。 Select distinct sno From sc 6、 查询成绩在80分以上的学生选课记录。 Select * From sc Where score>80 7、 查询经济系所有学生的学号和姓名。 Select sno,sname From S 8、 查询成绩在80~90分的学生选课记录. 9、 查询年龄不在22~25的学生记录。 10、 查询所有姓“刘”的学生基本信息。 11、 查询无考试成绩(成绩为空值)的学号、课程号。 12、 查询考试成绩非空值的学号、课程号。 13、 查询数学系年龄小于20岁的学生记录。 14、 查询选修了‘101’或‘102’课程的选课记录。 15、 查询学生总人数。 16、 查询选修了课程的学生人数。 17、 查询选修了‘101’课程的学生的平均成绩。 18、 查询学号为‘01003’的学生的考试总成绩。 19、 查询‘101’课程的最高分和最低分。 20、 查询每门课程的选课人数。 21、 查询每个学生的学号、选课数、平均成绩和总成绩。 22、 查询选课数超过2门的学生学号及其选课数。 23、 查询所有学生信息,查询结果按年龄降序排列。(针对S表操作) 24、 查询所有学生信息,查询结果按系名升序,同系学生按年龄降序排列。 25、查询选课数超过2门的学生学号及其选课数,查询结果按选课数降序排列。 实验3 数据库的多表查询 一、实验目的 继续熟练SQL-SELECT语句的使用;理解多表查询的概念;掌握多表连接查询中各个子句的用法,特别要比较内连接和外连接的结果。掌握非相关子查询、相关子查询的用法,理解它们的执行过程。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容 (一)、在已建立的STUDENT数据库数据表的基础上,用Select语句的连接查询完成下列操作。 1、查询每个学生的基本信息及其选课情况。 select * from s,sc where s.sno=sc.sno 2、查询选修‘a’课程的学生学号、姓名和成绩。 select sno,sname,score from s,sc where cno=’a’ and s.sno=sc.sno 3、查询与‘李四’在同一个系学习的学生记录。 select from where 4、查询与‘李平’年龄相同的学生记录。 select from where 5、查询选修课程名为“高数”的选课记录。 select sno,score from c,sc where cname=’高数’ and c.cno=sc.cno 6、查询选修课程名为“高数”的学生记录。 select s.sno,sname from s,c,sc where cname='高数' and s.sno=sc.sno and c.cno=sc.cno 7、查询选修‘a’课程且成绩大于等于90的学号、姓名和成绩。 select s.sno,sname,score from s,sc where cno='a' and score>90 and s.sno=sc.sno 8、查询‘吴十’的所有选课记录。 select cno from s,sc where sname=’吴十’ and s.sno=sc.sno 9、查询计算机系学生选修的课程号,要求结果中去掉重复记录。 select distinct cno from s,sc where dept=’计算机’ and s.sno=sc.sno 10、查询计算机系选修课程数大于等于2的学号、姓名及平均成绩,查询结果按平均成绩降序。 select sno,sname,avg(score)平均成绩 from s,sc where sc and s.sno=sc.sno order by avg(score) 11、查询每个学生的学号、选修课程号、课程名及成绩。 select s.sno,c.cno,cname,score from s,c,sc where s.sno=sc.sno and c.cno=sc.cno 12、查询所有学生的选修情况(包括选课和未选课的学生),要求显示学号、姓名、课程号和成绩。 select sno,sname,cno,score from where (二)、在已建立的数据库数据表的基础上,用Select语句的嵌套查询完成下列操作。 1、查询选修‘a’课程且成绩大于等于90的学号、姓名。 select sno,sname from s where sno=(select sno from sc where cno='a' and score>90) 2、查询‘李四’的所有选课记录。 select cno from sc where sno= (select sno from s where sname=’李四’ ) 3、查询与‘李平’在同一个系学习的学生记录。 select from where 4、查询与‘李平’年龄相同的学生记录。 select from where 5、查询选修课程名为‘高数’的选课记录,输出结果包括学号和成绩。 select sno,score from sc where cno= (select cno from c where cname=’ 高数’ ) 6、查询选修课程名为‘高数’的学生记录,输出结果包括学号、姓名和所在系。 select sno,sname,dept from s where sno= (select sno from sc where cno= (select cno from c where cname=’高数’ ) ) 7、查询学号为‘1’学生的选修课程号和课程名。 select cno,cname from c where sno= (select from where 8、查询没有选修‘101’课程的学生学号和姓名。 select from where 9、查询选修‘101’课程或‘102’课程的学生姓名。 select from where 10、查询选修‘101’课程和‘102’课程的学生学号。 select from where 11、查询选修‘101’课程但没选修‘102’课程的学生学号。 select from where 12、查询没有选修任何课程的学生记录,输出结果包括学号、姓名和所在系。 select from where 13、查询数学系学生选修的课程号,要求结果中去掉重复记录。 select from where 14、查询选修课程至少包含‘01003’选修课程的学生学号。 select from where 实验4 数据库更新、视图定义及使用 一、实验目的 掌握Insert、Update、Delete语句的使用;对于Insert语句,要求理解默认值约束、空值约束在插入记录时所起的作用。理解视图的概念,掌握Create View、Drop View语句的使用;掌握基于视图的查询语句的使用。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容 (一)、在已建立的数据库数据表的基础上,向数据库中添加一个临时表ST,其结构与S表结构相同。用Insert语句向临时表输入数据,输入有误时用Update语句进行修改。再用三个更新语句完成下列操作。 1、向S表添加若干新记录,内容自定。(观察已定义的表的约束情况) 2、向SC表添加新记录,内容自定,不低于10条(注意不能违反参照完整性)。 3、为临时表ST添加记录。 4、把S表的所有行一次性地加到临时表ST中。 select * into ST from S; 5、在SC表中把所有学生的成绩加2分。 update sc set score=case when score+2>100 then 100 else isnull(score,0)+2 end; 6、在ST表中把所有学生的年龄增加1。 7、在ST表中把‘李四’的所在系改为‘计算机’。 update st set dept='计算机' where sname='李四' 8、在SC表中将选修课程‘高数’的学生成绩加2分。 update sc set score=score+2 from sc,c where sc.cno=c.cno and cname='高数' 9、在SC表中删除所有成绩为空值的选修记录。 delete sc where score is null 10、删除计算机系选修成绩不及格的选课记录。 delete sc from s,sc where s.sno=sc.sno and score90 7、查询计算机系选修课程名为“高数”并且成绩大于70分的学生的学号和成绩。 select sno,score from SCVIEW where cname='高数' and score>70 8、通过MAST视图将学号为‘01008’学生的年龄修改为21岁。 9、通过MAST视图将学号为‘2’学生所在系改为‘经济’,是否能成功执行?若不能成功请说明理由;若修改成功,请再次通过MAST视图查询学生基本信息,是否能查询到该生?若不能查询请说明理由。 能成功执行以下语句: update MAST set dept='经济' where sno='2' 不能到该生,因为在MAST视图下他的条件已经不符合系名为数学。 10、通过SCVIEW视图将学号为‘1’学生的总成绩修改为380分,是否能成功执行?若不能成功请说明理由。 实验5 数据库的安全与保护 一、实验目的 理解SQL Server的用户与权限管理机制,掌握用对象资源管理器创建服务器登录帐号,并同时建立用户。掌握如何为给定的用户分配权限。 二、实验环境 Windows7操作系统,SQL Server软件。 三、实验课时 2课时。 四、实验内容 用户与权限管理 (1)打开“SQL Server Management Studio”窗口,使用对象资源管理器创建两个服务器登录帐号Test1和Test2,并在“sample_st”数据库中创建两个对应的同名用户。设置Test1用户和Test2用户的默认架构为guest。 (2)使用Test1身份登录,并为Test2分配创建数据表的权限;用Test2身份登录来验证权限分配成功。 (3)使用Test1身份登录,收回刚刚分配给Test2的创建数据表的权限;用Test2身份登录来验证权限回收成功。 五、实验步骤 1、使用对象资源管理器创建两个服务器登录帐号。 以系统管理员身份登录SQL Server。打开“SQL Server Management Studio”窗口,在对象资源管理器列表中,打开展开“安全性”文件夹,选择“登录名”图标,单击鼠标右键,在弹出的菜单中选择“新建登录名”。在打开的对话框中依次建立Test1和Test2,选择“SQL Server身份验证”,同时还要输入密码,默认数据库为“sample_st”。 (2)在“用户映射”中列出了当前登录帐号可以选择访问的数据库如“sample_st”,在其左侧的复选框中打勾,表示当前登录帐号可以访问对应的数据库,默认用户名与登录帐号相同。 (3)单击“确定”按钮完成创建。 2、创建新的数据库用户。 在对象资源管理器中选中要访问操作的数据库,展开“安全性”文件夹,在“用户”文件夹中找是否已建立与登录名Test1和Test2同名的数据库用户,若已建立,则在属性中修改其默认架构为guest;否则右击鼠标在菜单中选择“新建用户”选项,出现“数据库用户-新建”对话框,建立相应的用户。 3、用Grant、Revoke命令实现对用户的授权和收权。 4、用Create命令创建数据表验证授权和收权是否成功。 5、以系统管理员身份登录SQL Server。使用:“GRANT SELECT ON SC TO Test1 WITH GRANT OPTION”命令,再分别以Test1和Test2身份登录,进行授权及查询数据表,验证“WITH GRANT OPTION”能否成功执行。 6、以系统管理员身份使用“REVOKE”命令回收上述授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值