1. 过滤和排序数据
- 查询工资大于1200的员工姓名和工资
- 查询员工号为7788的员工的姓名和部门号
- 选择工资不在500到1200的员工的姓名和工资(两种解法)
- 选择雇用时间在1981-02-01到1981-05-01之间的员工姓名,工作和雇用时间(两种解法)
- 选择在20或50号部门工作的员工姓名和部门号(两种解法)
- 选择在1981年雇用的员工的姓名和雇用时间
- 选择公司中没有管理者的员工姓名及job
- 选择公司中有奖金的员工姓名,工资和奖金级别
- 选择员工姓名的第三个字母是R的员工姓名
- 选择姓名中有字母L和E的员工姓名
或者
2. 单行函数
- 显示系统时间(注:日期+时间)
- 查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
- 将员工的姓名按首字母排序,并写出姓名的长度(length)
- 查询各员工的姓名,并显示出各员工在公司工作的月份数(worked_month),不足一个月算一个月。
- 查询员工的姓名,以及在公司工作的月份数(worked_month),不足一个月算一个月,并按月份数降序排列
-
做一个查询,产生下面的结果
(某人)每月想要赚取(三倍月工资),但是仅仅赚了(月工资)
例如:
Dream Salary
SMITH每月想要赚取
800
-
使用decode函数,按照下面的条件分类:
job grade CLERK A SALESMAN B MANAGER C ANALYST D PRESIDENT E SQL :
- 将第7题的查询用case函数再写一遍。
3. 多表查询
- 显示所有员工的姓名,部门号和部门名称(两种方法)
或者:
- 查询30号部门员工的job和30号部门的loc
- 选择所有有奖金的员工的ename , dname , loc
- 选择city在NEW YORK工作的员工的ename , job , deptno , dname
- 选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
姓名 | 员工号 | 领导 |
---|---|---|
SCOTT | 7788 | JONES |
4. 分组函数
组函数处理多行返回一行吗?
组函数不计算空值吗?
- where子句可否使用组函数进行过滤?
- 查询公司员工工资的最大值,最小值,平均值,总和
- 查询各工作的员工工资的最大值,最小值,平均值,总和
- 选择具有各个工作的员工人数
- 查询员工最高工资和最低工资的差距(DIFFERENCE)
- 查询各个管理者手下员工的最低工资,其中最低工资不能低于2000,没有管理者的员工不计算在内
- 查询所有部门的名字,部门地址,员工数量和工资平均值
- 查询公司在1980-1982年之间,每年雇用的人数,结果类似下面的格式
total | 1980 | 1981 | 1982 |
---|---|---|---|
12 | 1 | 10 | 1 |
5. 子查询
- 查询和SCOTT相同部门的员工姓名和雇用日期
- 查询工资比公司平均工资高的员工的员工号,姓名和工资。
- 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资(难)
- 查询在部门的loc为NEW YORK的部门工作的员工的员工号
- 查询管理者是King的员工姓名和工资
6. 创建和管理表
- 创建表dept1
name | Null | type |
---|---|---|
id | number(7) | |
name | varchar2(25) |
SQL:
- 快速新建dept2表,要求个dept表结构一样,并且数据一样。
- 创建表emp5
name | Null | type |
---|---|---|
id | Number(7) | |
First_name | Varchar2(25) | |
Last_name | Varchar2(25) | |
Dept_id | Number(7) |
SQL:
- 将列Last_name的长度增加到50
- 根据表emp5创建employees2
- 删除表emp5
- 将表employees2重命名为emp5
- 在表dept和emp5中添加新列test_column,并查看表结构
- 在表dept和emp5中将列test_column设置成不可用,之后删除
- 直接删除表emp5中的列 dept_id
7. 数据处理
- 运行以下脚本创建表my_employees
- 显示表my_employees的结构
- 向表中插入下列数据
ID | FIRST_NAME | LAST_NAME | USERID | SALARY |
---|---|---|---|---|
1 | patel | Ralph | Rpatel | 895 |
2 | Dancs | Betty | Bdancs | 860 |
3 | Biri | Ben | Bbiri | 1100 |
4 | Newman | Chad | Cnewman | 750 |
5 | Ropeburn | Audrey | Aropebur | 1550 |
- 提交
- 将3号员工的last_name修改为“drelxer”
- 将所有工资少于900的员工的工资修改为1000
- 检查所作的修正
- 提交
- 删除所有数据
- 查看表中数据
- 回滚
- 清空表my_employees
8. 约束处理
准备工作:
create table emp2 as select empno id, ename name, sal salary from emp;
create table dept2 as select deptno id, dname dept_name from dept;
- 向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)
- 向表dept2的id列中添加PRIMARY KEY约束(my_dept_id_pk)
- 向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列。
9. 视图
- 使用表emp创建视图employee_vu,其中包括姓名,员工号,部门号
- 显示视图的结构
- 查询视图中的全部内容
- 将视图中的数据限定在部门号是30的范围内
- 将视图改变成只读视图
10. select练习
- 列出emp表中各部门的部门号,最高工资,最低工资
- 列出emp表中各部门job为'CLERK'的员工的最低工资,最高工资
- 对于emp中最低工资小于1000的部门,列出job为'CLERK'的员工的部门号,最低工资,最高工资
- 根据部门号由高而低,工资由低而高列出每个员工的姓名,部门号,工资
- 列出'SCOTT'所在部门中每个员工的姓名与部门号
- 列出每个员工的姓名,工作,部门号,部门名
- 列出emp中工作为'CLERK'的员工的姓名,工作,部门号,部门名
- 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)
- 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为'CLERK'的员工名与工作
- 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序
部门编号 | 平均工资 |
---|---|
10 | 2916.66667 |
20 | 2175 |
30 | 1566.66667 |
- 对于emp,列出各个部门中平均工资高于本部门平均水平的员工数和部门号,按部门号排序
- 对于emp中工资高于本部门平均水平,人数多于1人的,列出部门号,人数,按部门号排序(难)
- 对于emp中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数(难)