前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server学习笔记

SQL Server学习笔记

原创
作者头像
reload
发布2024-05-02 00:02:15
720
发布2024-05-02 00:02:15
举报
文章被收录于专栏:SQL相关SQL相关

哈喽,大家好呀!这里是码农后端。本篇复习一下SQL Server数据库的数据定义DDL和数据操纵DML的相关知识。

1)SQL主要动词:

SQL功能

动词

数据定义

CREATE(创建),DROP(删除),ALTER(修改)

数据查询

SELECT

数据操纵

INSERT(插入),UPDATE(更新),DELETE(删除)

数据控制

Grant(授权),REVOKE(收回权限),DENY(撤销并拒绝权限)

2)SQL程序语言有4种类型,如下

DDL(Data Definition Language):数据定义语言

DQL(Data Query Language):数据查询语言

DML(Data Manipulation Language):数据操纵语言

DCL(Data Control Language):数据控制语言

一、DDL(数据定义语言)

1、表的定义与删除

1.1 定义表

新建一个DB数据库,在该数据库下建表。

1)首先创建一个部门表(Department),如下

代码语言:sql
复制
USE DB; --切换当前数据库为DB
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'Department' AND type = 'U')
    DROP TABLE dbo.Department;
--创建表
CREATE TABLE Department --部门表
(
	departmentID INT PRIMARY KEY IDENTITY(1,1), --IDENTITY(1,1)代表主键自增,从1开始步长为1自增长
	departmentName VARCHAR(50) NOT NULL,
	departmentRemark TEXT NULL --部门描述,可以为空,test为长文本类型
)

其中,第2句代码含义是判断数据库中是否已存在名为'Department'的对象,如果存在,则删除,因为sql server数据库中不允许创建重复的表;type='U'判断对象类型为用户定义表类型

IDENTITY(1,1)代表主键自增,从1开始,步长为1自增长

2)再创建一个职级表(Rank)

由于rank是关键字,为了区别开,将该字段加上中括号[]表示

代码语言:sql
复制
CREATE TABLE [Rank] --职级表
(
	rankID INT PRIMARY KEY IDENTITY(1,1), --IDENTITY(1,1)代表主键自增,从1开始步长为1自增长
	rankName VARCHAR(50) NOT NULL,
	rankRemark TEXT NULL --职级描述,可以为空,test为长文本类型
)

3)最后创建一个员工表

代码语言:sql
复制
CREATE TABLE Employee --员工表
(
	employeeId INT PRIMARY KEY IDENTITY(1,1), --IDENTITY(1,1)代表主键自增,从1开始步长为1自增长
	employeeName VARCHAR(20) NOT NULL,
	employeeSex CHAR(2) DEFAULT('男') CHECK(employeeSex = '男' OR employeeSex = '女') NOT NULL, --CHECK限定列的取值范围
	employeeBirth DATETIME NOT NULL, --出生年月
	employeeSalary DECIMAL(12,2) CHECK(employeeSalary >= 1000 AND employeeSalary <= 1000000) NOT NULL, --总长度为12,小数点后两位
	employeePhone VARCHAR(20) UNIQUE NOT NULL, --每个人的电话号码是唯一的
	employeeAddress VARCHAR(50),
	employeeAddTime DATETIME DEFAULT(GETDATE()), --添加时间
	-- 添加部门外键约束,部门(引用外键)。外键:将其他表的主键作为字段
	departmentID INT REFERENCES dbo.Department(departmentID) NOT NULL, 
	-- 添加职级外键约束,职级(引用外键)
	rankID INT REFERENCES dbo.[Rank](rankID) NOT NULL 
)

简单分析,上表使用到的约束有:

a、使用CHECK约束,限制员工性别列的取值范围为'男'或'女';限制员工工资列的取值范围在1000-1000000之间(包含)

b、使用UNIQUE约束,限制员工号码唯一不重复

c、NOT NULL非空约束

d、PRIMARY KEY主键约束

e、使用DEFAULT默认约束,指定添加员工时间的默认值为当前时间

f、外键约束

可以说,基本上的约束都使用到了。

1.2 删除表

使用drop,如下

代码语言:sql
复制
DROP TABLE IF EXISTS dbo.Course;

表示如果当前数据库中存在Course表,则将其删除

2、修改表结构

1)添加列:alter table 表名 add 新列名 数据类型

如为员工表增加一个年龄列,可以为空

代码语言:sql
复制
ALTER TABLE dbo.Employee ADD age INT NULL; 

2)删除列:alter table 表名 drop column 列名

如删除员工表的年龄列

代码语言:sql
复制
ALTER TABLE dbo.Employee DROP COLUMN age; 

3)修改列:alter table 表名 alter column 列名 数据类型

如修改员工表的员工姓名字段,类型不变,将其长度改为50

代码语言:sql
复制
ALTER TABLE dbo.Employee ALTER COLUMN employeeName VARCHAR(50); 

4)维护约束(添加/删除约束)

4.1)添加约束:alter table 表名 add constraint 约束名 约束定义

如下列举了一些常见约束(如check、主键等)的添加

代码语言:sql
复制
--添加约束(check约束) 
--ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(表达式)
--添加约束(主键)
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(列名)
--添加约束(唯一)
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)
--添加约束(默认值)
ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT 默认值 FOR 列名
--添加约束(外键)
--ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN key(列名) REFERENCES 关联表名(列名(主键))

