使用scott用户中存在的emp、dept表等做演示

一、单表查询

查看表结构:desc dept;

查看所有列:select * from dept;

查询指定列:select ename,sal,job,deptno from emp;

如何取消重复行:select disrinct deptno,job from emp;

1.1 基本查询

①查询SMITH的薪水,工作,部门号
select deptno,job,sal from emp where eanme=’SMITH’; ②显示每个雇员的年工资
select ename,sal*12 from emp; 不合理
select ename,sal*12+comm*12 from emp; 不合理 ③修改列的名字,起别名
select ename ‘姓名’, sal*12 ‘年收入’ from emp; ④如何处理null值:nvl函数处理
select ename,sal*12+nvl(comm,0)*12 ‘年收入’ from emp; 每个雇员的年工资 ⑤如何连接字符串(||)
select ename || ‘is a’ || job from emp; ⑥工资高于3000元的员工
select ename,sal 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
显示雇员的编号为123,345,800的雇员情况
select * from emp where empno in (7844,345,800); ⑨使用is null的操作
显示没有上级的雇员的情况
select * from emp where mgr is null; 使用逻辑操作符号
查询工资高于500或是岗位为MANAGER的雇员,用时还要满足他们的姓名手写字母为大写的J
select * from emp where (sal>500 or job=’MANAGER’) and ename like ‘J%’; 使用order by
按照工资高低显示雇员的信息
select * from emp order by sal; 从低到高
select * from emp order by sal desc; 从高到低 按照部门号升序而雇员的工资降序排列显示雇员的信息
Select * from emp order by deptno, sal desc; 使用列的别名排序
按照年薪排序
select ename,(sal+nvl(comm,0))*12 “年薪” from emp order by “年薪” asc; 从低到高

1.2 复杂查询

①数据分组:max、min、avg、sum、count

所有员工中最高工资和最低工资
select ename,sal from emp where sal=(select max(sal) from emp);
select ename,sal from emp where sal=(select min(sal) from emp); 工资最高的员工的名字,工作岗位
select ename job from emp where sal=(select max(sal) from emp); 工资高于平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp); ②group by与having
group by用于对查询的结果分组统计
having用于限制分组显示结果 显示每个部门的平均工资和最高工资
select avg(sal),max(sal),deptno from emp group by deptno; 显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),deptno,job from emp group by deptno,job; 显示平均工资低于2000的部门号和它的平均工资
select deptno, avg(sal),max(sal) from emp group by deptno having avg(sal)<2000; ③总结:分组函数只能出现在选择列表、having、order by中
如果在select语句中同时包含有group by、having、order by 那么它们的顺序是group by、having、order by
在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by中,否则就会出错
如:select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

二、多表查询

2.1 基本查询

①显示雇员名,雇员工资及所在部门的名字(笛卡尔积)
select a1.name,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;
注:多表查询的条件是 至少不能少于表的个数-1 ②显示部门号为10的部门名、员工名和工资
Select a1.dname,a2.ename,a2.sal from dept a1,emp a2 where a1.deptno=a2.deptno and a1.deptno=10; ③显示各个员工的姓名、工资及工资的级别
Select a1.ename,a1.sal,a2.grade from dept a1,salgrade a2 where a1.sal between a2.losal and a2.hisal; ④显示雇员名,雇员工资及所在部门的名字,并按部门排序
select a1.ename,a2.dname,a1.sal from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno; ⑤自连接:在同一张表中的连接查询
显示FORD员工的上级领导的姓名
select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno and worker.ename=’FORD’;

2.2 复杂查询

①子查询:嵌入在其他sql语句中的select语句
单行子查询:只返回一行数据的子查询语句
显示与SMITH同一部门的所有员工:先查询出SMITH的部门号
select * from emp where deptno=( select deptno from emp where ename=‘SMITH’
) 多行子查询:返回多行数据的子查询
显示和部门10的工作相同的雇员的名字、岗位、工资和部门号
select * from emp where job in (select distinct job from emp where deptno=10);

在多行子查询中使用all操作符
显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp where sal>all (select sal from emp where deptno=30);

在多行子查询中使用any操作符
显示工资比部门30的任意一个员工的额工资高的员工的姓名、工资和部门号
Select ename,sal,deptno from emp where sal>any (select sal from emp where deptno=30);

