`
xiaotao.2010
  • 浏览: 216896 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle查询语句

 
阅读更多
一、Oracle学习查询语句的笔记

在Oracle 中是对大小写 敏感的 也就是区分大小写

|| 连接or 或者

and 和、 并且

where 条件

between ..最小值 and 最大值(这个关键字包含等于)

in 字段 in(值1,值2,值3…值n)

or 关键字 例子—-select * from emp where (deptno=10 and job =’MANAGER’) or (deptno=20 and job=’CLERK’);

distinct去掉重复的

like |模糊查询(注意使用通配符的问题 ) 可以在任何地方应用

|主要的通配符有

|···|“%”:可以匹配任意长度的内容

|···|“_”:可以匹配一个长度的内同

例如

select * from emp where ename like ‘%M%’;

<> 不等号

#######基本查询语句结束#######接下来是排序#######

Ordre by 排序:asc升序(默认的) desc:降序 *放在sql语句的最后

#######排序结束#######接下来是函数#######

一、字符函数

upper() 小写字母变大写 ·select upper(‘smith’) from dual; 必须 加上from

·select * from emp where ename =upper(‘smith’);

lower() 大写字母变小写 ·select lower(‘HELLO WORLD’) from dual;

initcap() 开头字母大写 ·select initcap(‘HELLO WORLD’) from dual;

·select initcap(ename) from emp;

*字符串除了可以使用||来连接。 还可以使用concat();函数来进行连接

·select concat(‘hellow’,'world’) from dual;

可以进行字符串截取,求字符串长度。进行指定内容替换

·字符串截取:substr(); substr 的截取点是从0或者是1效果都是一样的(Oracle)

Oracle 中 可以输入负值 来倒着截取。

·select ename ,substr(ename,-3,3) from emp;

·字符串长度:length();

·内容替换: replace();

_________________范例_______________

select substr(‘hello’,1,3) 截取字符串,

length(‘hello’) 字符串长度,

replace(‘hello’,'l’,'x’) 字符串替换

from dual;

________________________________________

二、数值函数

·四舍五入 :round(); 可以指定四舍五入位数select round(789.546,-2) from dual;

负值对整数进行操作。 正值是小数

·截断小数位 :trunc();

·取余(取模):mod

三、日期函数

·日期-数字=日期

·日期+数字=日期

·日期-日期=数字(天数)

·months_between();求出指定日期范围的月数

·add_months();在制定日期加上制定的月数,求出之后的日期

·next_day();下一个的今天是哪一个日期

·last_day();求出给定日期的月最后一天的日期

当前日期 sysdate关键字 范例: select sysdate from dual;

四、转换函数

·to_char(): 转换成字符串

·通配符:·年:yyyy

·月:mm

·日:dd

·to_number(): 转换成数字

·to_date(): 转换成日期

五、通用函数

·nvl(字段,0) 如果字段里面的值是空 就按照0显示

__________________________范例__________________________

select empno,ename,(nvl(sal,0)+nvl(comm,0))*12 from emp;

________________________________________________________

·decode 类似if(){}else{}

__________________________范例_________________________________

1·select decode(1,1,’内容是1′,2,’内容是2′,3,’内容是3′) from dual;

2·select empno 编号, ename 姓名 , HIREDATE 日期,decode

(

job,’CLERK’,'业务员’,'SALESMAN’,'销售经理’,

‘MANAGER’,'经理’,'ANALYST’,'分析员’,

‘PRESIDENT’,'总裁’

) 职业

from emp;

_______________________________________________________________

#######函数结束#######接下来是多表查询#######

1·基础语句

*在使用多表查询的时候会出现笛卡尔积,如果表的数据越多,那么笛卡尔积也就会越大。

比如一张表有1W条记录,就有1W的五次方条记录。(出现的原因是有关联字段)

*在多表查询的时候加入where语句,就能消除笛卡尔积。

一般会为表取别名 别名范例: select * from emp e ,dept d where e.deptno=d.deptno;

***范例(难题)**

问题:求出雇员姓名,工资,部门名称,工资等级,上级领导名字,领导的工资,领导的工资等级。

__________________________________________________________________________________________

select e.ename 雇员姓名,e.sal 工资,d.dname 部门名称,

decode(s.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’) 工资等级,

m.ename 上级领导名字,m.sal 领导的工资,

decode(ms.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’)领导的工资等级

from emp e, dept d ,salgrade s ,emp m,salgrade ms

where e.deptno =d.deptno and

e.sal between s.losal and s.hisal

and e.mgr=m.empno

and m.sal between ms.losal and ms.hisal;

__________________________________________________________________________________________

*注意*

有一个人没有上级领导,查不出,因为什么呢?因为所有人的最上层x领导是他!

2·左右连接

去除笛卡尔积的时候会让某些字段不被查出。需要使用左右连接((+)用这个符号)

例如select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno(+)=d.deptno;

表示右连接,以右边的表为准,证明:(+)在左边表示右连接,反之左连接。默认左连接

3·sql1999语法支持(了解即可)

·cross join : 交叉连接==>产生笛卡尔积

·natural join: 自然连接==>消除笛卡尔积

·using 字句: 直接关联操作列

_________________________范例_________________________________

·select * from emp e join dept d using(deptno) where deptno=30;

on是自己定义条件·select * from emp e join dept d on(e.deptno=d.deptno) where e.deptno=30;

__________________其结果都是一样的____________________________

·左右连接(左右外连接)

·left join

·right join

#######多表查询结束#######接下来是组函数及分组统计#######

*!重点!*

1·组函数

·count(): 记录数

·max(): 最大值\

>不能用在字符串

·min(): 最小值/

·avg(): 平均值

·sum(): 总和

2·分组统计

group by 分组条件

__________________________范例_________________________

·select deptno,count(empno) from emp group by deptno;

·select deptno,avg(sal) from emp group by deptno;

_______________________________________________________

错误:_______________________________________________________

1、使用了分组函数,有两种情况

·使用了group by 并指定了分组条件 会将分组条件一起查询出来

·没使用分组,就只能单独使用分组函数。

2、在使用分组函数的时候,不能出现分组函数和分组条之外的字段

select d.dname ,count(e.empno) from dept d ,emp e

where d.deptno=e.deptno

group by d.dname;

_______________________________________________________

select max(avg(sal))

from emp

group by deptno;

_______________________________________________________

*!注意!*:分组函数值能在分组中使用不能在where中使用,要使用 having 关键字

_____________________范例______________________________

select deptno,avg(sal)

from emp

group by deptno having avg(sal)>2000;

_______________________________________________________

#######接下来是多表查询######接下来是子查询########

子查询是指,在以个查询的内部还包括另外一个查询。

*!注意!*:所有子查询都要在()中编写

子查询分为以下三类:

·单列子查询:返回结果是一个列的一个内容

·单行子查询,返回多个列,有可能是一条完整的记录

·多行子查询,返回多条记录

________________________范例__________________________________________

–select * from emp where sal>(select sal from emp where empno=7654)

and job=(select job fromemp where empno=7788);

—————————————————-

select d.dname,ed.c,ed.a,e.ename

from dept d ,

(select deptno,count(empno) c, avg(sal)a,min(sal)min

from emp

group by deptno) ed ,emp e

where

d.deptno=ed.deptno and e.sal =ed.min;

______________________________________________________________________

子查询三种符号:

·in :指定一个查询范围

·any :有三种情况 ,大于小于等于

·=any相当于in

·>any比里面最小的值要大。

·all比最大的值要大。

·1500;-工资大于1500

– 能领取奖金的

–select * from emp where COMM is not null;

–能领取奖金的工资大于1500的人

–select * from emp where COMM is not null and sal>1500;

–能领取奖金或者工资大于1500的人

–select * from emp where COMM is not null or sal>1500;

–括号能表示一组条件

–select * from emp where not (sal >1500 and COMM is not null);

–select * from emp where sal >=1500 and sal <=3000;

–select * from emp where sal between 1500 and 3000;

–1981年1月1日到1981年12月31日的员工

–select * from emp where HIREDATE between ’01-1月 -81′ and ’31-12月 -81′;

–select * from emp where ename= ‘SMITH’;

–select * from emp where empno=7369 or empno=7499 or empno =7521;se

–select * from emp where empno in(7369,7499,7521);

–select * from emp where empno not in(7369,7499,7521);

–select * from emp where ename in(‘SMITH’,'ALLEN’,'KING’) and COMM is not null;

–select * from emp where ename like ‘%M%’ ;

–select * from emp where HIREDATE like ‘%81′;

–<>不等号 查询编号不是7369的雇员

–selec t * from emp where empno<>7369;

select * from emp where empno!=7369;

–工资由低到高

–select * from emp order by SAL ;

–降序

–select * from emp order by SAL desc ;

–select * from emp where DEPTNO=10 order by SAL desc ,HIREDATE asc;

######################查询及排序语句结束###########################

##########函数开始###########

–select upper(‘smith’) from dual;

–select * from emp where ename =upper(‘smith’);

–select lower(‘HELLO WORLD’) from dual;

–select initcap(‘HELLO WORLD’) from dual;

–select initcap(ename) from emp;

–select concat(‘hellow’,'world’) from dual;

/*select substr(‘hello’,0,3) 截取字符串,

length(‘hello’) 字符串长度,

replace(‘hello’,'l’,'x’) 字符串替换

from dual;

*/

–显示雇员姓名及姓名后三个字符

–select ename ,substr(ename,length(ename)-2) from emp;

–select ename ,substr(ename,-3,3) from emp;

–select round(789.546,-2) from dual;

–select trunc(789.536,2) from dual;

–select mod(10,3) 十除三的模 from dual;

–求当前日期 使用sysdate

–select sysdate from dual;

–select empno,ename,round((sysdate-HIREDATE)/7) 星期数 from emp;

–select empno,ename,round(months_between(sysdate,HIREDATE)) from emp;

–select add_months(sysdate ,4) from emp;

–select next_day(sysdate,’星期二’) from dual;

–select last_day(sysdate) from dual;

/*

select empno,ename,to_char(HIREDATE,’yyyy’) year ,

to_char(HIREDATE,’mm’) month,

to_char(HIREDATE,’dd’) day

from emp;

*/

–select empno, ename,to_char(HIREDATE,’fmyyyy-mm-dd’)日期 from emp;

–select empno ,ename,to_char(sal,’l99,999′) from emp;

–select to_number(’123′)+to_number(’123′) from dual ;

–select to_char(to_date(’2010-3-21′,’yyyy-mm-dd’),’fmyyyy-mm-dd’)from dual;

–select empno,ename,(nvl(sal,0)+nvl(comm,0))*12 from emp;

–select decode(1,1,’内容是1′,2,’内容是2′,3,’内容是3′) from dual;

/*

select empno 编号, ename 姓名 , HIREDATE 日期,decode

(job,’CLERK’,'业务员’,'SALESMAN’,'销售经理’,'MANAGER’,'经理’,'ANALYST’,'分析员’,'PRESIDENT’,'总裁’) 职业

from emp;

##########函数结束###########

##########多表查询开始###########

*/

–select * from emp e ,dept d where e.deptno=d.deptno;

/*

select e.ename 雇员姓名,e.sal 工资,d.dname 部门名称,

decode(s.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’) 工资等级,

m.ename 上级领导名字,m.sal 领导的工资,

decode(ms.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’)领导的工资等级

from emp e, dept d ,salgrade s ,emp m,salgrade ms

where e.deptno =d.deptno and

e.sal between s.losal and s.hisal

and e.mgr=m.empno

and m.sal between ms.losal and ms.hisal;

*/

–select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno(+)=d.deptno;

–select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr=m.empno(+);

–select * from emp natural join dept;

–select * from emp e join dept d using(deptno) ;

–select * from emp e join dept d on(e.deptno=d.deptno) where e.deptno=30;

–select e.ename,d.deptno,d.loc from emp e right outer join dept d on (e.deptno=d.deptno);

##########组函数和分组开始###########

–select deptno,count(empno) from emp group by deptno;

–select deptno,avg(sal) from emp group by deptno;

–select d.dname ,count(e.empno) from dept d ,emp e where d.deptno=e.deptno group by d.dname;

–select ename, deptno,avg(sal) from emp group by deptno;

/*

select deptno,avg(sal)

from emp

group by deptno having avg(sal)>2000;

*/

/*

select job,sum(sal) su

from emp

where job<>‘SALESMAN’

group by job having sum(sal)>5000

order by su;

*/

select max(avg(sal))

from emp

group by deptno;

–select * from emp where sal>(select sal s from emp where empno=7654);

–select * from emp where sal>(select sal from emp where empno=7654) and job=(select job from emp where empno=7788);

–select ename,job,sal from emp where sal = (select min(sal) from emp);

/*

select d.dname,ed.c,ed.a,e.ename

from dept d ,

(select deptno,count(empno) c, avg(sal)a,min(sal)min

from emp

group by deptno) ed ,emp e

where

d.deptno=ed.deptno and e.sal =ed.min;

*/

–select * from emp where sal in (select min(sal) from emp group by deptno);

–select * from emp where sal >any(select min(sal) from emp group by deptno);
分享到:
评论

相关推荐

    常用oracle查询语句

    Oracle 常用查询语句 本文总结了十个常用的 Oracle 查询语句,涵盖了查看表空间、回滚段、控制文件、日志文件、表空间使用情况、数据库对象、数据库版本、数据库创建日期、归档方式、长时间运行的 SQL 语句和数据表...

    经典的ORACLE查询语句教学资料

    本教学资料专注于Oracle查询语句,结合MySQL、JavaSE和Swing的相关知识,旨在帮助学习者深入理解和应用数据库操作。 首先,Oracle SQL是Oracle数据库系统中的数据查询和操纵语言。它允许用户检索、更新、插入和删除...

    Oracle查询语句大全-精华版

    Oracle 查询语句大全-精华版 Oracle 查询语句大全是 Oracle 数据库管理系统中最基本也是最重要的组成部分,用于管理和维护数据库。本文将详细介绍 Oracle 查询语句的使用方法和实践操作。 一、创建用户和授权 在 ...

    oracle 查询语句实例

    Oracle查询语句是数据库管理中不可或缺的部分,尤其在处理复杂数据检索时显得尤为重要。Oracle SQL是一种结构化查询语言,用于与Oracle数据库进行交互。在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的...

    oracle查询语句优化

    Oracle查询语句优化是数据库管理中至关重要的环节,能够显著提升系统性能,减少资源消耗。本文将围绕Oracle查询优化的29个小技巧进行深入探讨。 首先,选择合适的Oracle优化器至关重要。Oracle提供了三种优化器:...

    Oracle学习查询语句

    在Oracle中,查询语句是数据操作的核心,本篇文章将详细讲解Oracle查询语句的一些关键知识点。 首先,Oracle是大小写敏感的,这意味着在编写SQL语句时,需要特别注意变量名、表名和字段名的大小写。在条件表达式中...

    oracle查询语句大全

    根据给定的文件信息,以下是对Oracle查询语句及相关知识点的详细解读: ### Oracle查询语句及性能优化 #### 基本操作 1. **创建用户与密码**: - `CREATE USER username IDENTIFIED BY password;` - 这条语句...

    45个非常有用的 Oracle 查询语句

    45个非常有用的 Oracle 查询语句

    oracle查询语句大全.doc

    Oracle查询语句是数据库管理中不可或缺的部分,它们用于获取、操作和分析存储在数据库中的数据。以下是一些关键的Oracle查询语句和概念: 1. **创建用户**: 使用`CREATE USER`语句创建新的数据库用户,例如:`...

    oracle查询语句大全[定义].pdf

    Oracle查询语句是数据库管理的重要组成部分,特别是在软件开发领域中,熟悉Oracle的SQL语法对于数据库设计、数据管理和分析至关重要。以下是一些Oracle查询语句的关键知识点: 1. 创建用户和授权: `CREATE USER ...

    45 个非常有用的 Oracle 查询语句(1).rar_oracle

    本资源“45 个非常有用的 Oracle 查询语句(1).rar_oracle”显然是一个关于Oracle SQL查询技巧的集合,旨在帮助用户提高在Oracle环境中进行数据查询的效率。以下是对这些查询语句的一些可能内容的详细解读: 1. **...

    Oracle查询语句

    ### Oracle查询语句知识点 #### 一、Oracle简介 Oracle是一种广泛使用的数据库管理系统,由美国甲骨文公司(Oracle Corporation)开发。它以其强大的数据处理能力和丰富的功能在企业级应用中占据重要地位。Oracle...

    oracle查询语句数据横向变纵向

    相关数据 博文链接:https://xiaobo.iteye.com/blog/34099

    Oracle中SQL语句执行效率的查找与解决

    本文将深入探讨Oracle中SQL语句执行效率的查找与解决方法,特别关注于如何识别和优化那些导致性能瓶颈的查询。 ### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常...

    oracle查询死锁语句

    oracle查询死锁语句,并能根据根据ID值杀死锁表的进程!

    Oracle万能查询语句

    ### Oracle万能查询语句详解 #### 一、概述 在Oracle数据库中,查询语句是数据检索的核心工具。本文将详细介绍一个复杂的Oracle查询语句,该语句涉及多个表的连接、序列、存储过程以及多表查询等相关知识点。通过...

    oracle之查询语句

    Oracle查询语句是数据库管理中不可或缺的部分,它用于从Oracle数据库中检索数据。这篇博文将深入探讨Oracle SQL查询语句的基础及其高级用法,帮助读者理解如何高效地使用Oracle进行数据查询。 首先,我们从基础开始...

    查询Oracle通用语句

    经常用的 很简单的 非常好用 很容易的 嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

Global site tag (gtag.js) - Google Analytics