sql server 第五版(2008) 实验四

use YGGL
go

-- 1.基本查询

-- (1)

select * from Employees

select * from Departments

select * from Salary

-- (2)

select Address,PhoneNumber
from Employees


select DepartmentName
from Departments


select InCome,OutCome
from Salary

select DISTINCT DepartmentID,Sex
from Employees


-- (3)

select Address, PhoneNumber
from Employees
where EmployeeID='000001'
go


select EmployeeID
from Salary
where InCome>'2000'


select Name, Address
from Employees
where Birthday>'1970-12-31'


select EmployeeID, Name
from Employees
where DepartmentID in(
select DepartmentID
from Departments
where DepartmentName='财务部')


-- (4)

select Address AS 住址, PhoneNumber AS 电话
from Employees
where Sex=0


select Name AS 姓名,Birthday AS 出生日期
from Employees
where Sex=1


-- (5)

select Name AS 姓名,
case
when Sex=1 then '男'
when Sex=0 then '女'
end as 性别
from Employees


select Name as 姓名, Address as 住址,
case
when InCome<'2000' then '低收入'
when InCome between'2000'and'3000' then '中等收入'
when InCome>'3000'  then '高收入'
end as 收入水平
from Employees join Salary
on Employees.EmployeeID=Salary.EmployeeID


-- (6)

select EmployeeID,实际收入=InCome-OutCome
from Salary


select EmployeeID,额外工作时间=12-WorkYear
from Employees


-- (7)

select COUNT(*)
from Employees


select avg(InCome)
from Salary


select min(Birthday)
from Employees


select SUM(OutCome)
from Salary


select MAX(InCome-OutCome) as 最高实际收入,MIN(InCome-OutCome) as 最低实际收入
from Salary


-- (8)

select DepartmentID
from Employees
where Name like '王%'


select EmployeeID,DepartmentID
from Employees
where Address like '中山%'


select Name,Address,Education
from Employees
where EmployeeID like '%0_'


-- (9)

select EmployeeID
from Salary
where InCome BETWEEN 2000 and 3000 


select EmployeeID
from Employees
where DepartmentID='1'or DepartmentID='2'


-- (10)

select EmployeeID as 编号,InCome as 收入
into 收入在1500元以上的员工
from Salary
where InCome>1500


select EmployeeID as 员工编号,Name as 姓名
into 男员工
from Employees
where Sex=1


-- 2.子查询

-- (1)

select *
from Employees
where DepartmentID = 
      (
         select DepartmentID
          from Departments
          where DepartmentName = '财务部'
          )


select *
from Employees
where EmployeeID in
      (
          select EmployeeID
          from Salary
          where InCome < '2500'
          )          
          
          
-- (2)

select Name
from Employees
where DepartmentID IN
        (
        select DepartmentID
        from Departments
        where DepartmentName ='财务部'
        )
        AND
        Birthday !> ALL
        (
          select Birthday
          from Employees
          where DepartmentID IN
          (
           select DepartmentID
           from Departments
           where DepartmentName = '研发部'
           )
         )
         
         
Select name
From Employees
Where DepartmentID in
      ( 
      select DepartmentID
        From Departments
        Where DepartmentName='研发部'
       )
   AND EmployeeID in
      (
      select EmployeeID
       From Salary
       Where InCome>all
       (
       select InCome
        From Salary
        Where EmployeeID in
       ( 
       select EmployeeID
         From Employees
         Where DepartmentID in
        (
        select DepartmentID
         From Departments
         Where DepartmentName='财务部'
       )
       )
       )
       )
       
       
-- (3)

select Name
from Employees
where EmployeeID in
      (
       select EmployeeID
       from Salary
       where InCome > all
       (
        select InCome
        from Salary
        where EmployeeID in
        (
        select EmployeeID
         from Employees
         where DepartmentID =
         (
          select DepartmentID
          from Departments
          where DepartmentName = '财务部'
          )
          )
          )
          )
          
          
select Name
from Employees
where Birthday < all
      (
       select Birthday
       from Employees
       where DepartmentID in
       (
       select DepartmentID
       from Departments
       where DepartmentName = '研发部'
       )
       ) 
  
  
       
-- 3.连接查询

-- (1)

select Employees.*,Salary.*
from Employees,Salary
where Employees.EmployeeID = Salary.EmployeeID


select Employees.*,Departments.*
from Employees,Departments
where Employees.DepartmentID = Departments.DepartmentID


--(2)

select DepartmentName
from Departments join Employees on Departments.DepartmentID = Employees.DepartmentID
where Employees.Name = '王林'


select *
from Employees join Departments on Employees.DepartmentID = Departments.DepartmentID
where Departments.DepartmentName != '财务部'


select Employees.Name,InCome
from Employees left outer join Salary on Employees.EmployeeID = Salary.EmployeeID

-- (3)

select Name,InCome,OutCome
from Employees,Salary,Departments
where Employees.EmployeeID = Salary.EmployeeID
  and Employees.DepartmentID = Departments.DepartmentID
  and DepartmentName = '财务部'
  and InCome > 2000


select Name,InCome,OutCome
from Employees,Salary,Departments
where Employees.EmployeeID = Salary.EmployeeID
  and Employees.DepartmentID = Departments.DepartmentID
  and DepartmentName = '研发部'
  and Birthday < '1976-01-01'


-- 4.使用聚合函数查询

--(1)

