第一章 数据库基础
- 名词解释
关系:二维表
元祖:二维表中的一行
属性:二维表中的一列
域:每个属性取值范围 比如 性别 取值范围(男、女)
- 标识符命名规则
标识符的首字符必须是下列字符之一:
统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母a
z和AZ,以及来自其他语言的字符。下划线“_”、符号“@”或者数字符号“#”标识符的后续字符可以是以下3种:
统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母或其他国家/地区脚本的十进制数字。符号“@”、美元符号“$”、数字符号“#”或下划线“_”
- 标识符不允许是Transact-SQL的保留字
- 不允许嵌入空格或者其他特殊字符
第二章 数据库操作
使用默认数据库存储路径创建
/***CREATE DATABASE语法***
CREATE DATABASE database_name
*/
CREATE DATABASE mydb
详细路径创建数据库
CREATE DATABASE mydb
ON PRIMARY
(
Name=mydb_data,
Filename='C:\mymssql\mydb.mdf',
Maxsize=unlimited, --可省略
Filegrowth=10% --可省略
)
LOG ON
(
Name=mydb_log,
Filename='C:\mymssql\mydb.ldf',
Size=3MB, --可省略
MaxSize=50MB, --可省略
FileGrowth=1 --可省略
)
UNLIMITED:指定文件将增长到磁盘充满。
在 SQL Server 中,指定为不限制增长的日志文件的最大大小为 2 TB,而数据文件的最大大小为 16 TB。
FILEGROWTH growth_increment 指定文件的自动增量。 文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。
增加数据库文件
ALTER DATABASE mydb
ADD FILE
(
Name=mydb,
Filename='C:\mymssql\mydb.ndf'
)
删除数据库文件
ALTER DATABASE mydb
REMOVE FILE mydb
收缩数据库
DBCC SHRINKDATABASE(marvel)
数据库更名
USE master
exec sp_renamedb 'mydb','my_db'
删除数据库
/***DROP DATABASE 语法***
DROP DATABASE database_name
*/
DROP DATABASE mydb
第三章 表与约束
用户数据类型
创建数据类型post char10位字符 不能为空
Exec sp_addtype post,'char(10)','NOT NULL'
创建表
/***SQL CREATE TABLE 语法***
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
*/
CREATE TABLE student
(
ID int NOT NULL,
Name nvarchar(50),
age int
)
修改表某列可以为空
ALTER TABLE student
ALTER COLUMN ID int NULL
约束
主键约束(Primary Key)
列的内容不能重复,且不能为空,代表这条数据
唯一约束(Unique)
列的内容都是唯一的,不能重复
默认约束(Default)
检查约束(Check)
外键约束(Foreign Key)
创建 非空主键 约束的表
CREATE TABLE employee
(
ID int CONSTRAINT PK_ID PRIMARY KEY,
Name char(50),
Sex char(2),
Age int
)
修改表某列 添加 主键 约束
ALTER TABLE student
ADD CONSTRAINT prm_id PRIMARY KEY(ID)
删除表 主键 约束
ALTER TABLE student
DROP CONSTRAINT prm_id
创建 唯一约束 的表
CREATE TABLE employee
(
ID int CONSTRAINT UQ_ID UNIQUE,
Name char(50),
Sex char(2),
Age int
)
修改表某列 添加 唯一 约束
ALTER TABLE employee
ADD CONSTRAINT Unique_id UNIQUE(ID)
删除表 唯一约束
ALTER TABLE employee
DROP CONSTRAINT Unique_id
创建表 检查 约束
CREATE TABLE employee
(
ID int,
Name varchar(50),
Sex char(2) CONSTRAINT CK_sex Check(directorsex in ('男','女')),
Age int
)
修改表某列 添加 检查 约束
ALTER TABLE employee
ADD CONSTRAINT Check_Sex Check(Sex='女')
删除表 检查 约束
ALTER TABLE employee
DROP CONSTRAINT Check_Sex
创建表 默认 约束
CREATE TABLE employee
(
ID int,
Name char(50),
Sex char(2) CONSTRAINT def_sex Default '男',
Age int
)
修改表某列 添加 默认 约束
ALTER TABLE employee
ADD CONSTRAINT def_sex default '男' FOR Sex
已创建表添加 外键 约束
ALTER TABLE student
ADD CONSTRAINT Fkey_ID
FOREIGN KEY(ID)
REFERENCES employee(ID)
创建表 外键约束
CREATE TABLE Laborage
(
ID int,
Wage MONEY,
CONSTRAINT fkey_id
FOREIGN KEY (ID)
REFERENCES employee(ID)
)
已存在的表添加新列
ALTER TABLE student
ADD Sex char(2)
已存在的表修改列类型
ALTER TABLE student
ALTER COLUMN Sex char(10)
已存在的表 删除列
ALTER TABLE student
DROP COLUMN Sex
删除已存在的表
DROP TABLE student
综合实例
/*需求:
1)创建学生数据库StuDB
2)班级表:c1abses
班级编号:Cid(主键、自增),
班级名:Cname(非空)
--学生表:Scudencs
学号:stuid(主键、自增)
学生姓名:stuname(非空,不允许重复),
性别:sex(默认:男)
年龄:Age(18-22)
所在班级编号:ClassId(外键)
*/
USE master
GO
if exists (SELECT * FROM sysDATABASEs WHERE name='StuDB')--判断数据库是否存在
DROP DATABASE StuDB --若存在,则先删除该数据库
GO
CREATE DATABASE StuDB
GO
USE StuDB --把stuDB设置为当前数据库
GO
--—-创建表
--班级表
CREATE TABLE classes
(
cid int primary key identity(1,1),--班级编号
Cname varchar(20) not null--班级名
)
--学生表
CREATE TABLE Student
(
Stuid int primary key identity(1,1),--学生编号
Stuname varchar(20) unique not null,--学生姓名
Sex char(2) default('男'),--性别
Age int check(Age>=18 or Age<=22),--年龄
ClassId int references classes(cid)--班级编号
)
第四章 表与数据
新增数据
/***语法
INSERT [INTO] <表名> [列名] VALUES<值列表>
*/
---单条数据
INSERT INTO classes VALUES('一(1)班')
---一次性多条数据
INSERT Student(Stuname,Sex,Age,ClassId)
SELECT '张三','男',18,1
SELECT '李四','女',18,1
SELECT '王五','男',18,1
SELECT '赵六','女',18,1
更新数据
/***语法
UPDATE <表名> SET <列名=更新值>
[WHERE<更新条件>]
*/
UPDATE Student set sex='女' WHERE stuname='张三'
删除数据
/***语法
DELETE FROM <表名> [WHERE 条件表达式]
*/
DELETE FROM Student WHERE stuname='张三'
/***语法
TRUNCATE TABLE <表名>
*/
/*
注意:上述语句与没有条件表达式的DELETE语句结果一样,但是执行的速度更快,使用的系统资源和事务日志更少,并且有外键约束的数据表不能使用TRUNCATE TABLE,需要用DELETE来完成。
*/
第五章 查询
查全部字段(列)
SELECT * FROM <表名>
查部分字段(列)
SELECT sid,stuname FROM students
给列设置别名
- “原列名 AS 别名”
- “别名=原列名”
- “原列名 别名”
SELECT stuid AS 学号,姓名=stuname,stusex 性别 FROM stuinfo
distinct top 关键字
---去除重复项
SELECT DISTINCT stuid FROM stuinfo
---查询前N条记录
SELECT TOP 3 * FROM stuinfo
对查询结果筛选
---BETWEEN..AND
---学号在2-4之间的学员信息
SELECT * FROM stuinfo WHERE stuid BETWEEN 2 AND 4
---IN 和 NOT IN
---查询stuinfo表 学号为 1 3 5 的学员信息
SELECT * FROM stuinfo WHERE stuid IN (1,3,5)
---查询stuinfo表 学号不包含 2 3 的学员信息
SELECT * FROM stuinfo WHERE stuid NOT IN (2,3)
---AND 和 OR
---查出年龄大于17的所有男生
SELECT * FROM stuinfo WHERE stusex='男' AND age>=17
SELECT * FROM stuinfo WHERE stusex='男' OR age>=17
---LIKE
---查询学生姓名包含 ‘五’ 的记录
SELECT * FROM stuinfo WHERE stuname LIKE ‘%五%’
---ORDER BY排序
---所有学生年龄从大到小显示
---ORDER BY 列名 DESC --降序
---ORDER BY 列名 ASC --升序
SELECT * FROM stuinfo ORDER BY stuage
聚合函数
SUM 总计
---查询Java考试成绩的总和
SELECT SUM(score) AS Java总和 FROM stumarks WHERE subject='Java'
MAX 最大值
---查询Java考试成绩最高
SELECT MAX(score) AS Java总和 FROM stumarks WHERE subject='Java'
MIN 最小值
---查询Java考试成绩最低
SELECT MIN(score) AS Java总和 FROM stumarks WHERE subject='Java'
---AVG 平均值
---查询Java考试成绩的平均值
SELECT AVG(score) AS Java总和 FROM stumarks WHERE subject='Java'
---COUNT 计数
---查询Java考试成绩的人数
SELECT COUNT(score) AS Java总和 FROM stumarks WHERE subject='Java'
分组查询
---GROUP BY 子句
---查出男女平均年龄
SELECT AVG(stuage),sex FROM stuinfo GROUP BY SEX