下面sql语句 是依据 oracle下用户scott/tiger下的emp表

新接触的知识

1.出现在select列表中的字段或者出现在order by后面的字段,如果不是包含在分组函数中,那么该字段必须同时在group by子句中出现.

出现在group by子句中的字段则不必须出现在select列表中.

2.如果没有group by子句,select列表中不允许出现字段(单行函数)与分组函数混合使用的情况

例如

SELECT empno ,sal FROM emp; 合法

SELECT avg(sal)FROM emp;合法

SELECT empno,INITCAP(ename),AVG(sal) FROM emp;不合法

3.case 表达式

SELECT empno,ename,sal,
CASE deptno
WHEN 10 THEN '财务部'
WHEN 20 THEN '研发部'
ELSE '未知部门'
END 部门
FROM emp;

4.decode表达式

SELECT empno,ename,sal,
decode(deptno,10,'财务部门',
20,'研发部门',
'未知部门')部门
FROM emp;

5.在pl/sql developer中 使用select * from emp for update 然后点击查询结果集左上角的锁 就能进行修改 也可以对一个列进行插入等操作

6.v_ename:=&NAME; &表示可以接受键盘输入 如果接受的是数字的话 直接输入即可 例如: 2

如果接受的是字符型数据的话 需要在数据上加 单引号 例如 '张云成'

-------------------------------------------------

1.获取受雇日期的天数

SELECT ename,trunc(SYSDATE-hiredate)FROM emp;

SELECT ename,trunc(SYSDATE)-TRUNC(hiredate) FROM emp;

2.算出每个部门,每个职位的平均工资和平均奖金(平均值包括没有奖金),如果平均奖金大于300,显示"奖金不错",如果平局奖金100到300,显示

"奖金一般",如果平均奖金小于100,显示"基本没有奖金",按部门编号降序,平均工资降序排列.

SELECT AVG(sal),AVG(NVL(comm,0)),
CASE
WHEN AVG(NVL(comm,0))>300 THEN '奖金不错'
WHEN AVG(NVL(comm,0))<=300 AND AVG(NVL(comm,0))>100 THEN '奖金一般'
ELSE '基本没奖金'END 奖金状况
FROM emp GROUP BY deptno,job
ORDER BY deptno DESC,AVG(sal) DESC;

3.得到工资大于自己部门平均工资的员工信息

SELECT e.*,m.avgsal
FROM emp e, (SELECT deptno, AVG(sal) AS avgsal FROM emp GROUP BY deptno)m
WHERE e.deptno=m.deptno AND e.sal>m.avgsal ;

4.两表联查

a: 1 b: 2

2 4

3 6

4

5

1):内连接

2 2

4 4

2)满外连接

1

2 2

3

4 4

5

6

3)左连接

1

2 2

3

4 4

5

4)右连接

2 2

4 4

6

5.集合操作

建立一张只包含20部门员工信息的表

CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20;


参考资料:超详细Oracle教程.pdf


更多相关文章

  1. sql grouping with rollup 按部门 合并一些部门

随机推荐

  1. 转贴:Icon Design Guidelines, Android 2.
  2. 详解Android(安卓)ActionBar之一:ActionBa
  3. Android字体Font相关知识
  4. 运行android library projects cannot be
  5. Android贪吃蛇
  6. [Unity通信]快速接入sdk
  7. AndroidStudio出现tools:replace="androi
  8. Android(安卓)事件分发机制具体解释
  9. 修改dialog的大小
  10. Android usb网络共享开关