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查询后加入新表或查询后创建新表。

不需要事先创建新表

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

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

//查询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 出生日期

16、表联接实验多表查询。

表联接类型分为内联接、外联接、交叉联接等。

内联接(inner join)

外联接(outer join):左外联接(left join)、右外联接(right join)、全联接(full join)

交叉联接:就是表之间没有任何关联条件,查询将返回左表与右表按个联接的所有行。

16.1、案例。

//内联接的第一种方式
select a.姓名 姓名a,a.学校 学校a,
b.姓名 姓名b,b.职业 职业b
from a,b
where a.姓名=b.姓名


//内联接的方式二(常用)
select a.姓名 姓名a,a.学校 学校a,
b.姓名 姓名b,b.职业 职业b
from a inner join b on a.姓名=b.姓名


//使用左连接查询学生姓名、学校、职业
select a.姓名 姓名a,a.学校 学校a,
b.姓名 姓名b,b.职业 职业b
from a left join b on a.姓名=b.姓名


//使用右联接的方式查询
select a.姓名 姓名a,a.学校 学校a,
b.姓名 姓名b,b.职业 职业b
from a right join b on a.姓名=b.姓名


//完整外联接方式
select a.姓名 姓名a,a.学校 学校a,
b.姓名 姓名b,b.职业 职业b
from a full join b on a.姓名=b.姓名

17、 索引。

索引分为六类:唯一、主键、聚集、非聚集、复合、全文

17.1、案例。

1、右键点击表,然后点击设计。

2、右键点击'学生姓名',然后点击索引。

3、配置好类型、列、名称,点击关闭

4、索引的查询方式。

命令参考:

select * from xueyuan
    with (index=IX_name)
    where 学员姓名 like '老%'

18、视图。 

1、右键点击数据库中的视图,然后点击新建视图。

2、选择需要建立视图的表。

3、选择需要查看的列。

4、选择下面的命令,【ctrl+R】快捷键执行,即可查看。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值