SQL Server 2016(基本概念和命令)

1、文件类型。

【1】主数据文件:数据库的启动信息。扩展名为".mdf"。

【2】次要(辅助)数据文件:主数据之外的数据都是次要数据文件。扩展名为".ndf"。

【3】事务日志文件:包含恢复数据库的所有事务日志信息。扩展名为".ldf"。

【4】文件流数据文件:存储文档、图片、音频、视频等。

2、表的基本感念。

行:每行成为一条"记录"或"元组",用于描述一个对象的信息。

列:每列称为一个"字段"或"属性",用于描述对象的一个属性。

3、主键、外键。

主键:键,即关键字。主键由一个或多个字段组成,其具有唯一性,不允许取空值(NULL)。一个表只能有一个主键。

外键:一个关系数据库通常包含多个表,通过外键可以使多个表关联起来。

4、常用数据类型。

精确数字:

int:SQL Server中的主要数据类型。(整数型)

bit:只有两种可以能值。只能是0、1或NULL(空值),Yes或No、True或False。(整数型)

money:用来表示钱和货币值。

日期和时间:

date:用于表示日期。

time:用于表示一天中的某个时间。

datetime:用于表示日期和时间。

字符串:

char:存储固定长度。

varchar:存储可变长度。

Unicode字符串:

nchar:存储固定长Unicode字符型数据。

nvarchar:存储变长Unicode字符型数据。

5、创建表。

创建表的基本语法:

create table 表名
(
列名1 数据类型(大小)
列名2 数据类型(大小)
列名3 数据类型(大小)
......

)
identity(1,1):表示该列为标识符,种子和增量值都为1。

not null:表示该列不允许空值。

primary key:表示该列为主键列,并且不为空。

check():表示该列创建约束,括号内为约束条件。

命令参考:

##创建表employee
create table employee
(
编号 int identity(1,1) not null,
姓名 nvarchar(50) not null,
身份证号 varchar(18) primary key,
职务 nvarchar(50) not null,
出生日期 datetime not null,
基本工资 money not null check(基本工资>=0 and 基本工资<=100000)
)

##使用命令查看表employee的所有信息
select * from employee

6、删除表。语法:[ drop table 表名 ]

命令参考:

##删除表employee
drop table employee

7、修改表的结构。[ alter table 表名 ]

1、向表employee中添加一个"备注"列。

添加表的基本语法:

alter table 表名
add 列名 数据类型(大小)

命令参考:

##向表中添加备注列
alter table employee
add 备注 nvarchar(2000)

8、修改列。

修改列的数据类型:

alter table 表名

alter column 列名 数据类型(大小)

命令参考:

##修改备注列的长度为1000
alter table employee
alter column 备注 nvarchar(1000)

8、删除列。

删除列的基本语法:

alter table 表名

drop column 列名

命令参考:

##删除表中的备注列
alter table employee
drop column 备注

10、插入数据。语法:[ insert into 表名 (列名) values (列表值) ]

注意事项:

  • 不能只插入半行或几列数据。

  • 不能为标识符指定值,因为它的值是自动增长的。

  • 插入的数据要符合check约束的要求。

  • 如果指定不为空,则该列必须插入数据,否则将报错。

1、向表中插入一行数据。

命令参考:

insert into employee (姓名,身份证号,职务,出生日期,基本工资)
values ('郭靖','111222333444555666','运维工程师','1995/1/1',8000)

11、 更新数据。语法:[ update 表名 set 列名=更新值 where 更新条件 ]

1、更新表中黄蓉的基本工资为11000;更新表中郭靖的工资为"9000",备注为"勤奋好学"

命令参考:

update employee set 基本工资='11000' where 姓名='黄蓉'

update employee set 基本工资='9000',备注='勤奋好学' where 姓名='郭靖'

12、删除表中数据的两种方法。 (delete、truncate)

12.1、删除表中数据。语法:[ delete from 表名 where 删除条件 ]

1、删除表中杨过的记录(行);删除表中所有记录。

命令参考:

delete from employee where 姓名='杨过'

delete from employee

12.2、删除表中数据。[ truncate table 表名 ](类似格式化表中数据)

【1】与delete删除数据不同的是,truncate类似格式化,删除所有记录标识符会重置为0。

【2】delete删除后可以通过事务日志恢复,而truncate不能。

1、删除表中的所有记录。

13、select查询。

表达式:

between:指定范围,使用"and"定义开始值和结束值。例:(1 and 10)

in:是否在此范围内。例:in (10,20,30)

like:模糊查询。例:like '66%' //66开头的数据

<>:不等于。

!=:不等于,等同于<>。
通配符:

'_':表示单个字符。

%:表示任意长度的字符串。

[ ]:表示查找此范围内的数据。例:like '[C-P]' //从C到P之间开头的数据

[^]:表示不查找在此范围内的数据。例:like 'car[^afg]' //查找以car开头但是后面的字母不为a、f、g的名字。
逻辑表达式:

not:取反的操作。

and:和、并且的意思,需要同时满足两个条件。

or: 或的意思,只需要满足两个条件其中一个即可。

13.1、案例。

复制代码
//查询表中的所有信息
select * from employee


//查询表中的"姓名,职务,基本工资"列
select 姓名,职务,基本工资 from employee


//查询表中运维工程师的姓名
select 姓名 from employee
where 职务='运维工程师'


//查询表中基本工资在8000到10000之间的所有员工信息
select * from employee
where 基本工资 between 8000 and 10000


