实验课已过八周课程。过的好快。。。。忙忙碌碌
因为我个人记录事情一般是根据时间顺序,所以,这篇博客汇总八周以来每周所学。
没有第四周,第四周返校
目录
第一周
安装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;--重新编译