23-08-28 第一课

数据是由程序携带>数据由数据库携带存放

数据库传输数据运行过程:主机向服务器发送请求>服务器查找相关请求数据库>数据库接受服务器请求>数据库返回所需数据给服务器>服务器返回所需数据给主机

SQL(Structured Query Language)是**==结构化查询语言==,是数据库能够看懂的语言,是非过程语言**

学习SQL?学习数据的存放?

网站和网页的关系

通过超链接相互关联的网页就是网站

动态网站和静态网站根本区别

动态网站具有交互性

交互性:页面反馈

HTML(超文本标记语言)

浏览器唯一能识别的语言

数据库 DB(Database) 概念

存放数据的仓库,它是建立在计算机的存储设备上的

存放在里面的数据是由规则有逻辑的

长期存放 可共享

数据库管理系统 DBMS 概念

在==操作系统==支持下为==数据库建立使用和维护而配置==的庞大软件

SQL Sever Mysql Oracle VF Access

数据库系统 DBS 概念

包含DB和DBMS

数据库系统是引入了数据库技术的计算机系统

由计算机硬件、操作系统、DBMS以及其他对象支持下建立起来的DB、数据库应用程序、用户和维护人员等组成的一个整体

数据库管理员 DBA 概念

数据库管理员

23-09-04 第三次课

1.服务器名称

  1. 如果实例名是SQLEXPRESS,则服务器名称为==计算机名\实例名==
  2. 如果实例名是MSSQLSERVER,则服务器名称为==计算机名==

2.服务器开启和关闭

  1. 配置管理器
  2. 服务

3.对界面进行简单的操作

数据库起名时,不能以数字开头

右键新建数据库

4.数据库文件

  • .mdf 主数据文件
  • .ldf 日志文件

23-09-04 第四次课

1.设置sa登录

  1. 右键服务器,在属性中的安全性中设置为SQL Server和Windows身份验证模式
  2. 在SQL配置管理器中重启服务器
  3. 选择服务器中安全性>登录名>右键sa属性>关闭强制实施密码策略>设置新密码>状态中授予和启用

2.数据表

表是最基本的数据库对象

表就是指关系

行是指一条记录、一个元组

列是字段、属性

关系模式

关系名(属性名1,属性名2)

数据表结构

表结构:列名、数据类型、长度、是否允许null、==主键==

表记录

字符型

char(6)   nchar(6)			/* 无var 定长 */
varchar(6) nvarchar(6) /* 有var 变长 */

定长,变长区别

定长:当输入不足6时,会补空格

变长:输出不足6时,不会补空格

主键

  • 唯一能识别表中一行的属性
  • 一个表仅有一个主键
    • 但会出现**==候选键==,因为两个都具有唯一性**,选其一作为主键
    • ==主属性==:包含在候选键中的属性
  • **下划线**通常用来标识主键
  • ==特点==:唯一、不允许为空

外键

如果一个属性不是它所在表的主键,却是研究范围内另一个表的主键,那么它就是它所在表的外键

  • 外键可以有0、1、多个
  • 一个关键字是主键所在的表就是主表外键就是从表主从要相互限制
    • 从表的外键值要来源于对应主表的主键值

第五节课

3.SQL-结构化查询语言

非过程化语言(只管要什么,不管如何得到)

分类

按功能分类

数据定义语言DDL - 对数据库对象(表结构)进行操作
CREATE 创建	 ALTER 修改	 DROP 删除
数据操纵语言DML - 对表数据进行操作
SELECT 选择	 INSERT 插入	 UPDATE 修改	 DELETE 删除
数据控制语言DCL
GRANT 授予	 REVOKE 收回	 DENY 拒绝

第六节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

1.查询学生信息

USE Xk
SELECT * FROM Student

T:查询学生的学号和姓名

SELECT stuno,stuname
FROM Student

2.查询课程的类别 - ==DISTINCT 去掉查询结果的重复行==

SELECT DISTINCT kind FROM Course

3.查询前50名学生的信息 - ==TOP 查询指定数量数据==

SELECT TOP 50 * FROM Student

T1:查询前5们课程的课号、课名以及授课教师

SELECT TOP 5 couno,couname,teacher FROM Course

T2:查询前50%条学生的记录 - ==PERCENT 百分比==

SELECT TOP 50 PERCENT * FROM Student

4.查询20000001班学生的学号 - ==WHERE==

SELECT * FROM Student WHERE classno='20000001'

第七节课

条件由**==列名、运算符、列值==**组成

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

T:查询报名人数超过35人的课程号和课程名

SELECT couno,couname FROM Course WHERE willnum>35

T:查询属于01号部门的班级信息

SELECT * FROM Class WHERE departno='01'

5.查询01号部门所开设的学分不小于2的课程信息 - ==AND/OR==

SELECT * FROM Course WHERE departno='01' AND credit>=2
T:查询03、08、13号课程信息
SELECT * FROM Course WHERE couno='003' OR couno='008' OR couno='013'

6.查询03、08、13号课程信息 - ==IN 值在列表中/NOT IN 值不在列表中==

SELECT * FROM Course WHERE couno IN('003','008','013')
T:查询课号不是03、08、13号课程信息
SELECT * FROM Course WHERE couno NOT IN('003','008','013')
SELECT * FROM Course WHERE couno!='003' AND couno!='008' AND couno!='013'

7.查询报告人数在35到40之间(含边界)的课程号 - ==(NOT) BETWEEN AND==

SELECT couno,couname,credit,willnum FROM Course WHERE willnum BETWEEN 35 AND 40
  • 通常用于连续的数值范围
  • 包含边界值
  • NOT BETWEEN AND 不包括边界

第八节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

8.查询课程信息,并按照学分的降序排列 - ==ORDER BY ASC(升)/DESC(降)==

SELECT * FROM course ORDER BY credit DESC
SELECT * FROM course ORDER BY 4 DESC
  • 可以使用列序号代替属性名
  • 默认升序

查询课程信息,先按照学分的降序排列,学分相同再按报名人数升序排列

SELECT * FROM course ORDER BY credit DESC,willnum ASC

第九节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

9.模糊查询 - ==LIKE==

通配符

用来表示模糊状态的符号

% 	_ 	[] 	[^	]
%通配符

表示0个,1个,多个字符

_通配符

表示任意单个字符

[]通配符

表示**==中括号范围内==的单个字符**

[^]通配符

表示**==不在==中括号范围内的单个字符**

TEST

以”加油”结尾的字符串,含有“工程”的字符串,第二个字不是“y”的字符串,以x或y开头不以m或n结尾的字符串,倒数第二个字符是w长度不小于4的字符串,第二个字是r或t的字符串

