Oracle笔记(三)

原创 2015年11月18日 12:48:26


SELECT语句(11/16)
列的别名
当我们使用SELECT子句中查询内容不是直接使用字段的名字,而是表达式或者一个函数。这时候在查询出来的结果集中该列的名字就是这个函数或者表达式,可读性差,为此我们为当前列添加别名,这样结果集中当前列的名字就是该别名。
别名中若希望区分大小写或者有空格时可以使用双引号扩起来。
在使用子查询时,通常要求含有表达式,函数的字段必须加别名。

SELECT ename,SAL,job FROM emp_tzm WHERE SAL >1000 AND job='SALESMAN'
SELECT ename,sal,job FROM emp_tzm WHERE sal between 1000 and 1500
SELECT ename,sal,job FROM emp_tzm WHERE sal <> 1250

SELECT ename,sal,job FROM emp_tzm WHERE (sal>1250) AND (job = 'CLERK' OR JOB = 'SALESMAN')

OR的优先级低于AND,所以若需要提高优先级,可以使用括号来提高


模糊查询 LIKE

LIKE:用于对字符串进行模糊匹配。
支持两个通配符
% :任意一个字符
_ :一个字符

姓名的第二个字符为A
SELECT ename,sal,job FROM emp_tzm WHERE ename LIKE '_A%'
SELECT  floor (AVG(sal),2) AVG,SUM(sal) SUM FROM emp_tzm


IN 只要包含任意一个
SELECT ename,sal,job FROM emp_tzm WHERE JOB IN ('MANAGER','CLERK')

IN (list):判断等于列表中任何一项即可常用与判断子查询的结果,这种情况下是不能用OR代替的

NOT IN 则是判断不在列表中

ANY(list) 与 ALL(list)
当需要判断诸如>,>=,<,<=多个值时,要配合ANY和ALL使用。
>ANY:大于列表中最小的即可
>ALL:大于列表中最大的
<ANY小于列表中最大的
<ALL 小于列表中最小的

通常是为判断子查询结果使用,列表很少直接给定几个固定值


WHERE子句可以使用函数或者表达式的结果作为过滤条件。
SELECT ename ,sal,job FROM emp WHERE ename = UPPER('rose');

DISTINCT  关键字必须紧跟在SELECT关键字之后。

查看公司总共有多少种职位

SELECT DISTINCT job FROM emp_tzm

DISTINCT对多个字段去重,不能保证结果集中某一个字段没有重复值。作用是保证这几个字段值的组合没有重复的

SELECT DISTINCT job,deptno FROM emp

ODER BY 排序结果集,可以按照给定的字段的值进行“升序或者降序排列。

ODER BY 执行的顺序是先进行SELECT 查询数据,然后再对查询出来的结果集按照给定的字段进行的排序。
所以oder by 子句必须写在SELECT语句的最后

DESC:降序
ASC:升序,默认就是升序,所以asc不写

ODER BY 也可以按照多个字段排序
每个字段都可以分别指定升降序。
排序存在优先级,先按照第一个字段的排序规则进行排序,当第一个字段的值一样的记录,才会按照第二个字段的排序规则进行排序,依次类推。



聚合函数:忽略null值
又名多行函数,分组函数


MIN MAX (最小 最大)
AVG(平均) SUM

SELECT CEIL(AVG(nvl(COMM,0))) AVG,SUM(COMM) SUM FROM emp_tzm

COUNT() 函数
用来统计指定字段非NULL的记录总共多少条,并不关心字段具体取值。

查看公司总共多少人

SELECT COUNT(ename) FROM emp_tzm(忽略null值)

通常做法是

SELECT COUNT(*) FROM emp_tzm



GROUP BY 子句
GROUP BY 子句可以根据指定的字段值相同的记录进行分组,然后然后配合组函数进行更新至的统计工作

查看每个部门的最高最低工资?

SELECT MAX(sal),MIN(sal) FROM emp_tzm GROUP BY(deptno)



当SELECT子句中出现了聚合函数,那么凡不再聚合函数中的其他字段必须出现在GROUP BY 子句中,反之则不是必须的。


根据多个字段分组,则是按照这几个字段值组合一样的看作一组:
列出同部门同职位的员工的最高工资

***** ** **    ** ********************************************************

SELECT round(AVG(sal),2) FROM emp_tzm GROUP BY deptno HAVING AVG(sal)>2000

HAVING AVG(sal)>2000

HAVING 不能独立存在,必须跟在GROUP BY 子句之后
用于进行分组统计后进行过滤使用
与WHERE的区别:
WHERE是第一次差表的时候进行过滤,只有满足WHERE要求的记录才会被查询出来,
而HAVING是在查询出的数据基础上进行了分组统计后得到的结果进行过滤。所以WHERE先进行的过滤,HAVING 后进行

HAVING 中并非SELECT中查询什么,才可以用于过滤

查看平均工资高于2000的部门的最高工资与最低工资

SELECT MAX(sal),MIN(sal),deptno FROM emp_tzm GROUP BY deptno HAVING AVG(sal)>2000;


