查询表中指定列的信息,改变列的标题
select emp_name as姓名,sex as性别,title as职位from empinfo
过滤掉重复的数据,返回指定列中存在不重复的数据
selectdistinct title from empinfo
selectdistinct sex from empinfo
top n 关键字
selecttop 3 *from empinfo表中前3个的记录
selecttop 30 percent*from empinfo表中前30%的记录
设置查询条件
select*from empinfo where wage>3000 and wage<4000
select*from empinfo where wage between 3000 and 4000 select*from empinfo where emp_name in('张三','李四','王五') 模糊查询
select*from empinfo where idcard like'%ddd%'
select*from empinfo where idcard like'110123_adx_'
%,_为通配符
And为且,一假则假,on为或,一真则真
select*from empinfo where title='部门经理'and sex='女'
条件为部门经理或则是性别为女的记录
select*from empinfo where title='部门经理'or sex='女'
对从查询结果排序
select*from empinfo orderby emp_name
select*from empinfo orderby sex,wage
sql中的排序问题,按姓名排序是根据姓名的什么来排的?
聚合函数
select COUNT(*)as计数数量from empinfo
select avg(wage)as平均工资from empinfo
select SUM(wage)as工资之和from empinfo
select avg(wage)as平均工资from empinfo where sex='男'
对查询结果分组
select sex as性别,MAX(wage)as最高工资
from empinfo
groupby sex
使用all关键字,对于不满足where子句的组和结果集,返回空值select sex as性别,MAX(wage)as最高工资
from empinfo where sex='男'
groupby all sex
where 在分组操作之前应用,having是在之后应用
统计最高工资超过6000的部门及最高工资信息
select dep_id,MAX(wage)as最高工资from empinfo
groupby dep_id
having max(wage)>6000
内连接
表别名.列名指定显示的列
T1,t2为表别名
(等值连接)
select t1.dep_name,t2.emp_name
from departmentst1,empinfot2
where t1.dep_id=t2.dep_id
inner join关键字
select t1.dep_name,t2.emp_name
from departmentst1innerjoin empinfot2
on t1.dep_id=t2.dep_id
on指定内连接中的两个表之间的连接关系
外连接
(主次之分)主表的每一行去匹配从表中的每一列数据
符合条件的数据返回到结果集,不符合条件的列将被填上null值后返回到结果集中左向外连接(左侧为主表)departments
select t1.dep_name,t2.emp_name
from departmentst1leftjoin empinfot2
on t1.dep_id=t2.dep_id
右向外连接(右侧为主表)departments
select t1.dep_name,t2.emp_name
from empinfot2rightjoin departmentst1
on t1.dep_id=t2.dep_id
完整外部连接
select t1.dep_name,t2.emp_name
from empinfot2full join departmentst1
on t1.dep_id=t2.dep_id
is null或者is not null
select t1.dep_name,t2.emp_name
from departmentst1leftjoin empinfot2
on t1.dep_id=t2.dep_id
where t2.emp_name isnull
交叉连接
子查询
使用In
查询和张三在同一个部门的所有员工的姓名,
select emp_name from empinfo where dep_id in
(select dep_id from empinfo where emp_name='张三')
等号连接
显示财务部所有员工信息
select*from empinfo
where dep_id=(select dep_id from departments where dep_name='财务部')
Exists
显示财务部所有员工信息
select*from empinfo
where exists
(select*from departments where dep_id=empinfo.dep_id and dep_name='财务部')
Having
显示部门平均工资大于所有员工平均工资的记录
select departments.dep_name,avg(empinfo.wage)from empinfo,departments where empinfo.dep_id=departments.dep_id
groupby departments.dep_name
having avg(empinfo.wage)>(select avg(wage)from empinfo)
出错
用create view 命令创建视图
use hrsystem
go
createview员工信息简表
as
select e.emp_name,e.sex,e.title,d.dep_name
from empinfoe innerjoin departmentsd
on e.dep_id=d.dep_id
用create view 命令创建视图
use hrsystem
go
createview员工信息简表2
withencryption
as
select e.emp_name,e.sex,e.title,d.dep_name
from empinfoe innerjoin departmentsd
on e.dep_id=d.dep_id
修改视图
增加工资项
use hrsystem
go
alterview员工信息简表
withencryption
as
select e.emp_name,e.sex,e.title,e.wage,d.dep_name
from empinfoe innerjoin departmentsd
on e.dep_id=d.dep_id
go
删除视图
dropview员工信息简表
触发器与普通存储过程的不同之处在于:触发器的执行是由于事件触发的,而普通存储过程是由命令调用执行的。
(DML和DDL)
当数据库服务器中发生数据操作语言(DML)事件时触发。针对insert ,update,delete数据库操作语句
响应数据定义语言(DDL)语句时触发。针对create,alter,drop数据库定义
设计DDL触发器的主要目的
1.禁止修改数据库的结构
2.当修改数据库结构时执行一些特定的操作
3.记录对数据库结构的修改
定义一个事务,插入两条记录
use hrsystem
begintransaction
insertinto empinfo values(101,'test1','男','职员',5000,'110123456789',1) insertinto empinfo values(101,'test2','女','职员',5000,'110123456789',1) committransaction
go
use hrsystem
go
createtrigger insert_empinfo on empinfo
forinsert
as
--从表insert 中获取新插入记录的部门编号
declare@depid int
declare@depname varchar(100)
select@depid=dep_id from inserted
--判断插入的部门编号是否存在
select@depname=dep_name from departments where dep_id=@depid
if@depname isnull
begin
print'指定部门不存在,请选择具体部门'--提示错误信息
rollbacktransaction--回滚操作
end
go
use hrsystem
go
insertinto empinfo values(103,'test1','男','职员',5000,'1101234df89',111)
go
用查询语句创建数据库
createdatabase company
onprimary
(name=company_data,
filename='g:\sql_data\company.mdf',
size=10,
maxsize=unlimited,
filegrowth=10%)
log on
(name=company_log,
filename='g:\sql_log\company.ldf',
size=1,
maxsize=500,
filegrowth=1)
alterdatabase employees
add filegroupdata1
alterdatabase employees
addfile
(name=employee3,
filename='g:\sql_data\employee3.ndf',
size=1,
maxsize=50,
filegrowth=1),
(name=employee4,
filename='g:\sql_data\employee4.ndf',
size=2,
maxsize=50,
filegrowth=10%)
to filegroupdata1
alterdatabase employees
add log file
(name=employeelog3,
filename='g:\sql_data\employeelog3.ldf',
size=1,
maxsize=5, filegrowth=1)
最爱初晴微蓝