SELECT * FROM Class WHERE departno LIKE '%加油'
SELECT * FROM Class WHERE departno LIKE '%工程%'
SELECT * FROM Class WHERE departno LIKE '_[^y]%'
SELECT * FROM Class WHERE departno LIKE '[xy]%[^mn]'
SELECT * FROM Class WHERE departno LIKE '__%w_'
SELECT * FROM Class WHERE departno LIKE '_[rt]%'
  • ===后面跟一个确定的值==
  • ==IN后面跟多个确定的值==
  • ==LIKE后跟一个模糊的状态==

第十节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

==NOT LIKE== - 不姓李的学生信息

SELECT * FROM student WHERE stuname NOT LIKE '李%'

TEST

查询姓李、张、陈的学生信息
SELECT * FROM student WHERE stuname LIKE '[李张陈]%'
SELECT * FROM student WHERE stuname LIKE '李%' OR stuname LIKE '张%' OR stuname LIKE '陈%'

10.==聚合函数==

SUM(列名):表示求该列列值的和
AVG(列名):表示求该列列值的平均值
max():表示求该列列值的最大值
min():表示求该列列值的最小值
count():表示求该列列值的个数
count(*):表示统计行数

查询所有学生数量

SELECT count(stuno) FROM student   -- 181
SELECT count(stuname) FROM student -- 181
SELECT count(DISTINCT stuname) FROM student -- 179(2重)
SELECT count(pwd) FROM student -- 181(NULL不计数)

修改查询结果的列标题

SELECT count(*) as '学生总数' FROM student
SELECT count(*) '学生总数' FROM student
SELECT '学生总数'=count(*) FROM student

TEST

查询最大报名人数、最小报名人数和平均报名人数

SELECT MAX(willnum) '最大报名人数',MIN(willnum) '最小报名人数',AVG(willnum) '平均报名人数' FROM course

第十一节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

11.查询**==每==**个班级的人数 - ==GROUP BY== 分组

SELECT classno,COUNT(*) FROM student GROUP BY classno

TSET

查询位老师所承担的课程门数

SELECT teacher,COUNT(*) FROM course GROUP BY teacher

在 学生(学号,姓名,年龄,性别,班号,密码) 中查询每班有多少女生

SELECT 班号,COUNT(*) AS '女生人数' FROM 学生 WHERE 性别='女' GROUP BY 性别 

查询男女生各有多少人

SELECT 性别,COUNT(*) AS '女生人数' FROM 学生 GROUP BY 性别 

查询每个学生的总分

SELECT 学号,SUM(成绩) FROM 选修 GROUP BY 学号

==HAVING== 关键字

其中的条件是对分组的筛选

查询人数超过40个人的班级号
SELECT classno FROM student GROUP BY classno HAVING COUNT(*)>40
TEST

学生(学号,姓名,年龄,性别,班号,密码)

课程(课号,课名,学分)

选修(学号,课号,成绩)

查询平均分超过90的学生号

SELECT 学号 FROM 选修 GROUP BY 学号 HAVING AVG(成绩)>90

查询选修课程门数超过3门的学生号

SELECT 学号 FROM 选修 GROUP BY 学号 HAVING COUNT(*)>3

查询被30人以上选修的课程号

SELECT 课号 FROM 选修 GROUP BY 课号 HAVING COUNT(*)>30

第十二节课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

12.子查询(嵌套查询)

WHERE后的条件的列值部分是不能出现聚合函数的

查询报告人数超过平均报名人数的课程信息

SELECT * FROM course WHERE willnum>(SELECT AVG(willnum) FROM course)

TEST

查询20000001班所在的部门号

SELECT departno FROM class WHERE classno='20000001'

查询20000001班所在的部门名

SELECT departname FROM department WHERE departno=(SELECT departno FROM class WHERE classno='20000001')

查询20000001班学生的学号和姓名

SELECT stuno,stuname FROM student WHERE classno='20000001'

查询“01电子商务”班学生的学号和姓名

SELECT stuno,stuname FROM student WHERE classno=(SELECT classno FROM class WHERE classname='01电子商务')

查询00000001号学生所选修的课程信息

SELECT * FROM course WHERE couno IN(SELECT couno FROM stucou WHERE stuno='00000001')

查询选了”SQL Server实用技术”课程的学生信息

SELECT * FROM student WHERE stuno IN( SELECT stuno FROM stucou WHERE couno IN( SELECT couno FROM course WHERE couname='SQL Server实用技术'))

第十三次课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

13.连接查询

内连接:等值连接、比较连接、自然连接、自连接

外连接:左连接、右连接、全连接

交叉连接:

笛卡尔积

TEST

查询班号、班名及其所在的部门号和部门名

SELECT classno,classname,class.departno,departname 
FROM class,department
WHERE class.departno=department.departno

查询学生的姓名及其所选的课程名称

SELECT stuname,couname 
FROM student,course,stucou
WHERE student.stuno=stucou.stuno AND stucou.couno=course.couno

第十四次课

SELECT 选择

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

14.查询密码为空的学生信息 - ==IS (NOT) NULL==

SELECT * FROM student WHERE pwd IS NULL

15.将查询结果插入到表中 - ==INTO==

方法1

SELECT stuno INTO a FROM student WHERE classno='20000001'

方法2

INSERT INTO a SELECT stuno,stuname FROM student WHERE classno='20000002'
  • INSERT INTO必须要是已存在的表
  • 列数要与查询结果的列数相同

16. >ALL >ANY

SELECT * FROM course WHERE willnum>44
SELECT * FROM course WHERE willnum>ALL(SELECT willnum FROM course WHERE couno IN('001','002','003'))
SELECT * FROM course WHERE willnum>31
SELECT * FROM course WHERE willnum>ANY(SELECT willnum FROM course WHERE couno IN('001','002','003'))
  • ANY 表示选中满足其中之一
  • ALL 表示选中满足所有条件

SELECT 小结

SELECT column1, column2, ...
FROM table_name
WHERE condition (AND|OR 连接条件 LIKE|IN 子查询)
GROUP BY column1, column2, ...
HAVING condition
ORDER BY column1, column2, ... ASC|DESC;

INSERT 插入

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

格式

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

==插入是要避免主键值冲突==

T1

向部门表中插入一条记录

INSERT INTO department(departno,departname)
VALUES('06','数学系')
INSERT INTO department
VALUES('07','商务系')

T2

向学生表插入一条记录

INSERT INTO student VALUES('9990','20000001','宗筠书','123')
  • Xk库是已经设置好关联的,5个表间相互限制,以便数据保持一致性
  • 学生表中的班号必须是班级表中有的
  • 从表的外键值来自于主表的主键值

第十五次课

INSERT 插入

