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采用自下而上的 ...
随机推荐
- Centos6.4 设置开机自动以某个非root用户启动脚本
开机自动运行脚本,可以将脚本的执行命令放在 /etc/rc.d/rc.local 文件中,但是这样开机自动运行这个脚本的用户默认为root. 如果想以某个非root用户运行脚本,可以使用如下命令: s ...
- 英语之路 zt
各位为英语而郁闷的兄弟姐妹们: 自从考完GRE和TOEFL以后,心有所感,本想写点心得,但是因为太懒没写成.今日风雨如晦,心中又有所感,于是一舒笔墨,写下我学英语的方法.俺知道有很多兄弟姐妹们和曾经的 ...
- C# 关键字 default
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型. 如果 T 为值类型,则它是数值还是结构 http://msdn.micros ...
- JAVA环境变量正确设置,却无法在cmd中javac
今晚试着重新设置JAVA的环境变量,按着度娘告知的操作方法: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值 ...
- B树,B-树,B+树,B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- 仿写自己的一个加载语言包的L函数
<?php /** * [L 加载语言的L的方法] * @param [string] $key [语言键的名称] * @return [string] $value [取到的语言值] */ f ...
- 用LINQPad加上Tx驱动来分析log
Tx (LINQ to Logs and Traces)是微软发布的开源工具.可以用这个工具来使用LINQ分析日志,包括 Event Tracing for Windows (ETW) Event L ...
- Servlet(2)
一.伪代码演示Tomcat的内部代码运行 1).通过映射找到servlet-class的内容,字符串:com.gqx.servlet.FirstServlet 2).通过反射构造构造FirstServ ...
- hadoop ssh无密码登陆
VM DHCP蛋疼了,这次整个static... scp
- Windows环境下tomcat配置日志输出
在Linux系统中,可以通过tail -f catalina.out 来跟踪Tomcat 和相关应用运行的情况. 在windows下,catalina日志与Linux记录的内容有很大区别,大多信息 ...