[SQLServer随笔-1] -基础知识

1、创建数据库

 1 if exists(select * from sys.databases where name='DBTEST')
 2     drop database DBTEST
 3 
 4 
 5 --创建数据库
 6 create database DBTEST
 7 on  --数据文件
 8 (
 9     name = 'DBTEST',    --逻辑名称,一般与数据库名称保持一直
10     filename='D:\DBTEST\DBTEST.mdf',    --物理路径和名称
11     size = 5MB,    --文件的初始大小
12     filegrowth = 2MB    --文件增长方式可以写大小和百分比
13 )
14 
15 log on --日志文件
16 (
17     name = 'DBTEST_log',    --逻辑名称,一般与数据库名称保持一直
18     filename='D:\DBTEST\DBTEST_log.ldf',    --物理路径和名称
19     size = 5MB,    --文件的初始大小
20     filegrowth = 2MB    --文件增长方式可以写大小和百分比
21 )

2、创建表格

--判断表是否存在
--type='U' 用户创建表
if exists(select * from sys.objects where name='Departmemt' and type='U')
drop table Departmemt

--切换数据库
use DBTEST

--创建表 员工 职位   部门
create table Departmemt
(
    --部门编号,primary key设置主键
    --identity(1,1):自动增长,初始值为1 增长步长1
    DepartmentId int primary key identity(1,1),

    --部门名称
    DepartmentName nvarchar(50) not null,

    --部门描述
    --未知长度的字符串类型可使用text类型
    DepartmentRemark text
)

--char 定长字符串,无论存储数据达到10个字节,都占用10个字节
--varchar:变长,varchar最多占用10字节
--text:长文本
--char  nvarchr text:存储unicode,对中文友好(一个汉字2个字节)

create table [Rank]
(
    --职级编号
    RankId int primary key identity(1,1),

    --部门名称
    RankName nvarchar(50) not null,

    --部门描述
    --未知长度的字符串类型可使用text类型
    RankRemark text
)


create table EUser
(
    UserId int primary key identity(1,1),

    --references:引用外键,将其他表的主键作为该表的字段
    --部门
    DepartmentId int references Departmemt(DepartmentId) not null,    --保证员工的部门ID存在与'部门(DepartmentId)'表当中
    --职级
    RankId int references [Rank](RankId) not null,

    UserName nvarchar(50) not null,
    UserSex nvarchar(1) default('') check(UserSex='' or UserSex =''),    --check约束,若不满足条件无法保存
    UserBirth datetime not null,    --Date  年月日   Datetime  可到秒
    UserSalary decimal(12,2) check(UserSalary>1000 or UserSalary <10000000),
    UserPhone varchar(20) unique not null,--唯一
    UserAddress varchar(300),
    UserAddTime smalldatetime default(getdate()) --添加时间,获取当前时间作为添加时间

)


---------修改表结构----------------
--1.添加列
alter table EUser add Email varchar(200)

--2、删除列
alter table EUser drop column Email

--3、修改列
alter table EUser alter column UserAddress varchar(200)


-----------维护约束----------------
---删除约束,可以在对应表单当中进行维护CHECK约束    
alter table EUser drop constraint CK__EUser__UserSalar__1DE57479--约束名CK__EUser__UserSalar__1DE57479

---添加约束(check约束)
alter table EUser add constraint CK__EUser__UserSalar__1DE57479 
check(UserSalary>1000 and UserSalary <100000)

--添加约束(主键约束)
--alter table 表名 add constraint 约束名 primary key(列名)

--添加约束(唯一)
--alter table 表名 add constraint 约束名 unique(列名)

--添加约束(默认值)
--alter table 表名 add constraint 约束名 default 默认值 for 列名

--添加约束(外键)
--alter table 表名 add constraint 约束名 foregn key(列名) references 关联表名(列名(主键))

 

3、修改和删除表格

select * from Departmemt
select * from [Rank]
select * from EUser

---修改
--update 表名  set 字段1= 值1,字段2 = 值2 where 条件

--每人加1000元
update EUser set UserSalary = UserSalary +1000

--将员工ID为3的员工加薪500
update EUser set UserSalary = UserSalary+500 where EUser.UserId =4

--将企划部id = 3低于10000的调整为10000
update EUser set UserSalary = 10000 
where DepartmentId =3 and UserSalary <10000

update EUser set UserSalary = UserSalary*2,UserAddress = 'X省X市X区X县11'
where UserName = '张三' 


---删除--------------------
--drop删除表对象    drop table 表名
--truncate清空数据   truncate table 表名
--delete from 表名  where 条件

--删除全部
--delete from EUser

--删除工资大于10000
delete from EUser where UserSalary > 11000

----truncate delete区别
--truncate清空数据,不能有数据,delete则不然
--truncate删除数据后,可沿用之前的编号,而delete则不然

 

4、基本查询

---查询所有列所有行
select * from Departmemt
select * from [Rank]
Select    * from EUser

---查询指定列(姓名  生日   月薪  电话)、
select UserName,UserBirth,UserSalary,UserPhone from EUser

---查询指定列(姓名  生日   月薪  电话)显示中文列名
select UserName 姓名,UserBirth 生日,UserSalary 月薪,UserPhone 电话 from EUser