1.  Department (departno,departname)
//部门表(部门号,部门名)
2. Class(classno,departno,classname)
//班级表(班号,部门号,班级名)
3. Student(stuno,classno,stuname,pwd)
//学生表(学号,班号,姓名,密码)
4. Course(couno,couname,kind,departno,credit,
teacher,schooltime,limitnum,willnum)
//课程表(课号,课程名,类别,部门号,学分,教师,上课时间,限选人数,报名人数)
5. stucou(stuno,couno,willorder)
//选课表(学号,课号,志愿号)

UPDATE 修改

格式

UPDATE table_name
SET column1=value1
WHERE condition

T

将20000001班学生的密码设置为123456

UPDATE student SET pwd='123456' WHERE classno='20000001'

将所有课程的报名人数都+1

UPDATE course SET willnum=willnum+1

将“旅游系”所开设的课程的报名人数都+1

DELETE 删除

格式

DELETE FROM table_name 
WHERE condition

T

删除07号部门

DELETE FROM department WHERE departno='07'

只能删除与其他表无被引用的记录

0000001号学生取消了对002号课的选修

DELETE FROM stucou WHERE stuno='0000001' AND couno='002'

第十六次课

T

读者(读者号,读者名,年龄)

图书(书号,书名,类别,页数,定价,作者,出版社编号)

借阅(读者号,书号,借书时间,还书时间)

出版社(出版社编号,出版社名称)

  1. 向读者表中插入一条记录
  2. 删除“01”号读者的借阅记录
  3. 将“计算机”类图书的定价增加5
  4. 查询读者的姓名及其借阅图书的名称
  5. 查询每个读者的借书数
  6. 查询”清华大学出版社“出版图书信息

1.向读者表中插入一条记录

INSERT INTO 读者(读者号,读者名,年龄) VALUES('09','宗筠书',21)

2.删除“01”号读者的借阅记录

DELETE FROM 借阅 WHERE 读者号='01'

3.将“计算机”类图书的定价增加5

UPDATE 图书 SET 定价=定价+5 WHERE 类别='计算机'

4.查询读者的姓名及其借阅图书的名称

SELECT 读者名,书名 FROM 读者,图书,借阅 WHERE 读者.读者号=借阅.读者号 AND 借阅.书号=图书.书号

5.查询每个读者的借书数

SELECT 读者号,COUNT(*) AS '借书数' FROM 借阅 GROUP BY 读者号

6.查询”清华大学出版社“出版图书信息

SELECT 图书.* FROM 图书,出版社 WHERE 出版社.出版社编号=图书.出版社编号 AND 出版社.出版社名称='清华大学出版社'

第十七次课

创建数据库

命令

CREATE DATEBASE zjs1023
USE zjs1023

创建数据表

格式

CREATE TABLE table_name
(
column_name1 data_type(size) (NOT) NULL PRIMARY KEY, 是主键 NOT NULL 可以省略
column_name2 data_type(size),
column_name3 data_type(size),
....
);

修改数据表

加列

ALTER TABLE table_name
ADD column_name datatype,column_name datatype

删列

ALTER TABLE table_name
DROP COLUMN column_name

改列

ALTER TABLE table_name
ALTER COLUMN column_name data_type(size) (NOT) NULL

删除数据表

格式

DROP TABLE table_name

删除数据库

DROP TABLE DATABASE

T

创建商品数据库sp,并在该库下创建商品表s(sno,sname,sprice)

CREATE DATABASE sp
USE sp
CREATE TABLE s(
sno CHAR(20) PRIMARY KEY,
sname NVARCHAR(20) NOT NULL,
sprice MONEY NOT NULL
)

第十八次课

T

为表s加一列生产日期sdate

ALTER TABLE s
ADD sdate datetime NULL

datetime输入格式

2023-10-26 or 2023/10/26

为表中插入一条记录 8808 TV 9999

INSERT INTO s(sno,sname,sprice) VALUES('8808','TV',9999)

查询生产日期在2022年2月2日之前生产的商品信息

SELECT * FROM s WHERE sdate<'2022-2-2'

查询售价大于8000的商品号和商品名

SELECT sno,sname FROM s WHERE sprice>8000

将8808号商品的价格+1000

UPDATE s SET sprice=sprice+1000 WHERE sno='8808'

删除生产日期列sdate

ALTER TABLE s DROP COLUMN sdate

清空表s

DELETE FROM s 

删除表s

DROP TABLE s

T 函数在查询上的应用

查询2022年生产的商品信息

SELECT * FROM s WHERE year(sdate)=2022

变量

全局变量

  • 相当于SQL Server的配置函数

  • 以@@开头

局部变量

  • 以@开头
  • 定义 赋值 输出
declare @i int  -- 声明了一个整型的局部变量i
declare @i int,@j int -- 声明了两个整型的局部变量i,j
declare @m int,@n char(5) -- 声明了一个整型的局部变量m和一个长度为5的字符局部变量n
set @i=1 -- 赋值
select @m,@n -- 输出
print @m,@n -- 输出

print和select区别

==print==一次只能输出一个变量

==select==一次可以输出一个或多个变量

set和select区别

==set==一次只能给一个变量赋值

==select==一次可以给一个或多个变量赋值

格式

declare @i int,@j int
set @i=1
set @j=1
select @i,@j
declare @x char(4),@y char(6),@z char(9)
set @x='mn'
set @y='w'
set @z=@x+@y
select @z

第十九次课

流控语句(流程控制)

if 格式

if
begin
语句体
end
else
begin
语句体
end

while 格式

while 条件
begin
语句体
end

运算符

select 7/2select 7%2 取余	select 4&5 按位与	select 4|5 按位或	select 4^5 异或
  • 只要有一个数为浮点,输出结果则为浮点;如果都为整数则取整
  • 取余中,正负号跟被除数符号有关

函数

  • 函数分为两大类:自定义函数和内置函数

数学函数

select abs(-6) -- 绝对值
select power(8,2) -- 幂指数函数
select sqrt(16) -- 开方
select floor(5.6) -- 向下取整 结果 5
select ceiling(-8.7) -- 向上取整 结果 -8

日期时间函数

select getdate() -- 获取当前服务器时间,精确到毫秒
select datename(yy,'2023-10-30')
-- yy是日期元素,除yy外还有mm,dd,ww

datediff()

select datediff(datepart,stardate,enddate) -- 日期2 - 日期1 的差
datepart格式
datepart 缩写 意义
year yy | yyyy
quarter qq | q 季度
month mm | m
week ww | w
day dd | d
hour hh 小时
minute mi | n 分钟
second ss | s
millisecond ms 毫秒

year()

返回int类型,所以不需要加单引号

select year(‘2022-2-18’)

第二十次课

字符串函数

select len('网络34班A')  -- 查询长度  6
select datalength('网络34班A') -- 查询数据长度 9
select right('宗筠书','2') -- 从右向左截取
select left('宗筠书','2') -- 从左向右截取
SELECT RIGHT(LEFT('中华人民共和国',4),2) -- 函数嵌套 结果:人民
SELECT SUBSTRING('中华人民共和国',3,2) -- 无局限性截取字符串 跟上一个函数嵌套结果相同

