表结构:
 create database MyCompany
 go
 use MyCompany
 go
 create table Departments
 (
     Department_ID ,) primary key,
     Department_Name ),
 )
 go
 create table Employees
 (
     Employee_Id ,) primary key,
     Employee_Name ),
     Employee_Job ),
     Salary money,
     Department_Id int foreign key references Departments(Department_ID)
 )
 Go

 --------------------------------------------插入数据----------------------------------------------------------------------------------
 ----------------------------------部门表-------------------------------------------------------------------
 SET IDENTITY_INSERT departments ON
              ,    N'财务部'                                                                                                                                                                                                                                                           )
              ,    N'行政部'                                                                                                                                                                                                                                                           )
              ,    N'开发部'                                                                                                                                                                                                                                                           )
              ,    N'市场部'                                                                                                                                                                                                                                                           )
 SET IDENTITY_INSERT departments OFF
 ------------------------=============================员工表================================================================================================
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
            ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )
           ,    N             )

 SET IDENTITY_INSERT employees OFF

上面是创建表和数据库的代码

use MyCompanyTest
go
select * from dbo.Departments
select * from Employees

--1.列出EMPLOYEES表中各部门的:部门编号,最高工资,
select e.department_Id 部门编号, MAX(e.Salary) 最高工资,MIN(e.salary)最低工资
from Employees e
group by e.department_Id 

--2.列出EMPLOYEES表中各部门的:部门编号、部门名称、最高工资、最低工资

  select 部门编号, 最高工资,最低工资 ,d.Department_Name from
      (select e.Department_ID 部门编号, max(e.Salary)最高工资,min(e.Salary)最低工资
     from Employees e
    group by e.Department_Id )as t join Departments d
on t.部门编号=d.Department_ID

--3.列出EMPLOYEES表中各部门中'职员'(Employee_job为'职员')的:最低工资,最高工资和部门Id

select min(Salary)最低工资,MAX(Salary) 最高工资,Department_Id 部门Id from Employees
where Employee_Job='职员'
group by Department_Id

--4.对于EMPLOYEES中最低工资小于1000的部门,列出EMPLOYEE_JOB为'职员'的:部门编号,最低工资,最高工资

select * from(
    select Department_Id,MIN(e.Salary)最低工资,MAX(e.Salary)最高工资  from Employees e
    where e.Employee_Job='职员'
    group by e.Department_Id) as t
    join Departments d on d.Department_ID =t.Department_Id

--5.根据部门编号由高到低,工资由低到高,列出每个员工的姓名,部门号,工资
        select * from Employees
        order by Department_Id desc , Salary asc
--6.列出'吴用'所在部门中每个员工的姓名与部门号
    select * from Employees where Department_Id in (
    select   Department_Id  from Employees where Employee_Name='吴用'
    )
--7.列出每个员工的姓名,头衔,部门号,部门名
    select e.Employee_Name,e.Employee_Job,d.Department_ID,d.Department_Name
     from Employees e join Departments d
    on e.Department_Id=d.Department_ID
--8.列出EMPLOYEES中头衔为'职员'的员工的姓名,工作,部门号,部门名

        select * from Employees e
        join Departments d on e.Department_Id=d.Department_ID
        where e.Employee_Job='职员'
--9.对于DEPARTMENTS表中,列出所有(说明是左联):部门名称,部门编号,以及该部门的:员工姓名与头衔
    select * from Departments d left join Employees e
    on d.Department_ID=e.Department_Id
--10.列出工资高于本部门工资平均水平的员工的部门编号,姓名,工资,并且按部门编号排序。
select * from Employees e join(
            select Department_Id, AVG(Salary)as 平均工资 from Employees  e
            group by e.Department_Id)as t --求出各个部门的平均工资
    on e.Department_Id=t.Department_Id
    where e.Salary > t.平均工资
    order by e.Department_Id

    ---相关子查询
    select * from employees as emp
    where
    exists(
     select department_id,avg(salary) as avg_salary
       from employees as emp_sub
        group by department_id
    having emp_sub.department_id=emp.department_id and emp.salary>avg(salary)
    )

----
select *
from EMPLOYEES as e
where
e.SALARY >(select avg(SALARY) from EMPLOYEES as b where e.DEPARTMENT_ID = b.DEPARTMENT_ID)
order by e.DEPARTMENT_ID
--11.对于EMPLOYEES,列出各个部门中工资高于本部门平均水平的员工 数和部门号,按部门号排序
select
        emp.department_id as 部门编号,
        count(*) as 员工数
from Employees as emp
where emp.salary >
        (select avg(salary) from employees  emp_sub
      where emp_sub.department_id=emp.department_id)
group by emp.department_id
order by emp.department_id