在from子句中使用子查询:显示高于自己部门平均工资的员工信息
解决:首先查询出各个部门的平均工资和部门号
select deptno,avg(sal) mysql from emp group by deptno;
把上面的查询看做是一张子表
select a2.ename,a2.sal,a2.deptno,a1.mysql from emp a2,(select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;
注:当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫作内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名 ②分页查询
oracle分页一共有三种方式:
rownum分页
select a1.*,rownum rn from (select * from emp) a1; ③用查询结果创建新表(快捷建表)
create table mytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp; ④合并查询
在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union、union all、intersect、minus union:用于取得两个结果集的并集,当使用该操作符是,会自动去掉结果集中重复行
如:select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job=’MANAGER’; union all:操作与union相似,但是它不会取消重复行,而且不会排序
select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job=’MANAGER’;

intersect:用于取得两个结果的交集
select ename,sal,job from emp where sal>2500 intersect select ename,sal,job from emp where job=’MANAGER’;

minus:用于取得两个结果集的差集,它只会显示存在第一个集合中,而不会存在第二个集合中的数据
select ename,sal,job from emp where sal>2500 minus select ename,sal,job from emp where job=’MANAGER’;

内连接:

左连接:

右连接:right join

三、子查询

四、日期函数:

1、日期和字符转换函数用法:(to_char,to_date,to_namber)

使用to_date函数将字符转换成数字。

使用to_char函数对日期的转换,并也可以对数字转换。

使用to_namber函数将字符转换成日期

格式:必须包含在单引号中且大小写敏感;可以包含任意的有效的日期格式;日期之间用逗号隔开。

注意:(1)Dual 是一个‘伪表’作用于用来测试函数和表达式;(2)sysdate 格式化当前系统日期和时间

2、日期函数调试

Months_between :两个日期相差的月数

代码:Select months_between(’01-9月-95’,’11-1月-94’) from  employees

显示:19.6774

Add_months :向指定日期中加上若干个月数

代码:Select months_between(’11-1月-94’,6) from  employees

显示:11-07-94

Next_day :指定日期的下一个星期 对应的日期

代码:Select next_day(‘01-9月-95’,‘星期五’) from employees

显示:08-09-95

Last_day :本月的最后一天

代码:select last_day(‘01-2月-95’)from employees

显示:28-02-95

Rround :日期四舍五入

Select round(sysdate,‘year’)from employees

显示:01-10-19

Select round(sysdate,‘month)from employees

显示:01-04-9

Trunc :日期截断

Select trunc(sysdate,‘year’)from employees

显示:01-10-19

Select round(sysdate,‘month’)from employees

显示:01-04-9

3、系统的日期和时间格式

是指格式当前系统的日期和时间,并使用to_char数字转换函数。

代码:Select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;

注意:使用双引号向日期添加字符。

4、数字符号转换格式

To_char格式:9数字、0零、$美元符、L本地货币符号、.小数点、,千位符

5、字符隐式格式

若字符串中有特殊字符,例如 ’123456789’,则无法进行隐式转换,需要使用to_numbar()来完成

6、查询相关的日期

对于把日期作为查询条件的查询,一般都使用to_date() 把一个字符串转为日期,这样可以不必关注日期格式

oracle表查询的更多相关文章

  1. oracle 表查询(2)

    使用逻辑操作符号 问题:查询工资高于500 或者是岗位为MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的J? or job = 'MANAGER') and ename LIKE 'J%' ...

  2. oracle 表查询(1)

    oracle 表基本查询 介绍在我们讲解的过程中我们利用scott 用户存在的几张表(emp,dept)为大家演示如何使用select语句,select 语句在软件编程中非常有用,希望大家好好的掌握. ...

  3. (六)Oracle 的 oracle表查询关键字

    参考:http://www.hechaku.com/Oracle/oracle_tables2.html 1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们 ...

  4. oracle 表查询二

    1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...

  5. 七、oracle 表查询二

    1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...

  6. oracle 表查询(二)

    1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...

  7. 七 oracle 表查询二

    1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J?select * from emp where (sal > 500 or ...

  8. (21)Oracle表查询进阶

    转到基本查询 一.多表查询 笛卡尔积:每张表的列数相加,行数相乘. 连接条件:得出笛卡尔积后需要用where条件筛选出正确的数据.连接条件至少需要n张表减1个 1.等值连接 连接条件为等号 selec ...

  9. oracle 表查询一

    通过scott用户下的表来演示如何使用select语句,接下来对emp.dept.salgrade表结构进行解说. emp 雇员表字段名称   数据类型       是否为空   备注-------- ...

随机推荐

  1. 【hash】Seek the Name, Seek the Fame

    [哈希和哈希表]Seek the Name, Seek the Fame 题目描述 The little cat is so famous, that many couples tramp over ...

  2. python入门pk小游戏

    import time import random flag = True while flag: player_win = 0 enemy_win = 0 for i in range(1, 4): ...

  3. JS中json数组多字段排序方法(解决兼容性问题)(转)

    前端对一个json数组进行排序,用户需要动态的根据自己的选择来对json数据进行排序. 由于后台表设计问题所以不能用sql进行排序,这里用到了js的sort方法. 如果对单字段排序,那么很简单,一个s ...

  4. 7-MySQL DBA笔记-研发规范

    第7章 研发规范 本章将为读者解读一份研发规范.为了更好地协同工作和确保所开发的应用尽可能的稳定.高效,建立一套数据库相关的研发规范是很有必要的,虽然研发规范的确立和推广是一项很耗时的工作,但所取得的 ...

  5. 3、详解 ESLint 规则 转自https://blog.csdn.net/bbsyi/article/details/88816637

    什么是 ESLint ? ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误.在许多方面,它和 JSLint.JSHi ...

  6. 充值css样式

    @charset "utf-8"; /*reset CSS*/ body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,le ...

  7. Heap(堆)与Stack(栈)的区别详解

    在了解堆与栈之前,我们想来了解下程序的内存分配 一个编译的程序占用的内存分为以下几个部分  :  1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其    ...

  8. 安装CDH5.11.2集群

    master  192.168.1.30 saver1  192.168.1.40 saver2  192.168.1.50 首先,时间同步 然后,ssh互通 接下来开始: 1.安装MySQL5.6. ...

  9. Win7系统不能拖动文件夹的问题怎么解决?

    一般情况下,如果我们想要在电脑中移动文件夹,可以采用剪切复制粘贴或者按住鼠标左键拖动的方式来实现,但有些Win7系统用户反映文件夹会出现不能移动的情况,这是怎么回事呢?下面好系统U盘启动就为大家介绍一 ...

  10. STM32写选项字节(option bytes)的正确姿势

    STM32 的 Flash information block 部分,包含有特殊的选项字节,可以用于系统配置等信息, 其中还有两个有效字节(实际四个字节,两个是校验字节)的用户自定义数据字节. 在尝试 ...