学生(学号,姓名,年龄) 其中学号为6位,第3、4位表示班号,请查询出’08’班学生信息

SELECT * FROM 学生 WHERE SUBSTRING(学号,3,2)=08

编程输出1-50之间的偶数

declare @num int
set @num=1
while @num<=50
begin
if @num%2=0
begin
print @num
end
set @num+=1
end

第二十一次课

视图 VIEW

  • 是数据库对象之一
  • 相等于一个窗口,透过它可以看到基本表中的数据
  • 是一张虚表,在数据库中存放的是视图的定义

视图的定义

CREATE VIEW view_name
AS
SELECT 语句

T

创建视图v1,透过它可以查看所有男生的信息

CREATE VIEW v1
AS
SELECT * FROM 学生 WHERE 性别='男'
SELECT * FROM v1

创建视图v2,可以查看年龄大于18岁的男生信息 ==(可以在视图上再创建视图)==

CREATE VIEW v2 AS SELECT * FROM v1 WHERE 年龄>'18'
SELECT * FROM v2

创建视图v3,可查看学生的姓名及其所选课程的名称 ==(简化了用户操作)==

CREATE VIEW v3 
AS
SELECT stuname,couname
FROM student,course,stucou
WHERE student.stuno=stucou.stuno AND stucou.couno=course.couno
SELECT * FROM v3

视图的列标题

CREATE VIEW v4(stuno,stuname)
AS SELECT 学号,姓名 FROM 学生 WHERE 性别='女'

T

创建视图v5,可查看每班有多少人

CREATE VIEW v5(classno,count)
AS SELECT classno,COUNT(*) FROM student GROUP BY classno
SELECT * FROM v5

加密视图 ==with encryption==

CREATE VIEW v6
WITH ENCRYPTION
AS
SELECT * FROM 学生 WHERE 性别='男'

加密过后,不会显示路径,增加了安全性

第二十二次课

存储过程

  • 系统存储过程
  • 自定义存储过程

sp_helptext

sp_helptext v1
sp_helptext v6

T

创建视图v7可查看姓李的学生信息

CREATE VIEW v7
AS
SELECT * FROM 学生 WHERE 姓名 LIKE '李%'
SELECT * FROM v7

修改视图 - 通过视图修改基本表

UPDATE v7
SET 姓名='李强'
WHERE 姓名='李明'

修改过后,视图所在的表也会被修改

WITH CHECK OPTION

设置后,只能在视图条件范围内增删改

  1. 对于update,有with check option,要保证update后,数据要被视图查询出来;
  2. 对于delete,有无with check option都一样;
  3. 对于insert,有with check option,要保证insert后,数据要被视图查询出来;
  4. 对于没有where 子句的视图,使用with check option是多余的。
CREATE VIEW v8
AS
SELECT * FROM 学生 WHERE 姓名 LIKE '李%'
WITH CHECK OPTION

标识列 IDENTITY

  • 数值型的列才有资格成为标识列
  • 标识列的数值是自动生成的
CREATE TABLE book(
书名 INT IDENTITY(1,1) PRIMARY KEY,
书号 CHAR(30) NOT NULL
)
IDENTITY(1,1) -- 前面的1为开始字段,后面的1为每次自动生成增加数

第二十三次课

数据库设计

  • 软件开发
    • 问题定义
    • 调研
    • 需求分析
    • 数据库设计
      • 需求分析
      • 概念设计
        • 需求—>E-R图(抽象化)
      • 逻辑设计
        • E-R图—>表,规范化
      • 物理设计
        • 寻找适合存储的物理环境
      • 数据库的实施
      • 数据库的运行和维护
    • 详细设计
    • 编码
    • 测试

E-R图

E-R图的三要素

  • 实体:客观存在的可以相互区分的事物(矩形)
  • 属性:实体所具有的特性(椭圆形)
  • 联系:实体和实体之间的关联(菱形)

联系的类型

一对一、一对多、多对多

第二十四次课

逻辑设计

E-R图—>表

关系模式

关系名(属性1,属性2,…)

表名(表1,表2,…)

将实体转换为关系模式

关系名=实体名

属性=实体属性

主键=唯一标识实体的属性

学生(学号,姓名)  -- 主键下面应标有横线,学号为主键
课程(课程号,课名) -- 课号为主键
教师(教师号,教师姓名) -- 教师号为主键

将(多对多)联系转换为关系模式

关系名=联系名

属性=与该联系相连的两实体的主码和联系的属性

主键=与该联系相连的两实体的主码的组合(根据实际具体分析)

选修(学号,课程号,成绩)  -- 学号和课程号的组合是主键

将(一对多)联系转换为关系模式

关系名=联系名

属性=与该联系相连的两实体的主码和联系的属性

主键=多端实体的主码

讲授(课程号,教师号)  -- 课程号是主键

==相同主键的关系要合并==

将(一对一)联系转换为关系模式

推向另一端

将(多元)联系转换为关系模式

关系名=联系名

属性=与该联系相连的各实体的主码和联系的属性

主键=与该联系相连的各实体的主码的组合(根据实际具体分析)

完整关系模式

学生(学号,姓名)  -- 主键下面应标有横线,学号为主键
课程(课程号,课名,教师号) -- 课号为主键
教师(教师号,教师姓名) -- 教师号为主键
选修(学号,课程号,成绩) -- 学号和课程号的组合是主键
借书人(借书证号,姓名,单位)		-- 借书证号为主键
借阅(借书证号,书号,借书日期,还书日期) -- 借书证号&书号&借书日期
书籍(书号,书名,品种,数量,存放位置,出版社名) -- 书号
出版社(出版社名)
商店(商店编号,商店名,地址) 	-- 商店编号
销售(商店编号,商品号,销售量) -- 商店编号&商品号
商品(商品号,商品名,规格,单价) -- 商品号
职工(职工编号,姓名,性别,业绩,聘期,月薪,商店编号) -- 职工编号

第二十五次课

规范化(如何判断其规范,不规范如何使其规范)