--12.请找出部门中具有2人以上,员工工资大于所在部门平均工资的:部门的id与这些人的人数。
--分解:
--1>.部门中有人的工资比部门的平均工资还高
--2>并且这些人在2人以上
--3>查询出这些部门Id,与工资高于部门平均工资的人的人数。
select
        emp.department_id as 部门编号,
        count(*) as 员工数
from Employees as emp
where emp.salary > (select avg(salary) from employees emp_sub where emp_sub.department_id=emp.department_id)
group by emp.department_id

order by emp.department_id

--13.对于EMPLOYEES中低于自己工资至少5人的员工,列出其部门号,姓名,工资,
--以及工资少于自己的人数
select

        employee_name 姓名,
        salary 工资,
        小于自己工资的人数=(select count(*) from employees as emp_sub where emp_sub.salary<emp.salary)
from employees as emp

sql习题练习的更多相关文章

  1. sql习题及答案

    sql习题:http://www.cnblogs.com/wupeiqi/articles/5729934.html 习题答案参考:https://www.cnblogs.com/wupeiqi/ar ...

  2. sql习题--转换(LEFT/RIGTH)

    /* 转换为100-5 0100-000051-998 0001-0099812-1589 0012-01589*/IF EXISTS(SELECT * FROM sys.objects WHERE ...

  3. SQL简单语句总结习题

    创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ...

  4. 我认为测试应该掌握的SQL语句

    最近在学习Oracle,对测试人员而言必须掌握两种语言:第一种是DML,数据操纵语言 (Data Manipulation Language) 是SQL语言中,负责对数据库对象运行数据访问工作的指令集 ...

  5. 资料整理,SQL Server ,面试前复习笔记

    T-SQL 要掌握的知识点分类 SQL 面向数据库执行查询 SQL 从数据库取回数据 SQL 在数据库中插入新的记录 SQL 更新数据库中的数据 SQL 从数据库删除记录 SQL 创建新数据库 SQL ...

  6. 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案

    我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...

  7. SQL Server(四)——查询练习(45道习题)

    题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  8. Server SQL 2008 习题

    [序言:学期末了,整理了自己这个学期学习数据库做的练习题,也是让自己复习了一遍.有错误的话希望大佬能够批评指正,不胜感激] 一.修改数据库 (1)给db_temp数据库添加一个数据文件文件db_tem ...

  9. SQL Server(四)——查询练习(45道习题)转

    题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

随机推荐

  1. 洛谷P2564 [SCOI2009]生日礼物

    题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...

  2. 【ZOJ4061】Magic Multiplication(构造)

    题意:定义一个新运算为两个数A,B上每一位相乘,然后顺次接在一起,现在给定结果C和原来两个数字的长度,要求恢复成原来的数字A,B 若有多解输出A字典序最小的,A相同输出B字典序最小的,无解输出Impo ...

  3. new Date在ios下的兼容bug

    今天发现在ios下new Date("2019-03-06").getTime()返回NaN 原因是ios下不支持“-”必须用"/" 记录备忘 var d = ...

  4. SpringBoot设置事务管理

    关于事务就不介绍了,前面在研究spring的时候就已经研究过了,参考:https://www.cnblogs.com/qlqwjy/p/7296493.html 这里直接研究springboot中事务 ...

  5. 使用timeit模块 测试两种方式生成列表的所用的时间

    from timeit import Timer def test(): li=[] for i in range(10000): li.append(i) def test2(): li=[i fo ...

  6. JS打印——第三方控件打印

    LODOP 官方地址:http://www.lodop.net/ 一个很好的打印控件,可以是实现纸张设置.横打竖打.打印预览.打印维护多种功能.官网的示例非常详细.能很好支持多种浏览器的打印. 在使用 ...

  7. 正则表达式之Regex.Matches()用法

    //提取字符串中至少连续7位的数字 string txt = "www17736123780eeeee 7377091 ddddsssss7777777"; //找到的成功匹配的集 ...

  8. Ac日记——Distances to Zero codeforces 803b

    803B - Distances to Zero 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <i ...

  9. HDU 6396 Swordsman --------2018 Multi-University Training Contest 7 (模拟+读入挂)

    原题地址: 打怪升级 一开始有N个怪物:主角有K个能力:只有K个能力都击败怪物才能斩杀怪物并获得K个能力的增值:问最多能杀几个怪物: 做法: 用优先队列把怪物能力装进去:能力小放前面: 最重要的是数据 ...

  10. LCA【p2912】 牧场散步 (USACO08OCT)

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p2912 牧场散步 题意概括 给定一个树,给你Q个询问,每次询问输入一个二元组\((x,y)\),要求求出\((x,y)\) ...