Oracle学习【语句查询】
基本查询语句
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学习【语句查询】的更多相关文章
- [转]关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...
- 关于oracle sql语句查询时 表名和字段名要加双引號的问题具体解释
作为oracle的刚開始学习的人相信大家一定会遇到这个问题.如图: 明明就是navicat可视化创建了表,但是就是不能查到!这个为什么呢? select * ...
- 关于oracle sql语句查询时表名和字段名要加双引号的问题详解
转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...
- Oracle简单语句查询
语法3-1:简单查询语句语法 SELECT [DISTINCT] * |列名称[AS][列别名],列名称[AS][列别名],...FROM 表名称[表别名]; 在整个简单查询之中,主要有两个子句完成: ...
- SHELL中执行Oracle SQL语句查询性能视图
数据库日志是否报错信息 vi check_log.sh #!/bin/bash # Created : 2019.10.10 # Updated : # Author : # Description ...
- oracle学习 第一章 简单的查询语句 ——03
1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...
- Oracle学习笔记(7)——高级查询(1)
在学习高级查询之前,我们先了解一下怎样查看Oracle数据库中的全部表.由于我们要使用到Oracle数据库中SCOTT用户下的几张表(这些表是Oracle数据库自带的表). 分组查询 分组函数的概念: ...
- oracle学习 第二章 限制性查询和数据的排序 ——03
这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7 怎样使用转义(escape)操作符 ...
- SQL数据库学习,常用语句查询大全
数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...
- oracle学习 十 数据库的语句优化(持续更)
平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则. 原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的 ...
随机推荐
- (转载)Flash Loader加载完成不发送COMPLETE和ERROR事件的问题分析
(转载)http://blog.dou.li/flash-loader%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%90%E4%B8%8D%E5%8F%91%E9%80%81co ...
- HDOJ --- 2196 Computer
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU-2710 Max Factor
看懂: Max Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- SqlServer SSAS IIS 部署
参考MSDN官网:http://technet.microsoft.com/zh-cn/library/gg492140.aspx 注意事项: 网络上有文章说,最后验证是否成功 是在浏览器中输入url ...
- CSS 最核心的几个概念
CSS 中最核心的几个概念,包括:盒模型.position.float等. 这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成. 元素类型 HTML 的元素可以分为两种: 块级 ...
- Oracle DB 自动管理共享内存
• 启用Oracle Enterprise Manager (EM) 内存参数 • 设置自动优化的内存参数 • 使用手动优化的SGA 参数覆盖最小大小 • 使用SGA Advisor 设置SGA_TA ...
- yii2
yii2框架官方说明文档 http://www.yiiframework.com/doc/guide/2.0/zh_cn/caching.page yii2创建您的第一个application应用 h ...
- java版本 ueditor 在线编辑器 配置
上传文件大小的配置 1. ueditor\dialogs\video\video.js 搜索 file_size_limit 修改这个数值 (这是前台 flash的限制) 2. ueditor ...
- 【转】android Camera 中添加一种场景模式
http://blog.csdn.net/fulinwsuafcie/article/details/8833652 首先,来了解一下什么是场景模式. 最简单的方法当然是google了,这里有一篇文章 ...
- Nothing
破烂的文具盒里,一张十年的纸条子和一袋存了十年的德芙巧克力 浅绿色的纸条子上写是当时你给我抄的作业题目,蓝色清秀的字体 但是十年后,你却已嫁他人 将身后的风雪.夕阳,空气埋葬.窑藏,待非常多年以后酿成 ...