范式(NF):用来衡量表现规范化程度的标准

  • 1NF:每一个元组分量都是不可再分的

  • 2NF:首先满足1NF,且每一个非主属性都完全函数依赖于任意候选键

    • 学生(学号,身份证号,姓名,年龄)
    • 主属性:包含在候选键中的属性
    • 姓名→学号(姓名 依赖于 学号) 完全函数依赖
    • 学号,课号→姓名 部分函数依赖
    • 关系R(学号,姓名,课号,学分,成绩,课名,年龄)
      • R的候选键为:课号,学号(1个)
      • R的非属性:姓名,学分,成绩,课名,年龄
        • 学号,课号→姓名 部分
        • 学号,课号→学分 部分
        • 学号,课号→成绩 完全
        • 学号,课号→课名 部分
        • 学号,课号→年龄 部分
          • R1(学号,课号,成绩)
          • R2(学号,姓名,年龄)
          • R3(课号,课名,学分)
        • 破坏部分函数依赖
        • 将去掉的项,加上其各自的决定项形成新的关系
  • 3NF:首先满足2NF,且不存在非主属性对于任意候选键的传递函数依赖

    • X→Y→Z(Z传递函数Y依赖于X)

第二十六次课

数据完整性

正确性 一致性

“学生表中的班号一定是班级表中有的”

约束 - ==CONSTRAINT==

类型

  • 主键约束 PRIMARY KEY
  • 外键约束 FOREIGN KEY
  • 检查约束 CHECK
  • 唯一约束 UNIQUE
  • 默认约束 DEFAULT

约束的描述

CREATE TABLE table_name(
CONSTRAINT constraint_name constraint_type(column_name) -- PRIMARY KEY/UNIQUE/FOREIGN KEY
CONSTRAINT constraint_name constraint_type(condition) -- CHECK
CONSTRAINT constraint_name constraint_type(default_value) FOR column_name -- DEFAULT
)

设置主键两种方法

-- 方法一和方法二不能同时用
-- 方法一
CREATE TABLE 学生(
学号 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(12) NOT NULL,
年龄 INT NOT NULL,
性别 VARCHAR(10) NOT NULL
)
-- 方法二
CREATE TABLE 学生(
学号 CHAR(10),
姓名 VARCHAR(12) NOT NULL,
年龄 INT NOT NULL,
性别 VARCHAR(10) NOT NULL,
CONSTRAINT pk1 PRIMARY KEY(学号)
)

T

创建学生表,学生(学号,姓名,年龄,性别),年龄限定在10-70之间

-- 方法一
CREATE TABLE 学生(
学号 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(12) NOT NULL,
年龄 INT NOT NULL,
性别 VARCHAR(10) NOT NULL,
CONSTRAINT age_学生 CHECK(年龄>=10 AND 年龄<=70)
)
-- 方法二
CREATE TABLE 学生(
学号 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(12) NOT NULL,
年龄 INT NOT NULL,
性别 VARCHAR(10) NOT NULL,
CONSTRAINT age_学生 CHECK(年龄 BETWEEN 10 AND 70)
)

创建成绩表,成绩(学号,课号,得分),将得分限定在0-100之间

CREATE TABLE 成绩(
学号 CHAR(10),
课号 CHAR(10),
得分 FLOAT NULL CHECK(得分>=0 AND 得分<=100),
CONSTRAINT pk1 PRIMARY KEY(学号,课号)
)

创建商品表sp,sp(商品号,商品名,单价),实现商品号只能输入三位数字

CREATE TABLE sp1(
商品号 CHAR(10) PRIMARY KEY,
商品名 CHAR(10) NOT NULL,
单价 FLOAT NULL CHECK(单价>=0 AND 单价<=100000),
CONSTRAINT cx CHECK(商品号 LIKE '[0-9][0-9][0-9]')
)

第二十七次课

删除约束 - ==ALTER TABLE DROP CONSTRAINT==

ALTER TABLE DROP CONSTRAINT

T

取消学生2上对年龄的取值限制

ALTER TABLE 学生2
DROP CONSTRAINT c1

添加约束 - ==ADD CONSTRAINT==

T

在学生2表上加上对年龄的限制,要求学生年龄为8-30之间

ALTER TABLE ADD CONSTRAINT xs2_age CHECK(年龄 BETWEEN 8 AND 30)

表已存在,请为sp表添加一列类型

ALTER TABLE sp1 ADD 类型 CHAR(5) NULL

请在类别列上添加限制,只能输入‘A’和’B’

ALTER TABLE sp1 ADD CONSTRAINT lb CHECK(类别 LIKE '[AB]')

删除学生2表的性别列

ALTER TABLE 学生2 DROP COLUMN 性别

为学生2添加性别列的同属,加上限制,只能输入男或女

ALTER TABLE 学生2 ADD 性别 CHAR(4) NULL CHECK(性别 IN('男','女'))

唯一约束 - ==UNIQUE==

格式

方法一:
CONSTRAINT constraint_name UNIQUE(column_name/condition)
方法二:
CREATE TABLE table_name
(
column_name1 data_type(size) UNIQUE
)

第二十八次课

默认约束 - ==DEFAULT==

  • 两种加法
  • 未给定值时自动显示默认值
方法一:
CONSTRAINT constraint_name DEFAULT() FOR column_name
方法二:
CREATE TABLE table_name
(
column_name1 data_type(size) DEFAULT()
)

T

表已存在,在年龄列上添加默认值20

ALTER TABLE 学生4 ADD CONSTRAINT xs1 DEFAULT(20) FOR 年龄

外键约束 - ==FOREIGN KEY==

  • 三种加法
  • 实现表间数据的一致性
  • 数据类型和长度必须要和主表主键一致
  • 所有会造成数据不一致的增删改操作都会被禁止
CONSTRAINT constraint_name FOREIGN KEY(column_name1) REFERENCES table_name(column_name1)

第二十九次课

级联

从表随主表自动变化,达到新的一致性状态

CREATE TABLE 系部2(
系号 CHAR(2) PRIMARY KEY,
系名 VARCHAR(20) NOT NULL
)
CREATE TABLE 班级2(
班号 CHAR(6) PRIMARY KEY,
系号 CHAR(2) NOT NULL,
班名 CHAR(20) NULL,
CONSTRAINT F3 FOREIGN KEY(系号) REFERENCES 系部2(系号) ON UPDATE CASCADE ON DELETE CASCADE
)
ON UPDATE CASCADE -- 级联更新 
ON DELETE CASCADE -- 级联删除

验证

INSERT INTO 系部2 VALUES('1','数学系')
INSERT INTO 班级2 VALUES('01','2','数1班')
-- 失败,与f3冲突,不插入不存在的系部
INSERT INTO 班级2 VALUES('01','1','数1班')
UPDATE 系部2 SET 系号='3' WHERE 系号='1'
SELECT * FROM 系部2
SELECT * FROM 班级2
UPDATE 系部2 SET 系号='3' WHERE 系号='1'
-- 成功,查看班级2,也自动变化了
DELETE FROM 系部1 WHERE 系号='1'

T

创建零件表,零件(零件号,零件名,颜色,供应商,数量)

CREATE TABLE 零件(
零件号 CHAR(10) PRIMARY KEY,
零件名 VARCHAR(20) NOT NULL,
颜色 VARCHAR(6) NOT NULL,
供应商 VARCHAR(10) NOT NULL,
数量 INT NULL
)

