复习点:
1.建立数据库的两种方法
(1)菜单页面建立:启动SQL server 2019并连接后,如下图
(2)SQL语句:在菜单栏上点击“新建查询”,输入语句 CREATE DATABASE <数据库名> [AUTHORIZATION<用户名>] [ON [PRIMARY] (路径/文件大小)]
- AUTHORIZATION选项是用于设定数据库拥有者,默认(首次新建无指定)为登录的注册人
- [ON [PRIMARY] (路径/文件大小)] 用于设定数据库存放的位置和文件初始容量,路径默认为当前盘及当前路径
CREATE DATABASE 学生选课记录
ON PRIMARY(
NAME = 学生选课记录,
2.打开数据库
USE <数据库名>
USE 学生选课记录
3.关闭/切换数据库
USE[<数据库名>]
- 切换是指在已经打开某个数据库的情况下,切换到另一个数据库,同时关闭原数据库的过程。
4.修改数据库
(1)修改库名
- ALTER DATABASE<数据库名>
MODIFY NAME = <新数据库名>
ALTER DATABASE 学生选课纪律
MODIFY NAME = 学生选课记录
(2)修改数据库容量
- SIZE = 修改后的大小
MAXSIZE= 修改后的最大容量
FILEGROWTH = 新的增长方式 - 注意:只有建立数据库权限者,才能执行修改命令;为了防止文件中信息被损坏,文件容量只能增加。
5.删除数据库
(1)界面菜单直接删除
(2)SQL语句:DROP DATABASE<数据库名>
- DROP语句删除数据库的前提条件是该数据库处于正常关闭状态。
- 删除数据库后,数据库及数据表、视图等对象也将会被全部删除。
(在这个数据库打开的情况下进行删除操作,如下)
USE MASTER
DROP DATABASE 学生选课记录
6.数据表的建立
(1)界面菜单直接操作:
- 点击新建表
- 开始输入
- 输入完成后,选择一个作为主键
(2)SQL语句建立:
CREATE TABLE <表名>(
<列名1><列数据类型>[列完整性约束],
<列名2><列数据类型><列完整性约束>,…
[表级完整性约束])
常用的列完整性约束有5种:
- PRIMARY KEY约束:指定主键
- UNIQUE约束:表示该列只存放唯一(不重复)的属性值
- NOT NULL和NULL约束:分别确定该列值不为空或为空
- DEFAULT约束:该列未定义时的默认取值
- CHECK约束:通过约束表达式设置其列值应当满足的具体条件并检查约束。
USE 学生选课记录
CREATE TABLE STUDENT (
姓名 VARCHAR(10) NOT NULL,
性别 VARCHAR(5) NOT NULL, CHECK (性别 IN ('男','女')),
学号 VARCHAR(10) PRIMARY KEY(学号),
专业 VARCHAR(10) NOT NULL,
班级 VARCHAR(10) NOT NULL,)
CREATE TABLE COURSE (
课程号 VARCHAR(10) PRIMARY KEY(课程号),
课程名 VARCHAR(50) NOT NULL,
任课教师 VARCHAR(10) NOT NULL,
学分 INT NOT NULL,)
CREATE TABLE SC (
学号 VARCHAR(10) NOT NULL,
课程号 VARCHAR(10) NOT NULL,
成绩 INT NULL,)
--创建了三个表
一些对数据类型的说明:
(1)INT:可以表示从-231 ~ 231-1(-2147483648,2147483647)内的整数,每个数据按4个字节存储,其中1位表示正负,剩下31位表示数据大小。
(2)SMALLINT:可以表示从-215 ~ 215-1(-32768,32767)内的整数,每个数据占用2个字节的存储空间。其中1位表示正负,15位表示大小。
(3)TINYINT:表示0~255之内的整数,每个数据占用1个字节存储。
(4)BIGINT:表示从-263 ~ 263-1内的整数。每个数据占用8个字节的存储空间。
(5)FLOAT可以精确到15位,REAL可以精确到7位。
(6)CHAR(N): 每个字符和符号占一个字节的存储空间。n 表示所有字符所占的存储空间,取值为1 到8000,系统默认值为1。若输入数据的字符数小于n,则系统自动在其后添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分。
(7)NCHAR(N):n 的取值为1 到4000,每个字符占两个字节的存储空间,所以可以将全世界的语言文字放在一个数据列中而不会出现编码冲突。
(8)VARCHAR(N):n 的取值为1 到8000,若输入的数据过长,将会截掉其超出部分。与CHAR不同的是,VARCHAR具有变动长度的特性,因为存储长度为实际数值长度(意思是若输入数据的字符数小于n ,系统不会在其后添加空格来填满设定好的空间。)
7.数据表的修改
(1)新增列:(注意新增列的属性不可定义为NOT NULL。不管原来数据表中是否有数据,新增列一定为空值NULL)
ALTER TABLE<表名>[ADD <新列名><列数据类型><列完整性约束>]
ALTER TABLE STUDENT
ADD 出生日期 DATATIME
(2)删除列:
DROP COLUMN <列名>
ALTER TABLE STUDENT
DROP COLUMN 出生日期
(3)修改原有列(注意一定要慎重修改原有列,因为修改可能改变原有约束条件或者是破坏原有数据)
如:修改学生表中性别的数据类型为NCHAR(2)
ALTER TABLE STUDENT
ALTER COLUMN 性别 NCHAR(2)
8.数据表的删除
DROP TABLE<数据表名>
- 删除数据表的时候,表中的所有数据及建立的索引将会一起被删除,系统将保留该表上的视图定义,但不可使用。
- 有两个参数:RESTRICT和CASCADE,前一个有限制,后一个无限制
DROP TABLE STUDENT
8.数据的插入
(1)单个记录的插入
INSERT INTO<数据表名> [(<列名1>,<列名2>,…<列名n>)]
VALUES[(<列值1>,<列值2>,…<列值n>),
(<列值1>,<列值2>,…<列值n>),…]
INSERT STUDENT ("姓名","性别","学号","专业","班级")
VALUES ('钱二','女',01116085,'经济学','1班')
INSERT INTO STUDENT VALUES('孙三','男','26838495','法学','1班')
INSERT INTO STUDENT VALUES('李四','女','15285009','计算机科学','1班')
注意:若是有属性列在INTO子句中没有出现,那么记录在对应列上取空值
(2)插入成批查询结果:与SELECT语句结合
9.数据查询
(1)DISTINCT可以使查询的结果只含不同的记录,取消后面其他相同的记录。
(2)*选项将显示数据表全部字段中满足查询条件的所有查询记录。
(3)WHERE子句后跟条件表达式。
(4)FROM后跟要查询的表或试图。
(5)SELECT后跟要选择的对象。
(6)GRUOP BY子句将查询结果按指定选取列值分组,该属性列值相同的记录为一组,各组产生结果表中的一条记录。
(7)HAVING子句出现在GRUOP BY后,作用是将分组后查询结果中不满足“组条件表达式”的记录去掉。常用聚合函数来完成任务。
(8)ORDER BY子句,使查询结果对指定的列值按一定次序排列。默认为ASC(升序),DESC为降序。
1.条件查询
(1)比较条件查询:比如查询年龄小于25岁的:WHERE 年龄<25
(2)谓词条件查询:
- 指定范围:(NOT)BETWEEN…AND…
- 包含查询:IN,判断属性值是否属于某个集合
- 空值查询:IS NULL,IS NOT NULL
- 统计查询:GROUP BY后跟HAVING语句
2.模糊查询
在条件表达式中,(NOT)LIKE字符串常数
- %用于表示任意长度。比如a%b表示以a开头且以b结尾的任意长度的字符串。
- _表示任意一个单字符。比如a_b表示以a开头,以b结尾的长度为3的任意字符串。
3.排序查询:ORDER BY
4.连接查询:同时涉及了两个表以上的表的查询,分为自身连接查询和多表连接查询。
- 在FROM中,多张表用“,”隔开
- 在WHERE中,要指定连接的“表名.列名”和连接条件。
5.嵌套查询:外层为父查询,内层为子查询。
- SOME 表示“某一个”,ALL表示“每个”或“所有”。
- EXISTS表示存在,返回的是“真”或“假”