-- 创建一个员工表:
create table Employees
(
EmpId int identity(1,1),
EmpName varchar(50),
EmpGender char(2),
EmpAge int,
EmpEmail varchar(100),
EmpAddress varchar(500)
)
-- 创建一个部门表:
create table Department
(
DepId int identity(1,1) primary key,
DepName varchar(50) unique not null
)
-- 查询数据库:
select * from Employees
select * from Department
-- alert: JavaScript;
-- alter: 更改数据库;
-- 删除一个指定的列(删除EmpAddress列):
alter table Employees drop column EmpAddress -- 删除列需要关键字 column
-- 添加一列(EmpAddress):
alter table Employees add EmpAddress varchar(100) -- 添加列不需要关键字 column
-- 修改 EmpEmail 的数据类型 为 varchar(200):
alter table Employees alter column EmpEmail varchar(200)
-- 给EmpId添加主键约束:
alter table Employees add constraint PK_Employees_EmpId primary key (EmpId)
-- 为 EmpName 添加一个非空约束:
alter table Employees alter column EmpName varchar(50) not null
-- 为 EmpName 添加一个唯一约束:
alter table Employees add constraint UQ_Employees_EmpName unique (EmpName)
-- 添加一条数据:
insert into Employees values('张三', '男', 22, 'zs@163.com', '上海')
-- 为 EmpGender 设置默认约束:
alter table Employees add constraint DF_Employees_EmpGender default('男') for EmpGender
-- 添加一条数据:EmpGender 会显示为默认值。
insert into Employees values('李四', default, 32, 'ls@163.com', '南京')
-- 为 EmpAge 添加检查约束:年龄必须在1-100之间;
alter table Employees add constraint CK_Employees_EmpAge check (EmpAge>0 and EmpAge<121)
-- 添加一条年龄大于 120 的数据,
insert into Employees values ('虎子', default, 130, 'hz@163.com', '徐州')
-- 出现错误:INSERT 语句与 CHECK 约束"CK_Employees_EmpAge"冲突。该冲突发生于数据库"TestDataDB",表"dbo.Employees", column 'EmpAge'。
-- 查询指定列的数据:
select EmpName, EmpGender from Employees
-- 给列名起别名:
-- 第一种方法:
select EmpName as '姓名', EmpGender as '性别' from Employees
-- 第二种方法:
select EmpName as 姓名, EmpGender as 性别 from Employees
-- 第三种方法:
select 姓名=EmpName,性别=EmpGender from Employees
-- 查询当前时间:
select GETDATE() -- select 结果显示在 "结果" 中;
print '当前时间' -- print 结果显示在 “消息” 中;
-- 查询所有数据:
select * from Employees
-- 查询前三条数据:
select top 3 * from Employees
-- 数据库中的数据存储是无序的。
-- 查询年龄最小的三个人:可以先使年龄从小到大排列,然后取前三条数据;
select top 3 * from Employees order by EmpAge -- 默认排序就是从小到大
-- 查询年龄最大的前 40% 的人:percent 表示百分号
select top 40 percent * from Employees order by EmpAge desc -- 从大到小排序
-- 查询数据时去除重复的数据:
select distinct EmpGender from Employees
-- 聚合函数:
-- 查询所有数据:
select * from Employees
-- 查询数据库中数据的数量:
select count(*) from Employees
-- 查询最大的年龄:
select max(EmpAge) from Employees
-- 查询最小的年龄:
select min(EmpAge) from Employees
-- 查询年龄的总和:
select SUM(EmpAge) from Employees
-- 查询平均年龄:
select avg(EmpAge) from Employees
-- 查询年龄在20和30之间的男雇员:
-- 方法一:
select * from Employees where EmpAge>20 and EmpAge<30 and EmpGender='男'
-- 方法二:用 between...and 包括20和30,而且该语句执行效率高.
select * from Employees where EmpGender='男' and EmpAge between 20 and 30
-- 查询年龄为12/22/32的雇员:
-- 方法1:
select * from Employees where EmpAge=12 or EmpAge=22 or EmpAge=32
-- 方法2:
select * from Employees where EmpAge in(12,22,32)
-- 模糊查询:
-- 插入数据:
insert into Employees values('张无忌', '男', 120, 'zwj@163.com', '光明顶')
insert into Employees values('龚长张', '女', 28, 'gcz@163.com', '黑木崖')
insert into Employees values('小兵张嘎', '男', 15, null, '根据地')
-- 查询 EmpName 为 '张' 的数据:
select * from Employees where EmpName like '张'
-- 查询 EmpName 以 "张" 开头的数据:
select * from Employees where EmpName like '张%'
-- 查询 EmpName 以 '张' 开头且是两个字符的数据:
select * from Employees where EmpName like '张_'
-- 查询 EmpName 以 '张' 开头且是三个字符的数据:
-- 方法1:
select * from Employees where EmpName like '张__'
-- 方法2:
select * from Employees where EmpName like '张%' and len(EmpName)=3
-- 查询 EmpName 里带有 '张' 的:
select * from Employees where EmpName like '%张%'
-- 查询 EmpName 以 ‘张’ 开头,并且第一个字符为 小写字母,同时EmpName是三个字符的数据
select * from Employees where EmpName like '张[a-z]_'
-- 查询 EmpEmail 为 null 的数据:
select * from Employees where EmpEmail is null
-- 查询 EmpEmail 不为 null 的数据:
select * from Employees where EmpEmail is not null