创建零件表的同时,限定一个供应商只能供应一种零件,数量在1000-9000之间

CREATE TABLE 零件(
零件号 CHAR(10) PRIMARY KEY,
零件名 VARCHAR(20) NOT NULL,
颜色 VARCHAR(6) NOT NULL,
供应商 VARCHAR(10) NOT NULL UNIQUE,
数量 INT NULL ,-- CHECK(数量 BETWEEN 1000 AND 9000)
CONSTRAINT lj_no CHECK(数量 BETWEEN 1000 AND 9000)
)

表创建成功后,为表添加“城市”列,默认为大连

ALTER TABLE 零件 ADD 城市 CHAR(6) NULL DEFAULT(大连)

限定颜色只能取值为”红色” “白色” “黑色”

ALTER TABLE 零件 ADD CONSTRAINT color CHECK(颜色 IN('红色','白色','黑色'))

学生(学号,姓名,年龄)

课程(课号,课名,学分)

选课(学号,课号,成绩)

创建以上三个表,并实现级联效果

CREATE TABLE 学生(
学号 CHAR(10) PRIMARY KEY,
姓名 VARCHAR(10) NOT NULL,
年龄 INT NULL
)
CREATE TABLE 课程(
课号 CHAR(8) PRIMARY KEY,
课名 VARCHAR(20) NOT NULL,
学分 INT NULL
)
CREATE TABLE 选课(
学号 CHAR(10),
课号 CHAR(8),
成绩 FLOAT(5) NULL,
PRIMARY KEY(学号,课号),
CONSTRAINT s1 FOREIGN KEY(学号) REFERENCES 学生(学号) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT s2 FOREIGN KEY(课号) REFERENCES 课程(课号) ON UPDATE CASCADE ON DELETE CASCADE
)

第三十次课

DECLARE @avenue FLOAT
SELECT @avenue=80
IF @avenue>=60
PRINT '及格'
ELSE
PRINT '不及格'

存储过程 - PROCEDURE

数据库对象之一

可简写为PROC

分类:

  1. 系统存储过程 sp_
  2. 扩展存储过程 xp_
  3. 自定义存储过程

格式

CREATE PROCEDURE  procedure_name(@x 数据类型)
AS
语句

调用 - execute

EXECUTE p1 数值

T

编写存储过程p2,使用学生表,实现输入一个学号,输出该学生姓名的功能

CREATE PROCEDURE p2 @sno CHAR(8)
AS
SELECT 姓名 FROM 学生 WHERE 学号=@sno
-- 调用
EXECUTE p2 '011'
-- 2203337 宗筠书

p94-(2)

ALTER TABLE loan ALTER COLUMN loandate SMALLDATETIME NOT NULL

第三十一次课 & 第三十二次课

复习点

  1. 建库建表,并且能够设置表间级联(外键约束),会添加约束
  2. 会对数据表进行INSERT DELETE UPDATE增删改操作
  3. 会使用SELECT语句进行查询
  4. 创建视图
  5. 创建自定义存储过程

练习题

创建数据库zjs1211,并在该库下创建以下三个数据库,并设置他们的级联关系

图书(书号,书名,出版社,价格,数量)

会员(会员号,会员名,性别,年龄)

借阅(会员号,书号,借书日期,还书日期)

CREATE DATABASE zjs1211
USE zjs1211
CREATE TABLE 图书(
书号 CHAR(8) PRIMARY KEY,
书名 VARCHAR(20) NOT NULL,
出版社 VARCHAR(20) NOT NULL,
价格 MONEY NOT NULL,
数量 INT NULL
)
CREATE TABLE 会员(
会员号 CHAR(8) PRIMARY KEY,
会员名 VARCHAR(10) NOT NULL,
性别 VARCHAR(4) NOT NULL,
年龄 INT NOT NULL

)
CREATE TABLE 借阅(
书号 CHAR(8),
会员号 CHAR(8),
借书日期 DATETIME NOT NULL,
还书日期 DATETIME NULL,
CONSTRAINT pk1 PRIMARY KEY(书号,会员号),
CONSTRAINT fk1 FOREIGN KEY(会员号) REFERENCES 会员(会员号)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk2 FOREIGN KEY(书号) REFERENCES 图书(书号)
ON UPDATE CASCADE ON DELETE CASCADE
)

1.向图书表中插入一条记录

INSERT INTO 图书 VALUES('0001','DB','上海交大',49.8,100)

2.查询图书的总数量

SELECT SUM(数量) FROM 图书

3.查询有哪些出版社

SELECT DISTINCT 出版社 FROM 图书

4.删除价格最低的图书记录

DELETE FROM 图书 WHERE 价格=(SELECT MIN(价格) FROM 图书)

5.查询每个出版社的图书数量

SELECT 出版社,SUM(数量) FROM 图书 GROUP BY 出版社

6.查询”小小”所借阅图书的书号和借阅日期

-- 连接查询
SELECT 书号,借书日期 FROM 借阅,会员 WHERE 会员名='小小' AND 借阅.会员号=会员.会员号
-- 子查询
SELECT 书号,借书日期 FROM 借阅 WHERE 会员号 IN(SELECT 会员号 FROM 会员 WHERE 会员名='小小')

7.查询年龄小于40的会员信息,并按年龄降序排列

SELECT * FROM 会员 WHERE 年龄<40 ORDER BY 年龄 DESC

8.为会员表添加一列”级别”

ALTER TABLE 会员 ADD 级别 CHAR(6) NULL

9.查询会员的姓名及其所借阅图书的名称

SELECT DISTINCT 会员名,书名 FROM 图书,会员,借阅 WHERE 会员.会员号=借阅.会员号 AND 图书.书号=借阅.书号

10.1号会员的性别录入错误,将其修改为”女”

UPDATE 会员 SET 性别='女' WHERE 会员号='1'

11.查询借书日期为2023年的会员号

SELECT DISTINCT 会员号 FROM 借阅 WHERE YEAR(借书日期)=2023

12.创建视图VM,查看书名中含有”技术”字样的图书信息

CREATE VIEW VM
AS SELECT * FROM 图书 WHERE 书名 LIKE '%技术%'

13.创建存储过程PM,查看单价超过平均单价的图书信息,并调用

CREATE PROCEDURE PM
AS
BEGIN
SELECT * FROM 图书 WHERE 价格>(SELECT AVG(价格) FROM 图书)
END
EXEC PM -- 调用

14.查询1号和2号图书信息

SELECT * FROM 图书 WHERE 书号 IN('1','2') 

15.查询”上海交大”出版社出版的价格大于100的图书号和图书名

SELECT 书号,书名 FROM 图书 WHERE 出版社='上海交大' AND 价格>100

练习题2

1.创建数据库db311