select AVG(InCome) as '财务部平均收入'
from Salary
where EmployeeID in
(
 select EmployeeID
  from Employees
  where DepartmentID =
  (
   select DepartmentID
   from Departments
   where DepartmentName = '财务部'
   )
   )


select MAX(InCome) as '最高收入',MIN(InCome) as '最低收入'
from Salary
where EmployeeID in
(
 select EmployeeID
  from Employees
  where DepartmentID in
  (
   select DepartmentID
    from Departments
    where DepartmentName = '财务部'
    )
 ) 


-- (2)

select AVG(InCome - OutCome) as '财务部平均实际收入'
from Salary
where EmployeeID in
(
 select EmployeeID
 from Employees
 where DepartmentID =
 (
  select DepartmentID
  from Departments
  where DepartmentName = '财务部'
  )
 )       


select MAX(InCome -OutCome) as '最高实际收入',MIN(InCome - OutCome) as '最低实际收入'
from Salary
where EmployeeID in
(
 select EmployeeID
 from Employees
 where DepartmentID in
 (
  select DepartmentID
  from Departments
  where DepartmentName = '财务部'
  )
 )
 
 
-- (3)

select COUNT(EmployeeID)
from Employees
where DepartmentID =
(
 select DepartmentID
 from Departments
 where DepartmentName = '财务部'
 )
 
 
 select COUNT(Employees.EmployeeID)
 from Employees,Salary,Departments
 where Employees.EmployeeID = Salary.EmployeeID
   and Employees.DepartmentID = Departments.DepartmentID
   and Departments.DepartmentName = '财务部'
   and Salary.InCome >2500
   
   

-- 5.查询结果分组和排序

-- (1)

select Sex,COUNT(Sex)
from Employees
group by Sex


select DepartmentName,COUNT(*)
from Employees,Departments
where Employees.DepartmentID = Departments.DepartmentID
group by DepartmentName


select Education,COUNT(*)
from Employees
group by Education


-- (2)

select Employees.DepartmentID,COUNT(*) as '人数'
from Employees,Departments
where Employees.DepartmentID = Departments.DepartmentID
group by Employees.DepartmentID
having COUNT(*) > 2


select WorkYear,COUNT(*) as '人数'
from Employees
group by WorkYear


-- (3)

select Employees.*,Salary.*
from Employees,Salary
where Employees.EmployeeID = Salary.EmployeeID
order by InCome


select Employees.*
from Employees
order by Birthday desc


select Name as 姓名 ,Sex as 性别,WorkYear as 工龄
from Employees,Salary
where Employees.EmployeeID = Salary.EmployeeID
order by InCome desc

-----视图

-- 1.创建视图

-- (1)

create view DS_VIEW
    as select * from Departments


--(2)

create view Employees_view(EmployeeID,Name,RealIncome)
    as 
    select Employees.EmployeeID,Name,InCome - OutCome
    from Employees,Salary
    where Employees.EmployeeID = Salary.EmployeeID   


select语句的限制:
  定义视图的用户必须对所参照的表或视图有查询(即可执行 select 语句)权限
  不能使用 compute 或 compute by 子句
  不能使用 order by 子句
  不能使用 into 子句
  不能在临时表或表变量上创建视图
  
  
创建视图时的注意点:
  只有在当前数据库中才能创建视图。视图的命名必须遵循标识符命名规则,不能与表同名
  不能把规则,默认值或触发器与视图相关联
  

create view text_view(员工编号,姓名,所在部门,实际收入)
  as
  select Employees.EmployeeID,Name,DepartmentName,InCome - OutCome
  from Employees,Salary,Departments
  where Employees.EmployeeID = Salary.EmployeeID
    and Employees.DepartmentID = Departments.DepartmentID


-- 2.查询视图

-- (1)

select DepartmentName
from DS_VIEW
where DepartmentID = '3'


-- (2)

select RealIncome
from Employees_view
where Name = '王林'


在使用视图查询时,若关联的基本表中添加了新字段,则必须 重新创建视图 才能查询到新字段


select 员工编号,实际收入
from text_view
where 所在部门 = '财务部'


-- 3.更新视图

-- (1)
insert into DS_VIEW values ('6','广告部','广告业务')


select *
from DS_VIEW


select *
from Departments


insert into Employees_view values('604209','小黄','2000')
消息 4406,级别 16,状态 1,第 1 行
对视图或函数 'Employees_view' 的更新或插入失败,因其包含派生域或常量域。
   当视图所依赖的基本表有多个时,不能 向该视图插入数据,因为这将会影响多个基本表


-- (2)

update DS_VIEW
set DepartmentName = '生产车间'
where DepartmentID = '5'

select *
from DS_VIEW

select *
from Departments 

把数据改回来,方便后面用
update DS_VIEW
set DepartmentName = '市场部'
where DepartmentID = '5'


-- (3)
update Employees_view
set Name = '王浩'
where EmployeeID = '000001'


select *
from Employees_view

select *
from Employees


把数据改回来,方便后面用
update Employees_view
set Name = '王林'
where EmployeeID = '000001'


-- (4)
delete from DS_VIEW
where DepartmentID = '6'

select *
from DS_VIEW


select *
from Departments 


 当视图所依赖的基本表有多个时,不能 向该视图插入数据,因为这将会影响多个基本表


-- 4.删除视图

drop view DS_VIEW

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⚝ ⚝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值