CREATE TABLE emp_tzm AS SELECT * FROM emp

多表关联查询

多表关联查询中连接条件是十分重要的,他能告知数据库在表与表的数据之间如何进行连线找到对应关系,从而查询数据


查看sales部门员工的姓名?

SELECT ename FROM emp_tzm,dept_tzm
WHERE (emp_tzm.deptno = dept_tzm.deptno )
AND dept_tzm.dname = 'SALES';

当查询的字段在联合查询的表中均有出现,那么必须明确指定从那张表上取该字段的值。
可以为表添加别名,然后使用别名来代替表名指定字段。

N张表查询至少要有N-1个连接条件,否则会出现笛卡尔积

笛卡尔积,结果集的条数是参与表的记录总数乘机的结果。是个无用的结果集,消耗资源巨大,要避免出现。


在达拉斯工作的人都有谁,工资多少

SELECT e.ename,e.sal,d.loc FROM emp_tzm e,dept_tzm d WHERE (e.deptno = d.deptno )
AND d.loc = 'DALLAS';


使用内连接实现关联查询:
内连接使用JOIN来连接表,在ON子句中填写连接条件,相对传统的关联查询语句而言,是将连接条件与过滤条件分开在不同的地方书写,语句表达更清晰


SELECT e.ename ,d.dname,e.sal FROM emp_tzm e JOIN dept_tzm d on e.deptno = d.deptno WHERE d.dname = 'SALES'

scott没有被查询出来,原因是scott不满足连接条件,其部门编号是50,dept表中没有部门号是50的记录。
SELECT e.ename ,e.job,e.sal,e.deptno ,d.dname FROM emp_tzm e JOIN dept_tzm d on e.deptno = d.deptno


外连接

当需要满足不同条件的记录也在关联查询中显示出来时,需要使用外连接。

外连接分为左外连接,右外连接,全外连接。

左外连接:以JOIN左侧的表为驱动表(显示所有数据的表),来自右面表中的字段当不满足连接条件时,全部为null

SELECT e.ename ,e.job,e.sal,e.deptno ,d.dname FROM emp_tzm e RIGHT|LEFT|FULL OUTER JOIN dept_tzm d ON e.deptno = d.deptno


 
自连接:
自连接的设计是指自己表与自己表有一个关联关系,意思是:自己表的一条记录可以对应子集表的多条记录。这样的设计往往是用于保存同样类型的数据。但是又存在父子级(上下级)关系的树状结构
员工和上司
SELECT e.ename ,m.ename FROM emp_tzm e ,emp_tzm m where e.mgr = m.empno(+)

king的下属都有谁
SELECT e.ename  FROM emp_tzm e ,emp_tzm m where (e.mgr = m.empno(+)) and m.ename = 'KING'

Oracle数据库学习笔记 三

  • 2010年03月12日 11:30
  • 208KB
  • 下载

Oracle 11g数据库学习笔记三

  • 2014年05月30日 22:01
  • 52KB
  • 下载

Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据

1.下载Hibernate-middlegen 打开http://sourceforge.net/projects/hibernate/files/ 下载 Middlegen-Hibernat...

Oracle学习笔记(三)

一、group by 分组 1.计算员工分布在哪几个部门 select distinct deptno from emp 2.有几个部门有员工 select count(distinct ...

Oracle学习笔记(三)——Hash连接

哈希链接 在上一篇学习笔记二中对Nested Loop Join进行了讨论,通过多次测试得出了嵌套循环链接具有以下特点: 嵌套循环有驱动表和被驱动表的概念,驱动顺序不同执行计划差异非常大驱...
  • biww620
  • biww620
  • 2017年06月27日 23:56
  • 43

Oracle学习笔记三 --- 用户管理

由于看书和看文字教程有点不够系统,网上找了一下,决定看韩顺平老师的视频,顺便做一下笔记 oracle默认用户scott Oracle10g安装后默认scott被锁定 解锁: 1、登陆管理员权限...

Oracle 学习笔记(三)

约束: 定义规则,确保数据完整性、规范性 1、非空约束 注意:非空约束尽可以列级添加,不可表级添加 在创建表时添加非空约束 create table table_name (column1 datat...

Oracle11g学习笔记三

*注:此笔记为个人在学习Oracle时从教学视频、参考书上摘录整理而成,纯手打完成,如需转载麻烦表明出处,附上连接(http://blog.csdn.net/sherkyoung/article/de...

Oracle学习笔记之三字符型及处理方法

与其他编程语言一样,Oracle中同样存在着数据类型。Oracle中的数据类型主要有两个应用场景:一是用于指定数据表中列的类型;二是用于PL/SQL编程中声明变量。Oracle的数据类型主要包括:字符...

Oracle PL/SQL 学习笔记(三)

3.PL/SQL基础 3.1PL/SQL块简介 块(BLOCK)是PL/SQL的基本程序单元,编写PL/SQL程序就是编写PL/SQL块。 3.1.1PL/SQL块结构 PL/SQL由3个部分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle笔记(三)
举报原因:
原因补充:

(最多只允许输入30个字)