4.2)删除约束:alter table 表名 drop constraint 约束名

注:constraint是约束的意思,用其定义约束

二、DML(数据操作语言)

建完数据库和表后,就可以往表中插入数据了。

注:设置了主键自增或默认值的字段可以不用手动插入

1、插入数据

基本语法:insert into 表名(列名表) values(值列表)

以下为往各表中插入一些测试数据。

2.1 部门表插入

由于departmentID设置了主键自增,所以可以不用插入。

代码语言:sql
复制
INSERT INTO dbo.Department(departmentName,departmentRemark) VALUES('研发部','个个都是技术大佬')
INSERT INTO dbo.Department(departmentName,departmentRemark) VALUES('市场部','开拓市场舍我其谁')

也可以简写如下(省略了字段名,容易出错,不推荐)

代码语言:sql
复制
INSERT INTO dbo.Department VALUES('研发部','个个都是技术大佬')
INSERT INTO dbo.Department VALUES('市场部','开拓市场舍我其谁')

一次插入多行数据(union:将每行连接起来)

1)方法1:使用union

代码语言:sql
复制
INSERT INTO dbo.Department(departmentName,departmentRemark) 
SELECT '测试部','负责软硬件的测试' UNION 
SELECT '人事部','负责人员考核任用' UNION
SELECT '销售部','负责销售公司产品'

2)方法2:values后面批量

代码语言:sql
复制
INSERT INTO dbo.Department(departmentName,departmentRemark) VALUES('aa','aaa'),('bb','bbb') 
2.2 职级表插入
代码语言:sql
复制
INSERT INTO dbo.[Rank](rankName,rankRemark) 
VALUES('初级','1-3年初级职级'),('中级','3-5年中级职级'),('高级','10年以上高级职级')
2.3 员工表插入
代码语言:sql
复制
INSERT INTO dbo.Employee
(
    employeeName,
    employeeSex,
    employeeBirth,
    employeeSalary,
    employeePhone,
    employeeAddress,
    departmentID,
    rankID
)
VALUES
('张三', '男','2002-4-15',5500,'18702509838','南昌',5,1),
('李四', '女','2003-3-15',6000,'18702502233','广州',1,3),
('王五', '男','2001-5-15',5000,'18702509866','深圳',6,2);

INSERT INTO dbo.Employee(employeeName,employeeSex,employeeBirth,employeeSalary,employeePhone,employeeAddress,departmentID,rankID) 
VALUES('赵六', '女','2002-5-15',7000,'18702509888','南昌',6,2)
INSERT INTO dbo.Employee(employeeName,employeeSex,employeeBirth,employeeSalary,employeePhone,employeeAddress,departmentID,rankID)
VALUES('王八', '女','2002-9-15',7000,'18702506666','广州',1,2)
INSERT INTO dbo.Employee(employeeName,employeeSex,employeeBirth,employeeSalary,employeePhone,employeeAddress,departmentID,rankID)
VALUES('小美', '女','2003-1-15',9000,'18700006666','深圳',3,1)

2、修改数据

基本语法:update 表名 set 字段1 = 值1,字段2 = 值2 where条件

代码语言:sql
复制
UPDATE dbo.Employee SET employeeSalary = employeeSalary+1000 --工资调整,每个员工加薪1000元
UPDATE dbo.Employee SET employeeSalary = employeeSalary+1000 WHERE employeeId = 10 --针对个人调薪
UPDATE dbo.Employee SET employeeSalary = employeeSalary*2,employeeAddress = '上海' WHERE employeeName = '王五'

3、删除数据

基本语法:delete from 表名 where条件

1)批量删除

代码语言:sql
复制
DELETE FROM dbo.Department WHERE departmentID IN (2,7,8)

2)删除销售部(部门编号6)工资大于10000的员工

代码语言:sql
复制
DELETE FROM dbo.Employee WHERE departmentID = 6 AND employeeSalary >10000

3)删除的3种实现(drop,truncate,delete)

重点掌握,如下

代码语言:sql
复制
drop table dbo.Employee --删除表对象,比较危险,如要删除建议先做好备份;推荐以下两种。
truncate table dbo.Employee --删除数据(清空数据),表对象即表结构依然存在
DELETE from dbo.Department --删除所有数据,表对象即表结构依然存在

truncate和delete区别:

(1)truncate清空所有数据,不能有条件, delete可以删除所有数据也可以带条件,删除符合条件的数据

(2)自动编号:

假设表中自动编号为1, 2, 3, 4, 5

1、使用truncate清空数据之后在添加数据,编号仍然是1, 2, 3, 4, 5

2、使用delete删除数据,删除的自动编号将永远不存在了(即使用delete删除了所有数据之后再添加数据,编号变成了6, 7, 8, 9, 10)

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、DDL(数据定义语言)
    • 1、表的定义与删除
      • 1.1 定义表
      • 1.2 删除表
    • 2、修改表结构
    • 二、DML(数据操作语言)
      • 1、插入数据
        • 2.1 部门表插入
        • 2.2 职级表插入
        • 2.3 员工表插入
      • 2、修改数据
        • 3、删除数据
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档