SQL Server 数据库实验课第八周——SQL-Server总结

实验课已过八周课程。过的好快。。。。忙忙碌碌
因为我个人记录事情一般是根据时间顺序,所以,这篇博客汇总八周以来每周所学。
没有第四周,第四周返校

第一周

安装SQL Server,用sa账户登录本地数据库服务器

博客链接:SQL Server 数据库实验课第一周
安装了SQL Server,翻了一些学长学姐的博客
学习SQL语句
1.创建登录名,用户名

CREATE LOGIN 王平1 WITH PASSWORD='12345';--新建登录名王平1
CREATE USER 王平 FOR LOGIN 王平1; --新建用户名王平

2.查询

SELECT 列名称 FROM 表名称

第二周

计算器

博客链接:SQL Server 数据库实验课第二周——计算器
下载Visual Studio 2019,用C#语言做一个计算器。感觉和JAVA挺像的。计算原理:中缀表达式转换为后缀表达式然后计算(因为数据结构讲过后缀表达式计算,更好理解一些)。

第三周

博客链接:
SQL Server 数据库实验课第三周——模式、基本表定义与删除
SQL Server 数据库实验课第三周——INDEX、INSERT、SELECT语句
学习SQL语句

1.模式建立与删除

定义模式

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

删除模式

DROP SCHEMA <模式名><CASCADE|RESTRICT>

2.基本表建立、修改与删除

定义基本表

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

修改基本表

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

删除基本表

DROP TABLE <表名>[RESTRICT| CASCADE];

3.索引建立修改与删除

建立索引

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

修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

删除索引

DROP INDEX <索引名>;

4.INSERT、SELECT语句

插入

INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );

查询

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

选择表中的若干列

SELECT Sname,2014-Sage
FROM Student;

选择表中若干元组

SELECT Sname
FROM Student
WHERE Sdept='CS';

查询经过计算的值

SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)
FROM Student;

指定DISTINCT关键词,去掉表中重复的行

第五周

博客链接:数据库实验课第五周——常用查询条件

1.改变查询结果列标题

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

在这里插入图片描述

2.常用查询条件

在这里插入图片描述
ORDER BY子句
用户可以用ORDER子句对查询结果按一个或多个属性列排序
升序(默认):ASC
降序:DESC

SELECT *
FROM Student
ORDER BY Sdept, Sage DESC;

聚集函数
(1)统计元组个数 COUNT(*)
(2) 统计一列中值的个数 COUNT([DISTINCT|ALL] < 列名>)
(3) 计算一列值的总和 SUM([DISTINCT|ALL] < 列名>)
(4) 计算一列值的平均值 AVG([DISTINCT|ALL] < 列名>)
(5) 求一列中的最大值MAX([DISTINCT|ALL] < 列名>)
(6) 求一列中的最小值MIN([DISTINCT|ALL] < 列名>)

第六周

博客链接:SQL Server 数据库实验课第六周——HAVING、连接查询

1.HAVING短语

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) >3;

2.连接查询

等值与非等值连接查询

[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2>AND[<表名2>.]<列名3>

自身连接: 一个表与其自己进行连接

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

外连接:外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.Sno);
--也可使用USING来去掉结果中的重复值
--FROM Student LEFT OUTER JOIN SC USING(Sno);

3.嵌套查询

带有IN谓词的子查询
一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。上层查询块称为外层查询,下层查询块称为内层查询或子查询

SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
	(SELECT Sdept
	FROM Student 
	WHERE Sname='刘晨');

带有比较运算符的子查询
当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)

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

带有ANY(SOME)或ALL谓词的子查询

符号释义
> ANY大于子查询结果中的某个值
> ALL大于子查询结果中的所有值
< ANY小于子查询结果中的某个值
< ALL小于子查询结果中的所有值
>= ANY大于等于子查询结果中的某个值
>= ALL大于等于子查询结果中的所有值

带有EXISTS谓词的子查询
存在量词∃,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。

SELECT Sname
FROM Student
WHERE EXISTS
           (SELECT *
            FROM SC
            WHERE Sno=Student.Sno AND Cno= '1');

第七周

博客链接:SQL Server 数据库实验课第七周——数据查询、数据更新、空值处理、视图

1.数据查询

集合查询
集合操作的种类
并-UNION
交-INTERSECT
差-EXCEPT
基于派生表的查询
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,
这时子查询生成的临时派生表成为主查询的查询对象。

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

2.数据更新

修改数据

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

删除数据

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

空值的判断
判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示。

SELECT *
FROM Student
WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;

3.视图

建立视图

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

删除视图

DROP  VIEW  <视图名>[CASCADE];

第八周

博客链接:SQL Server 数据库实验课第八周——(第五章续)触发器 + 存储过程

1.触发器

触发器(Trigger):任何用户对表的增、删、改操作均由服务器自动激活相应的触发器。触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
定义触发器

CREATE TRIGGER <触发器名>  
{BEFORE | AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH  {ROW | STATEMENT}
[WHEN <触发条件>]<触发动作体>

删除触发器

DROP TRIGGER <触发器名> ON <表名>;

2.存储过程

创建存储过程

CREATE OR REPLACE PROCEDURE 过程名([参数1,参数2,...]) AS <过程化SQL块>;

执行存储过程

 CALL/PERFORM  PROCEDURE 过程名([参数1,参数2,...]);

修改存储过程

ALTER PROCEDURE 过程名1  RENAME TO 过程名2;

删除存储过程

DROP  PROCEDURE 过程名();

3.函数

函数的定义语句格式

CREATE OR REPLACE FUNCTION 函数名 ([参数1,参数2,…]) RETURNS <类型>  AS <过程化SQL块>;

函数的执行语句格式

CALL/SELECT 函数名 ([参数1,参数2,…]);

修改函数

ALTER FUNCTION 过程名1 RENAME TO 过程名2;--重命名
ALTER FUNCTION 过程名 COMPILE;--重新编译
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档为数据库上机实验报告,是自己认认真真一步一步的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结实验实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库。 实验实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选多于3门的学生学号。 查询计算机系学生2号不及格的学生学号和成绩。 实验实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的程门数。 (5)统计HU老师所授每门程的学生平均成绩。 (6)统计所有选修人数多于20的程号和选人数,并按人数降序排列,若人数相等,则按程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考程号。 (8)检索‘OS’成绩高于该平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何程的学生学号。 (4) 检索WANG老师所授程号、程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部程的学生学号。 实验实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号,姓名,所在系。 2.编一个自定义的函数,该函数接受一个学生姓名,返回其学生表中基本信息及选情况。 3.试用CASE语句输出学生表中各年龄段的学生人数。 4.编存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改程表中记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库中表,并作出响应。 实验实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干程,每门有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值