基本查询语句
any和all
不能单独使用,必须和比较符一起使用
>any 大于最小的
例如:select * from emp where sal >any(1000,2000);
<any 小于最大的
>all 大于最大的
<all 小于最小的

distinct 过滤重复关键字
例如:select distinct age from emp;

聚合函数 即数据统计
max(col);
min(col);
avg(col);
sum(col);
count(col/*);
例如:select count(age) from emp;该字段含有null值,计数器会将该null值得这一列忽略,所以会造成统计数据有误差
其中的空值可以使用nvl和nvl2函数处理
变成:select count(nvl(age,0)) from emp;

查询语句执行顺序
from子句
执行顺序从后往前,从右到左,故数据量较少的表尽量放在后面
例如:select t1.col,t2.col from t1,t2 where t1.id=t2.id;
where子句
执行顺序自上而下,从右到左,故将能过滤掉最大数量记录的条件写在where子句的最右
group子句
执行顺序从左往右分组,故最好将group by 前使用where将不需要的记录在group by之前过滤掉

group by子句 分组
当希望得到每个部门的平均薪水,而不是整个机构的平均薪水
把整个数据表按部门分成一个个小组,每个小组中包含一行或多行数据,在每个小组中使用分组函数进行计算,没组返回一个记过
划分的小组有多少,最后的结果集行数就有多少

having子句
消耗资源,尽量避免使用,having会在检索出所有记录之后才对结果集进行过滤,需要排序等操作
having子句用来对分组后的结果进一步限制,比如按部门分组后,得到的每个部门的最高薪水,可以继续限制输出结果
必须跟在group by 后面,不能单独存在

select子句
少用*号,尽量取字段名称,oracle在解析的过程中,通过查询数据字典将*号依次转换成所有的列名,消耗时间
order by子句 对数据按一定规则进行排序操作,必须是查询语句的最后一个子句
执行顺序从左到右,消耗资源
asc(ascending)升序(默认) desc(descending)降序
null值视作最大

多列排序:
首先按照第一列进行排序,如果第一列数据相同,再以第二列排序,以此类推
例如:select ename,job,sal from emp order by job desc,sal desc;

-----------------------------------------------------------------
创建表空间:
create tablespace
scott_space
datafile 'D:\oracle\user\scott_space.dbf'
size 500m
autoextend on
next 20m maxsize 2000m;

创建用户:
create user scott identified by a
default tablespace scott_space;

给该用户解锁
alter user scott account unlock;

给用户授权
grant connect,resource to scott;

创建表DEPT:
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
向表DEPT中插入数据:
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');

创建表EMP:
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

向表EMP中插入数据:
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-7-87','dd-mm-rr')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-7-87', 'dd-mm-rr')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);

简单查询:
1、选择部门30中的所有员工
select ename from emp where deptno=30;

2、列出所有办事员的姓名、编号、和部门编号
select ename,empno,deptno from emp where job='CLERK';

3、找出佣金高于薪金的员工
select ename from emp where comm>sal;

4、找出佣金高于薪金60%的员工
select ename from emp where comm>(sal*0.6);

5、找出部门10中所有经理和部门20中所有办事员的详细信息
select * from emp where deptno=10 and job='MANAGER' or deptno=20 and job='CLERK';

6、找出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但薪金大于或等于2000的所有员工的详细信息
select * from emp where deptno=10 and job='MANAGER' or deptno=20 and job='CLERK' or sal>2000 and job not in('MANAGER','CLERK');

7、找出有佣金的员工的不同工作
select distinct job from emp where comm is not null;

8、找出没有佣金或佣金低于100的员工
select ename,comm from emp where comm is null or comm<100;

9、找出各月倒数第三天受雇的所有员工
select ename from emp where last_day(hiredate)-hiredate=2;

10、找出早于12年前受雇的员工
select ename,hiredate from emp where months_between(sysdate,hiredate)/12>=12;

11、以首字母大写的方式显示所有员工的姓名
select initcap(ename) from emp;

12、显示正好为5个字符的员工姓名
select ename from emp where length(ename)=5;

13、显示不带有R的员工姓名
select ename from emp where ename not like '%R%';

14、显示所有员工的前三个字符
select substr(ename,1,3) from emp;

15、显示所有员工的姓名,用a替换A
select replace(ename,'A','a') from emp;

16、显示满10年服务年限的员工的姓名和受雇日期
select ename,hiredate from emp where months_between(sysdate,hiredate)/12>=10;

17、显示员工的详细信息,按姓名排序
select * from emp order by ename;

18、显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面
select ename,hiredate from emp order by hiredate asc;

19、显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同按薪金排序
select ename,job,sal from emp order by job desc,sal desc;

20、显示所有员工姓名、加入公司的年份和月份,按受雇日期所在的月排序,若月份相同则将最早年份的员工排在最前面
select ename,extract(year from hiredate),extract(month from hiredate) from emp order by extract(month from hiredate),hiredate;
或者
select ename,to_char(hiredate,'YYYY/MM') from emp order by to_char(hiredate,'MM'),to_char(hiredate,'YYYY') asc;

21、显示在一个月为30天的情况下所有员工的日薪金,忽略余数
select round(sal/30) from emp;

22、找出在任何年份的2月受聘的所有员工
select ename,hiredate from emp where extract(month from hiredate)=2;

23、对于每个员工,显示其加入公司的天数
select ename,floor (sysdate-hiredate) as days from emp;

24、以年月日的方式显示所有员工的服务年限(表述意图不明)

Oracle学习【语句查询】的更多相关文章

  1. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  2. 关于oracle sql语句查询时 表名和字段名要加双引號的问题具体解释

      作为oracle的刚開始学习的人相信大家一定会遇到这个问题.如图:          明明就是navicat可视化创建了表,但是就是不能查到!这个为什么呢?           select * ...

  3. 关于oracle sql语句查询时表名和字段名要加双引号的问题详解

    转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...

  4. Oracle简单语句查询

    语法3-1:简单查询语句语法 SELECT [DISTINCT] * |列名称[AS][列别名],列名称[AS][列别名],...FROM 表名称[表别名]; 在整个简单查询之中,主要有两个子句完成: ...

  5. SHELL中执行Oracle SQL语句查询性能视图

    数据库日志是否报错信息 vi check_log.sh #!/bin/bash # Created : 2019.10.10 # Updated : # Author : # Description ...

  6. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  7. Oracle学习笔记(7)——高级查询(1)

    在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表.由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表). 分组查询 分组函数的概念: ...

  8. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  9. SQL数据库学习,常用语句查询大全

    数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...

  10. oracle学习 十 数据库的语句优化(持续更)

    平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则.   原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的 ...

随机推荐

  1. GIS大讲堂内所有讲座的索引(更新至2008年6月26日)(转)

    转自:http://www.cnblogs.com/xiexiaokui/archive/2008/11/20/1337934.html GIS大讲堂内所有讲座的索引(更新至2008年6月26日)   ...

  2. uva 3523 Knights of the Round Table

    题意:给你n,m n为有多少人,m为有多少组关系,每组关系代表两人相互憎恨,问有多少个骑士不能参加任何一个会议. 白书算法指南 对于每个双联通分量,若不是二分图,就把里面的节点标记 #include ...

  3. OSI 七层模型和 TCP/IP 协议比较

      OSI (Open System Interconnection), 开放式系统互联参考模型.从下到上七层模型功能及其代表协议: 物理层(Physical) :规定了激活.维持.关闭通信端点之间的 ...

  4. advanced dom scripting dynamic web design techniques Chapter 2 CREATING YOUR OWN REUSABLE OBJECTS

    JavaScript is all about objects. Objects are the foundation of everything, so if you’re unfamiliar w ...

  5. 【设计模式 - 23】之模版方法模式(Template)

    1      模式简介 模版方法模式的定义: 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模版方法模 ...

  6. Android开发:如何安全的中止一个自定义线程Thread

    http://blog.csdn.net/yanzi1225627/article/details/8582078 经研究,我推荐这种写法: /*自定义线程*/ class MyThread impl ...

  7. hdu1864 最大报销额(01背包)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 Problem ...

  8. Java获取真实的IP地址--转载

    // 获取真实IP的方法() public String getIpAddr() { String ip = request.getHeader("x-forwarded-for" ...

  9. 【Debian百科】巨页

    巨页 为什么使用巨页? 当一个进程使用一些内存的时候,CPU就把那部分内存标记成已被该进程使用的.为了提高效率,CPU会按4K字节块(它在很多平台上是默认值)分配内存.这些块被称作页.这些页可以被交换 ...

  10. hdu2015java

    偶数求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...