//查询表中基本工资小于10000或大于20000的所有员工信息
select * from employee 
where 基本工资<10000 or 基本工资>20000


//查询表中基本工资为8000、9000、10000的所有员工信息
select * from employee 
where 基本工资 in (8000,9000,10000)


//查询表中身份证号以66开头的员工所有信息
select * from employee 
where 身份证号 like '66%'


//查询表中姓杨的运维工程师的信息。
select * from employee 
where 姓名 like '杨%' and 职务='运维工程师'


//查询表中备注不为空的所有信息
select * from employee 
where 备注 is not null


//查询表中前5行的数据
select top 5 * from employee


//查询表中姓名和身份证号列的信息,姓名和身份证号以别名"name"、"idcard"显示
select 姓名 as name,身份证号 as idcard from employee


//查询表中的基本工资,并以降序显示(高到低)
select * from employee 
order by 基本工资 desc


//查询表中的有哪些职务(去重)
select distinct 职务 from employee


//查询表中的姓名(name)、身份证号、职务、基本工资信息,条件要满足身份证号第三位为0并且职务不是CTO,在降序显示
select 姓名 as name,身份证号,职务,基本工资 from employee
where 身份证号 like '__0' and 职务!='CTO'
order by 基本工资 desc

14、使用select查询后加入新表或查询后创建新表。

不需要事先创建新表

bash 复制代码
//查询employee表中的姓名、身份证号、职务信息后创建然后保存到new01表中
select 姓名,身份证号,职务 into new01 from employee

需要事先创建新表再能将查询到的信息保存到新表

diff 复制代码
//查询employee表中的姓名、职务、出生日期并且基本工资大于等于15000的员工信息,保存new02表中
insert into new02 (姓名,职务, 出生日期)
select 姓名,职务,出生日期 from employee
where 基本工资>=15000


//查询employee表中的姓名、职务、出生日期信息保存到new03中,然后向new03中加入信息
select into new03 (姓名,职务,出生日期)
select '欧阳锋','人事经理','1988-09-09' union
select '一灯','财务经理','1977-07-07' union
select 姓名,职务,出生日期 from employee

15、在查询中使用函数。

系统函数:

字符串函数:

日期函数:

15.1、案例。

复制代码
//查询运维工程师的姓名和基本工资,以固定格式显示
select '运维工程师 ' +姓名+' 的基本工资是: '+cast(基本工资 as varchar(10))+'元'
from employee
where 职务='运维工程师'


//查询当前系统时间10天之后的时间
select dateadd(DD,10,getdate())


//查询表中的表中所有人的姓名和年龄
select 姓名,datediff(YY,出生日期,getdate()) as 年龄
from employee


//查询表中90后的员工姓名和出生年份
select 姓名,datename(YEAR,出生日期) as 出生日期
from employee
where 出生日期 between '1990-01-01' and '1999-12-31'


//查询表中基本工资的总和
select sum(基本工资) as 总工资 
from employee


//查询表中基本工资的平均值
select avg(基本工资) as 平均工资 
from employee


//查询表中最高工资和最低工资的员工信息
select max(基本工资) as 最高工资,min(基本工资) as 最低工资 
from employee


//查询表中的总行数
select count(*) as 总行数 
from employee


//查询表中90后的总人数
select count(出生日期) as '90后人数'
from employee
where 出生日期>='1990-01-01'


//查询表中各个职务的平均工资
select 职务,avg(基本工资) as 职务平均工资 
from employee
group by 职务


//查询表各个职务的平均工资小于10000的信息
select 职务,avg(基本工资) as 职务平均工资
from employee
group by 职务
having avg(基本工资)<10000


//查询表中各个职务平均工资小于10000并且姓名不是段誉
select 职务,avg(基本工资) as 职务总工资 
from employee
where 姓名 !='段誉' 
group by 职务
having avg(基本工资) <10000

数字函数:

15.2、案例。

复制代码
//查询表中的平均工资并取整
select ceiling(avg(基本工资)) as 平均工资
from employee

15.3、函数综合案例。

查询未满30岁的员工的生日和年龄,并且计算出距离30岁的天数,最后用字符串拼接显示结果。

复制代码
select
'员工 '+姓名+
' 的生日是'+convert(varchar(10),出生日期,111)+
', 现在年龄是 '+cast(datediff(YY,出生日期,getdate()) as varchar(10))+'岁'+
', 距离30岁还有 '+
cast(datediff(DD,getdate(),dateadd(YY,30,出生日期)) as varchar(10))+'天'
from employee
where datediff(YY,出生日期,getdate())<=30
order by 出生日期
相关推荐
AI 嗯啦1 小时前
SQL详细语法教程(七)核心优化
数据库·人工智能·sql
ClouGence2 小时前
三步搞定!GaussDB 实时数据入仓
数据库·后端
鼠鼠我捏,要死了捏3 小时前
生产环境MongoDB分片策略优化与故障排查实战经验分享
数据库·mongodb·分片
KaiwuDB4 小时前
KWDB 分布式架构探究——数据分布与特性
数据库·分布式
笨蛋不要掉眼泪4 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
Leiwenti5 小时前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
你的电影很有趣5 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存
NineData5 小时前
2025 DTCC大会来了,NineData联合创始人周振兴将分享《AI重塑数据库管理模式》的主题演讲
数据库
NineData5 小时前
NineData亮相2025中国数据库技术大会,并荣获《年度优秀技术团队奖》
数据库
码农阿豪6 小时前
KingbaseES数据库增删改查操作分享
数据库·oracle