MSSQL基础_1


第一章 数据库基础

  • 名词解释

关系:二维表
元祖:二维表中的一行
属性:二维表中的一列
域:每个属性取值范围 比如 性别 取值范围(男、女)

  • 标识符命名规则
  1. 标识符的首字符必须是下列字符之一:

    ​ 统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母az和AZ,以及来自其他语言的字符。下划线“_”、符号“@”或者数字符号“#”

  2. 标识符的后续字符可以是以下3种:

​ 统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母或其他国家/地区脚本的十进制数字。符号“@”、美元符号“$”、数字符号“#”或下划线“_”

  1. 标识符不允许是Transact-SQL的保留字
  2. 不允许嵌入空格或者其他特殊字符

第二章 数据库操作

使用默认数据库存储路径创建

/***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

约束

  1. 主键约束(Primary Key)

    列的内容不能重复,且不能为空,代表这条数据

  2. 唯一约束(Unique)

    列的内容都是唯一的,不能重复

  3. 默认约束(Default)

  4. 检查约束(Check)

  5. 外键约束(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

给列设置别名

  1. “原列名 AS 别名”
  2. “别名=原列名”
  3. “原列名 别名”
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

文章作者: yonghengnm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yonghengnm !
 上一篇
MSSQL基础-2 MSSQL基础-2
2021-12-23 yonghengnm
下一篇 
2021-11-16 yonghengnm
  目录