CREATE DATABASE db311
USE db311

2.在该库下创建数据表(3个,并设置表间关联)

学生(学号,姓名,年龄,性别,班号)

课程(课号,课名,学分,任课老师)

成绩(学号,课号,得分)

 CREATE TABLE 学生(
学号 CHAR(8) PRIMARY KEY,
姓名 VARCHAR(20) NOT NULL UNIQUE,
年龄 INT NOT NULL,
性别 VARCHAR(4) NOT NULL,
班号 CHAR(6) NOT NULL
)
CREATE TABLE 课程(
课号 CHAR(8) PRIMARY KEY,
课名 VARCHAR(20) NOT NULL,
学分 FLOAT NULL,
任课老师 VARCHAR(10) NULL
)
CREATE TABLE 成绩(
学号 CHAR(8),
课号 CHAR(8),
得分 FLOAT NULL,
CONSTRAINT pk1 PRIMARY KEY(学号,课号),
CONSTRAINT fk1 FOREIGN KEY(学号) REFERENCES 学生(学号)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk2 FOREIGN KEY(课号) REFERENCES 课程(课号)
ON UPDATE CASCADE ON DELETE CASCADE
)

3.向课程表中插入一门新课,2003 数据库技术 4.5 于一

2004 C语言

INSERT INTO 课程 VALUES('2003','数据库技术',4.5,'于一')
INSERT INTO 课程(课号,课名) VALUES('2004','C语言')

4.查看课程表的全部信息

SELECT * FROM 课程

5.统计学生总数,并用中文显示列名

统计所有课程的学分总和

SELECT count(*) AS '学生总数' FROM 学生
SELECT sum(学分) FROM 课程

6.查询“李明”所选修的课程号和得分

SELECT 课号,得分 FROM 成绩,学生 WHERE 姓名='李明' AND 学生.学号=成绩.学号 

7.删除学生表中的性别列

为学生表添加性别列

ALTER TABLE 学生 DROP COLUMN 性别
ALTER TABLE 学生 ADD 性别 CHAR(2) NULL

8.查询学分小于5的课程信息,并按学分降序排列

SELECT * FROM 课程 WHERE 学分<5 ORDER BY 学分 DESC

9.查询每个学生的平均分

SELECT AVG(得分) FROM 成绩 GROUP BY 学号

10.删除最高学分的课程

DELETE FROM 课程 WHERE 学分=(SELECT MAX(学分) FROM 课程)

11.将2004号课程的学分修改为5

UPDATE 课程 SET 学分=5 WHERE 课号='2004'

12.查询学生的姓名及其所选课程的名称

SELECT 姓名,课名 FROM 学生,成绩,课程 WHERE 学生.学号=成绩.学号 AND 成绩.课号=课程.课号 

13.查询01班女生的学号和姓名

SELECT 学号,姓名 FROM 学生 WHERE 性别='女'

14.创建视图VM,可查看学分不超过5的课程信息

CREATE VIEW VM
AS SELECT * FROM 课程 WHERE 学分<=5

15.创建存储过程PM,可查看姓名第二个字是“明”字的学生信息,并调用

CREATE PROCEDURE PM
AS
BEGIN
SELECT * FROM 学生 WHERE 姓名 LIKE '_明%'
END
EXEC PM

评论
TwikooWaline
你无需删除空行,直接评论以获取最佳展示效果
avatar

JZephyr

