sql习题练习
表结构:
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习题练习的更多相关文章
- sql习题及答案
sql习题:http://www.cnblogs.com/wupeiqi/articles/5729934.html 习题答案参考:https://www.cnblogs.com/wupeiqi/ar ...
- sql习题--转换(LEFT/RIGTH)
/* 转换为100-5 0100-000051-998 0001-0099812-1589 0012-01589*/IF EXISTS(SELECT * FROM sys.objects WHERE ...
- SQL简单语句总结习题
创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ...
- 我认为测试应该掌握的SQL语句
最近在学习Oracle,对测试人员而言必须掌握两种语言:第一种是DML,数据操纵语言 (Data Manipulation Language) 是SQL语言中,负责对数据库对象运行数据访问工作的指令集 ...
- 资料整理,SQL Server ,面试前复习笔记
T-SQL 要掌握的知识点分类 SQL 面向数据库执行查询 SQL 从数据库取回数据 SQL 在数据库中插入新的记录 SQL 更新数据库中的数据 SQL 从数据库删除记录 SQL 创建新数据库 SQL ...
- 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案
我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...
- SQL Server(四)——查询练习(45道习题)
题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...
- Server SQL 2008 习题
[序言:学期末了,整理了自己这个学期学习数据库做的练习题,也是让自己复习了一遍.有错误的话希望大佬能够批评指正,不胜感激] 一.修改数据库 (1)给db_temp数据库添加一个数据文件文件db_tem ...
- SQL Server(四)——查询练习(45道习题)转
题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...
随机推荐
- Lesson 7: C#多线程
C#多线程 1.适用于: 通过网络进行通信 执行占用时间的操作 区分具有不同优先级的任务 使用户界面在执行后台任务时能快速响应用户的交互 2.Thread类常用属性及方法 属性: IsAlive:显示 ...
- Hibernate中inverse="true"的理解
Hibernate中inverse="true"的理解 举例如下 转自:http://lijiejava.iteye.com/blog/776587 Customer类: publ ...
- [从hzwer神犇那翻到的模拟赛题] 合唱队形
[问题描述] 学校要进行合唱比赛了,于是班主任小刘准备给大家排个队形. 他首先尝试排成m1行,发现最后多出来a1个同学:接着他尝试排成m2行,发现最后多出来a2个同学,……,他尝试了n种排队方案,但每 ...
- Windows注册与删除mysql服务
1.删除服务: (1)采用windows自带的服务管理工具:参考:http://www.cnblogs.com/qlqwjy/p/8010598.html sc delete MySQL57 (2)m ...
- 转载: CentOS/Linux 解决 SSH 连接慢
CentOS/Linux 解决 SSH 连接慢 现在连接Linux服务器一般都是使用SSH远程连接的方式.最近新装了一台服务器,发现telnet时速度很快,ping时一切也正常,但SSH连接的时候却很 ...
- 牧场行走(LCA)
神奇传送门 好吧,这题很有意思.. 第一眼撇的时候还以为是(SPFA)呜.... 然后发现要Q次询问就想到了LCA 但是发现不是求LCA.. 于是想到了一个神奇的定律: 两点的LCA一定在u到v的最短 ...
- centos 资源链接
不时更新.. 安装.启动相关 自动安装的精简的ISO 教你制作属于自己的CentOS 6.4一键自动化安装ISO镜像光盘 initrd介绍 理解 vmlinuz, initrd 和 System.ma ...
- linux的文件布局
/bin---权限为 rwxr-xr-x 所有者为root/root 用户bin最先进入的工作目录就是这里.这里放置的是执行目录,但是特殊在这里的命令可以被一般用户使用(root更能使用).例如 ca ...
- jQuery中的each关键词
#转载请留言联系 从一个简单的例子引入,jQuery里的each有什么作用? <!DOCTYPE html> <html lang="en"> <he ...
- AC日记——Count on a tree II spoj
Count on a tree II 思路: 树上莫队: 先分块,然后,就好办了: 来,上代码: #include <cmath> #include <cstdio> #inc ...