--查询员工所在城市,不需要重复数据显示
select distinct(UserAddress) from EUser

--假设准备加薪,查询出加薪后的员工数据
select UserName,UserSex,UserSalary*1.3   加薪后工资 from EUser 

--假设准备加薪,查询出加薪后的员工数据并对比加之前的数据
select UserName,UserSex,UserSalary,UserSalary*1.3   加薪后工资 from EUser 

 

5、表格插入数据

---向部门表插入数据
use DBTEST
insert into Departmemt(DepartmentName,DepartmentRemark)
values('市场部','.............')

insert into Departmemt(DepartmentName,DepartmentRemark)
values('软件部','.............')


insert into Departmemt(DepartmentName,DepartmentRemark)
values('企划部','.............')

--简写
insert into Departmemt values('硬件','.............')


--一次性插入多行数据
insert into Departmemt(DepartmentName,DepartmentRemark)
select '测试部','........'  union
select '实施部','........'  union
select '产品部','........' 


-----向职级插入数据--------------------
insert into [Rank](RankName,RankRemark)
select '初级','........'  union
select '中级','........'  union
select '高级','........' 


-----向员工表 插入数据
insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddress,UserAddTime)
values(2,1,'张三','','1999-11-1',5000,'111222','X省X市X区X县',getdate())

insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddress,UserAddTime)
values(1,2,'李四','','1999-11-2',3000,'1112244','X省X市X区X1县',getdate())

insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddress,UserAddTime)
values(1,3,'王五','','1999-11-3',5030,'111224','X省X市X区X3县',getdate())

insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddress,UserAddTime)
values(3,3,'马六','','1999-11-4',3200,'111225','X省X市X区X4县',getdate())

insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddress,UserAddTime)
values(3,3,'柳如烟','','1999-11-5',3200,'111226','X省X市X区X5县',getdate())

 

6、条件查询

Select    * from EUser

--查询性别为女的员工
select * from EUser where UserSex = ''

--查询薪资大于10000的员工
select * from EUser where UserSalary >=10000

--查询薪资大于3000的员工性别为女
select * from EUser where UserSalary >=3000 and UserSex =''

--查询薪资小于10000的员工,或者薪资大于3000的女员工
select * from EUser where UserSalary <10000 or (UserSex ='' and UserSalary >3000)

--查询工资位于5000-10000的员工
select * from EUser where UserSalary>5000 and UserSalary <=10000
select * from EUser where UserSalary between 5000 and 10000

--查询地址在X省X市X区X4县或X省X市X区X1县
select * from EUser where UserAddress='X省X市X区X4县' or UserAddress='X省X市X区X1县'
select * from EUser where UserAddress in('X省X市X区X4县' ,'X省X市X区X1县')

--排序
--根据工资大小进行排序
select * from EUser order by UserSalary asc --升序,默认
select * from EUser order by UserSalary desc --降序

--根据名字长度排序,仅显示前三个
select top 3 * from EUser order by  LEN(UserName) desc

--查询工资最高的10%的员工
select top 30 percent * from EUser ORDER BY UserSalary desc

--查询地址未填写的信息
select * from EUser where UserAddress is null

insert into EUser(DepartmentId,RankId,UserName,UserSex,UserBirth,UserSalary,UserPhone,UserAddTime)
values(3,3,'柳如烟','','1999-11-5',3200,'111277',getdate())

--查询90后员工
select * from EUser where year(UserBirth) between 1990 and 1999

--查询员工的年龄
select UserName,UserSex,year(getdate())-year(UserBirth) 年龄 from EUser

--查询员工在25-36之间的员工
select UserName,year(getdate())-year(UserBirth) 年龄  from EUser where year(getdate())-year(UserBirth) Between 25 and 36


--查询星座为巨蟹座的员工
select * from EUser where 
(MONTH(UserBirth) =6 and day(UserBirth) >22) or (MONTH(UserBirth) =7 and day(UserBirth) <22)

--查询工资大于王五高的人的信息
select * from EUser where UserSalary>
(select UserSalary from EUser where UserName ='王五')

--查询员工信息,添加一列显示生肖
select *,
    case 
    when year(UserBirth)%12 = 4 then ''
    when year(UserBirth)%12 = 5 then ''
    when year(UserBirth)%12 = 6 then ''
    when year(UserBirth)%12 = 7 then ''
    when year(UserBirth)%12 = 8 then ''
    when year(UserBirth)%12 = 9 then ''
    when year(UserBirth)%12 = 10 then ''
    when year(UserBirth)%12 = 11 then ''
    when year(UserBirth)%12 = 0 then ''
    when year(UserBirth)%12 = 1 then ''
    when year(UserBirth)%12 = 2 then ''
    when year(UserBirth)%12 = 3 then ''
    else '' 
end 生肖
from EUser

select *,
    case year(UserBirth)%12
    when 4 then ''
    when 5 then ''
    when 6 then ''
    when 7 then ''
    when 8 then ''
    when 9 then ''
    when 10 then ''
    when 11 then ''
    when 0 then ''
    when 1 then ''
    when 2 then ''
    when 3 then ''
    else '' 
end 生肖
from EUser

 

posted @ 2025-12-01 20:57  nonAny  阅读(2)  评论(0)    收藏  举报