Welcome,hope you like!
文章目录
  1. 1. 23-08-28 第一课
    1. 1.1. 网站和网页的关系
    2. 1.2. 动态网站和静态网站根本区别
    3. 1.3. HTML(超文本标记语言)
    4. 1.4. 数据库 DB(Database) 概念
    5. 1.5. 数据库管理系统 DBMS 概念
    6. 1.6. 数据库系统 DBS 概念
    7. 1.7. 数据库管理员 DBA 概念
  2. 2. 23-09-04 第三次课
    1. 2.1. 1.服务器名称
    2. 2.2. 2.服务器开启和关闭
    3. 2.3. 3.对界面进行简单的操作
    4. 2.4. 4.数据库文件
  3. 3. 23-09-04 第四次课
    1. 3.1. 1.设置sa登录
    2. 3.2. 2.数据表
      1. 3.2.1. 关系模式
      2. 3.2.2. 数据表结构
      3. 3.2.3. 字符型
        1. 3.2.3.1. 定长,变长区别
      4. 3.2.4. 主键
      5. 3.2.5. 外键
  4. 4. 第五节课
    1. 4.1. 3.SQL-结构化查询语言
      1. 4.1.1. 分类
        1. 4.1.1.1. 按功能分类
          1. 4.1.1.1.1. 数据定义语言DDL - 对数据库对象(表结构)进行操作
          2. 4.1.1.1.2. 数据操纵语言DML - 对表数据进行操作
          3. 4.1.1.1.3. 数据控制语言DCL
  5. 5. 第六节课
    1. 5.1. SELECT 选择
      1. 5.1.1. 1.查询学生信息
        1. 5.1.1.1. T:查询学生的学号和姓名
      2. 5.1.2. 2.查询课程的类别 - ==DISTINCT 去掉查询结果的重复行==
      3. 5.1.3. 3.查询前50名学生的信息 - ==TOP 查询指定数量数据==
        1. 5.1.3.1. T1:查询前5们课程的课号、课名以及授课教师
        2. 5.1.3.2. T2:查询前50%条学生的记录 - ==PERCENT 百分比==
      4. 5.1.4. 4.查询20000001班学生的学号 - ==WHERE==
  6. 6. 第七节课
    1. 6.1. SELECT 选择
      1. 6.1.0.1. T:查询报名人数超过35人的课程号和课程名
      2. 6.1.0.2. T:查询属于01号部门的班级信息
    2. 6.1.1. 5.查询01号部门所开设的学分不小于2的课程信息 - ==AND/OR==
      1. 6.1.1.0.1. T:查询03、08、13号课程信息
  7. 6.1.2. 6.查询03、08、13号课程信息 - ==IN 值在列表中/NOT IN 值不在列表中==
    1. 6.1.2.0.1. T:查询课号不是03、08、13号课程信息
  • 6.1.3. 7.查询报告人数在35到40之间(含边界)的课程号 - ==(NOT) BETWEEN AND==
  • 7. 第八节课
    1. 7.1. SELECT 选择
      1. 7.1.1. 8.查询课程信息,并按照学分的降序排列 - ==ORDER BY ASC(升)/DESC(降)==
        1. 7.1.1.1. 查询课程信息,先按照学分的降序排列,学分相同再按报名人数升序排列
  • 8. 第九节课
    1. 8.1. SELECT 选择
      1. 8.1.1. 9.模糊查询 - ==LIKE==
        1. 8.1.1.1. 通配符
          1. 8.1.1.1.1. %通配符
          2. 8.1.1.1.2. _通配符
          3. 8.1.1.1.3. []通配符
          4. 8.1.1.1.4. [^]通配符
          5. 8.1.1.1.5. TEST
  • 9. 第十节课
    1. 9.1. SELECT 选择
      1. 9.1.1. ==NOT LIKE== - 不姓李的学生信息
        1. 9.1.1.1. TEST
          1. 9.1.1.1.1. 查询姓李、张、陈的学生信息
      2. 9.1.2. 10.==聚合函数==
        1. 9.1.2.1. 查询所有学生数量
        2. 9.1.2.2. 修改查询结果的列标题
        3. 9.1.2.3. TEST
  • 10. 第十一节课
    1. 10.1. SELECT 选择
      1. 10.1.1. 11.查询**==每==**个班级的人数 - ==GROUP BY== 分组
        1. 10.1.1.1. TSET
        2. 10.1.1.2. ==HAVING== 关键字
          1. 10.1.1.2.1. 查询人数超过40个人的班级号
          2. 10.1.1.2.2. TEST
  • 11. 第十二节课
    1. 11.1. SELECT 选择
      1. 11.1.1. 12.子查询(嵌套查询)
        1. 11.1.1.1. 查询报告人数超过平均报名人数的课程信息
        2. 11.1.1.2. TEST
  • 12. 第十三次课
    1. 12.1. SELECT 选择
      1. 12.1.1. 13.连接查询
        1. 12.1.1.1. TEST
  • 13. 第十四次课
    1. 13.1. SELECT 选择
      1. 13.1.1. 14.查询密码为空的学生信息 - ==IS (NOT) NULL==
      2. 13.1.2. 15.将查询结果插入到表中 - ==INTO==
        1. 13.1.2.1. 方法1
        2. 13.1.2.2. 方法2
      3. 13.1.3. 16. >ALL >ANY
    2. 13.2. SELECT 小结
    3. 13.3. INSERT 插入
      1. 13.3.1. 格式
      2. 13.3.2. T1
      3. 13.3.3. T2
  • 14. 第十五次课
    1. 14.1. INSERT 插入
    2. 14.2. UPDATE 修改
      1. 14.2.1. 格式
      2. 14.2.2. T
    3. 14.3. DELETE 删除
      1. 14.3.1. 格式
      2. 14.3.2. T
  • 15. 第十六次课
    1. 15.1. T
  • 16. 第十七次课
    1. 16.1. 创建数据库
      1. 16.1.1. 命令
    2. 16.2. 创建数据表
      1. 16.2.1. 格式
    3. 16.3. 修改数据表
      1. 16.3.1. 加列
      2. 16.3.2. 删列
      3. 16.3.3. 改列
    4. 16.4. 删除数据表
      1. 16.4.1. 格式
    5. 16.5. 删除数据库
    6. 16.6. T
  • 17. 第十八次课
    1. 17.1. T
    2. 17.2. datetime输入格式
    3. 17.3. 清空表s
    4. 17.4. 删除表s
    5. 17.5. T 函数在查询上的应用
    6. 17.6. 变量
      1. 17.6.1. 全局变量
      2. 17.6.2. 局部变量
        1. 17.6.2.1. print和select区别
        2. 17.6.2.2. set和select区别
        3. 17.6.2.3. 格式
  • 18. 第十九次课
    1. 18.0.1. 流控语句(流程控制)
      1. 18.0.1.1. if 格式
      2. 18.0.1.2. while 格式
  • 18.1. 运算符
  • 18.2. 函数
    1. 18.2.1. 数学函数
    2. 18.2.2. 日期时间函数
      1. 18.2.2.1. datediff()
        1. 18.2.2.1.1. datepart格式
      2. 18.2.2.2. year()
  • 19. 第二十次课
    1. 19.1. 字符串函数
  • 20. 第二十一次课
    1. 20.1. 视图 VIEW
      1. 20.1.1. 视图的定义
      2. 20.1.2. T
      3. 20.1.3. 视图的列标题
      4. 20.1.4. T
      5. 20.1.5. 加密视图 ==with encryption==
  • 21. 第二十二次课
    1. 21.1. 存储过程
      1. 21.1.1. sp_helptext
      2. 21.1.2. T
    2. 21.2. 修改视图 - 通过视图修改基本表
    3. 21.3. WITH CHECK OPTION
    4. 21.4. 标识列 IDENTITY
  • 22. 第二十三次课
    1. 22.1. 数据库设计
    2. 22.2. E-R图
      1. 22.2.1. E-R图的三要素
        1. 22.2.1.1. 联系的类型
  • 23. 第二十四次课
    1. 23.1. 逻辑设计
      1. 23.1.1. 关系模式
      2. 23.1.2. 将实体转换为关系模式
      3. 23.1.3. 将(多对多)联系转换为关系模式
      4. 23.1.4. 将(一对多)联系转换为关系模式
      5. 23.1.5. 将(一对一)联系转换为关系模式
      6. 23.1.6. 将(多元)联系转换为关系模式
    2. 23.2. 完整关系模式
  • 24. 第二十五次课
    1. 24.1. 规范化(如何判断其规范,不规范如何使其规范)
  • 25. 第二十六次课
    1. 25.1. 数据完整性
      1. 25.1.1. 约束 - ==CONSTRAINT==
        1. 25.1.1.1. 类型
        2. 25.1.1.2. 约束的描述
        3. 25.1.1.3. 设置主键两种方法
        4. 25.1.1.4. T
  • 26. 第二十七次课
    1. 26.0.1. 删除约束 - ==ALTER TABLE DROP CONSTRAINT==
      1. 26.0.1.1. T
    2. 26.0.2. 添加约束 - ==ADD CONSTRAINT==
      1. 26.0.2.1. T
    3. 26.0.3. 唯一约束 - ==UNIQUE==
      1. 26.0.3.1. 格式
  • 27. 第二十八次课
    1. 27.0.1. 默认约束 - ==DEFAULT==
      1. 27.0.1.1. T
    2. 27.0.2. 外键约束 - ==FOREIGN KEY==
  • 28. 第二十九次课
    1. 28.0.1. 级联
      1. 28.0.1.1. 验证
    2. 28.0.2. T
  • 29. 第三十次课
    1. 29.1. 存储过程 - PROCEDURE
      1. 29.1.1. 格式
      2. 29.1.2. 调用 - execute
      3. 29.1.3. T
  • 30. 第三十一次课 & 第三十二次课
    1. 30.1. 复习点
    2. 30.2. 练习题
    3. 30.3. 练习题2
  • 加载头像
    0%
    互动
    最新评论
    正在加载中...
    引用到评论
    随便逛逛博客分类文章标签
    复制地址关闭热评深色模式轉為繁體