码迷,mamicode.com
首页 > 数据库 > 详细

oracle3

时间:2015-10-03 23:02:36      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:

查看表结构
DESC emp; 
查询所有列
SELECT * FROM dept; 
切忌动不动就用select * 
set timing on; 打开显示操作时间的开关,在下面显示查询时间。 
CREATE TABLE users(userId VARCHAR2(10), uName VARCHAR2 (20), uPassw VARCHAR2(30)); 
INSERT INTO users VALUES(a0001, 啊啊啊啊, aaaaaaaaaaaaaaaaaaaaaaa); 
--从自己复制,加大数据量 大概几万行就可以了  可以用来测试sql语句执行效率 
INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users; //多次执行,每次加入后的数据为前次的2倍,指数增长。
SELECT COUNT (*) FROM users;统计行数 

 查询指定列
SELECT ename, sal, job, deptno FROM emp; 
 如何取消重复行DISTINCT 
SELECT DISTINCT deptno, job FROM emp; 
查询SMITH所在部门,工作,薪水 
SELECT deptno,job,sal FROM emp WHERE ename = SMITH; 
注意:oracle对内容的大小写是区分的,所以ename=SMITH和ename=smith是不同的 

 使用算术表达式 nvl  null 
问题:如何显示每个雇员的年工资? "年薪"为别名,nvl中为null就为0
SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm  FROM emp; 
 使用列的别名
SELECT ename "姓名", sal*12 AS "年收入" FROM emp; 
 如何处理null值
使用nvl函数来处理 
 如何连接字符串(||)
SELECT ename  ||  is a  || job FROM emp; 
 使用where子句
问题:如何显示工资高于3000的 员工? 
SELECT * FROM emp WHERE sal > 3000; 
问题:如何查找1982.1.1后入职的员工? 
SELECT ename,hiredate FROM emp WHERE hiredate >1-1月-1982; 
问题:如何显示工资在2000到3000的员工? 
SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000; 

 如何使用like操作符 
%:表示0到多个字符  _:表示任意单个字符 
问题:如何显示首字符为S的员工姓名和工资? 
SELECT ename,sal FROM emp WHERE ename like S%; 
如何显示第三个字符为大写O的所有员工的姓名和工资? 
SELECT ename,sal FROM emp WHERE ename like __O%; 

 在where条件中使用in
问题:如何显示empno为7844, 7839,123,456 的雇员情况? 
SELECT * FROM emp WHERE empno in (7844, 7839,123,456); 
 使用is null的操作符
问题:如何显示没有上级的雇员的情况? 
错误写法:select * from emp where mgr = ‘‘; 
正确写法:SELECT * FROM emp WHERE mgr is null;

六:oracle表查询(2)
使用逻辑操作符号 
问题:查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J? 
SELECT * FROM emp WHERE (sal >500 or job = MANAGER) and ename LIKE J%; 
 使用order by字句   默认asc 
问题:如何按照工资的从低到高的顺序显示雇员的信息? 
SELECT * FROM emp ORDER by sal; 
问题:按照部门号升序而雇员的工资降序排列 
SELECT * FROM emp ORDER by deptno, sal DESC; 

使用列的别名排序
问题:按年薪排序 
select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc; 
别名需要使用“”号圈中,英文不需要“”号 

 分页查询 
等学了子查询再说吧。。。。。。。。 

Clear 清屏命令 

 

oracle表复杂查询 

数据分组 ——max,min, avg, sum, count 
问题:如何显示所有员工中最高工资和最低工资? 
SELECT MAX(sal),min(sal) FROM emp e; 
      最高工资那个人是谁? 
错误写法:select ename, sal from emp where sal=max(sal); 
正确写法:select ename, sal from emp where sal=(select max(sal) from emp); 
注意:select ename, max(sal) from emp;这语句执行的时候会报错,说ORA-00937:非单组分组函数。因为max是分组函数,而ename不是分组函数....... 
但是select min(sal), max(sal) from emp;这句是可以执行的。因为min和max都是分组函数,就是说:如果列里面有一个分组函数,其它的都必须是分组函数,否则就出错。这是语法规定的问题:如何显示所有员工的平均工资和工资总和? 

问题:如何计算总共有多少员工问题:如何

扩展要求: 
查询最高工资员工的名字,工作岗位 
SELECT ename, job, sal FROM emp e where sal = (SELECT MAX(sal) FROM emp); 
显示工资高于平均工资的员工信息 
SELECT * FROM emp e where sal > (SELECT AVG(sal) FROM emp); 

 

oracle3

标签:

原文地址:http://www.cnblogs.com/yaowen/p/4853893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!