基本查询语句
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. “面包屑导航”——SiteMapPath控件的使用(ASP.NET)(转)

    转自:http://www.cnblogs.com/ball-head/archive/2010/09/28/1837253.html 最近在博客里写了一些日志,主要都是我在实际编程过程中遇到的问题. ...

  2. 水题:HDU 5119 Happy Matt Friends

    Matt has N friends. They are playing a game together.Each of Matt's friends has a magic number. In t ...

  3. pdb文件部分解释

    pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为release模式时,建议将 pdb文件删除, 同时,对外发布的时候,也把 pdb删除, ...

  4. Wildfly 中支持jersey,并websocket的默认配置修改。

    以下为在jboss安装相对路径来写的.1.\domain\configuration\domain.xml修改内容: 注释关键字jaxrs存在的四行.修改后如下: <!--<extensi ...

  5. POJ 3616 Milking Time 简单DP

    题意:奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量. 详见代码 ...

  6. JavaScript高级程序设计44.pdf

    unload事件 与load事件对应的是unload事件,这个事件在文档被完全卸载后触发,只要用户从一个页面切换到另一个页面,就会发生unload事件,最多的情况是清除引用,避免内存泄漏 与load事 ...

  7. Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 631  Solved: 445[Submi ...

  8. Yii AR Model CRUD数据库操作

    Yii AR很好很强大,但刚开始不知道怎么使用,可以先看下官方文档 官方文档:http://www.yiichina.com/guide/database.ar 下面是我对AR的一些理解 对于一个Mo ...

  9. E. Three States - Codeforces Round #327 (Div. 2) 590C States(广搜)

    题目大意:有一个M*N的矩阵,在这个矩阵里面有三个王国,编号分别是123,想知道这三个王国连接起来最少需要再修多少路. 分析:首先求出来每个王国到所有能够到达点至少需要修建多少路,然后枚举所有点求出来 ...

  10. 关于附件控件隐藏后,在IE下不能上传,报“拒绝访问”

    报错时的使用: @Html.TextBoxFor(m => m.FileName, new { style = "width:457px;", @readonly = &qu ...