oracle笔记2

1.       空值null

如果一个数据行的某个特定的列缺少数据值,那么这种值叫做null,或者说是包含空值,

空值是指一种无效的,未赋值,未知的或者不可用的值。

空值不同于零或者空格

Select ename , job , sal , comm. From emp;

任何包含空值的算术表达式运算后的结果都为空值null

Select ename , sal , comm , 12 * sal  b from emp;

2.       限定被选择的数据行(where

使用where 子句限定返回的数据行(过滤记录)

Select ename, job, deptno from emp where job=’CLERK’;

注意:字符串和日期类型数值都要用单引号引起来

      单引号中的数值区分大小写

      日期型数值是区分日期表达形式的

      默认的日期形式是DD-MON-YY(第三方数据的默认格式和oracle数据库的默认格式是不一样的,这个是oracle数据库的默认格式)

3.       比较操作符

Select ename, sal, comm from emp where sal <= comm;

比较操作符两边的数值数据类型必须一致。

1.       逻辑运算符

AND

OR

NOT

优先级:非〉与〉或

 

1.       其他比较运算符

Between…and…    两个值之间

IN(list)            和多个值任何一个匹配

LIKE              字形匹配

IS NULL           是空值

使用like运算符:

使用like来执行字符串通配符查找

查找条件可以包含字符串和数字:

-%表示零或任意更多的字符

-_代表一个字符

例:select ename from emp where ename like ‘S%’;(表示ename是以大写’S’开头的)

    select ename from emp where ename like '_A%';(表示ename是以任意字符开头的第二个字符是大写’A’的值)

6.等价连接(等值连接)

SQLselect emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc

  2  from emp, dept

  3  where emp.deptno = dept.deptno;

  执行过程:先从emp表中取出一个deptno然后和dept表中的deptno比较,如果比较结果相同,就将dept表中的对应的这行记录连接到emp表对应的行后面,然后再执行select操作。

 

注意:在用到多个表时使用表名作前缀来限定列;

    通过使用表前缀可以提高性能

通过表名.列名来select

 6. 不等价连接(等值连接)

SQL> select e.ename,e.sal,s.grade

     2  from emp e , salgrade s

  3  where e.sal between s.losal and s.hisal;

 

7.       组函数

Oracle常用组函数:

--AVG 平均值

--Count 统计

--Max 最大值

--Min 最小值

--Sum 合计

AVGSUM用法:

SQL> select AVG(sal),SUM(sal)

  2  from emp

  3  where job like 'SALES%';

MaxMin的用法

SQL> select min(hiredate),max(hiredate)

  2  from emp

  3  ;

COUNT的用法:

SQL> select count(*)/*这里可以用count(*),效率低,也可以用count(列名)*/

  2  from emp

  3  where deptno=30;

8.       Group By子句

SQL> select    列名,组函数(列名)

  2  from      表名

  3  [where    条件]

  4  [Group By 分组列]

  5  [Group By 分组列]

组函数忽略空值,可以使用NVLNVL2COALESCE函数处理空值

求每个部门的总工资:

SQL> select deptno, sum(sal)

  2  from emp

  3  group by deptno;

 

DEPTNO   SUM(SAL)

------ ----------

    30       9400

    20      10875

    10       8750

相同职位且经理相同的员工平均工资。

SQL> select job, mgr, avg(sal)

  2  from emp

  3  group by job,mgr

  4  order by job;

 

JOB         MGR   AVG(SAL)

--------- ----- ----------

ANALYST    7566       3000

CLERK      7698        950

CLERK      7782       1300

CLERK      7788       1100

CLERK      7902        800

MANAGER    7839 2758.33333

PRESIDENT             5000

SALESMAN   7698       1400

Group by子句注意问题:

--group by 子句后的列可以不在select语句中出现

--select字居中出现的非分组函数列必须在group by子句中出现

查询公司每个职位的平均工资,职位列不显示,同时结果按照平均工资排序

 

9.HAVING子句

    部门员工工资最高大于3000的部门(组函数筛选事例):

    SQL> select deptno,max(sal)

  2  from emp

  3  group by deptno

  4  having max(sal)>=3000;

 

DEPTNO   MAX(SAL)

------ ----------

    20       3000

10       5000

错误的写法:

SQL> select deptno,max(sal)

  2  from emp

  3  where max(sal)>=3000

  4  group by deptno;

提示出错信息:where后不允许使用分组函数

Having不能直接使用,只能和group by一起使用,但是group by可以单独使用

 

 

10.总结select语句执行过程:

--通过from子句找到需要查询的表;

--通过where子句进行非分组函数筛选判断;

--通过group by子句完成分组操作;

--通过having子句完成组函数筛选判断;

--通过select子句选择现实的列或表达式及组函数;

--通过order by子句进行排序操作。

 

11.练习

1.查询部门平均工资在2000元以上的部门名称及平均工资:

SQL> select emp.deptno,dept.dname,avg(sal)

  2  from emp,dept

  3  where dept.deptno=emp.deptno

  4  group by emp.deptno,dept.dname

  5  having avg(sal)>=2000;

 

DEPTNO DNAME            AVG(SAL)

------ -------------- ----------

    10 ACCOUNTING     2916.66666

20 RESEARCH             2175

2.查询部门人数在4人以上的部门的部门名称及最低工资和最高工资:

SQL> select dept.dname,min(sal),max(sal)

  2  from emp,dept

  3  where emp.deptno = dept.deptno

  4  group by dept.dname

  5  having count(empno)>4;

 

DNAME            MIN(SAL)   MAX(SAL)

-------------- ---------- ----------

RESEARCH              800       3000

SALES                 950       2850

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
孟老师 oracle笔记中记录了他在学习和应用Oracle数据库管理系统过程中的重要知识点和经验总结。这些笔记对他个人来说是非常宝贵的学习工具,并且也可以分享给其他学习者。 首先,孟老师的笔记内容包括了Oracle数据库的概述和架构。他对Oracle数据库系统的组成部分、存储结构、进程和线程等进行了详细的介绍。这使得他自己能够更好地理解Oracle数据库的运行原理,从而能够更好地进行数据库管理和优化。 其次,他的笔记中也包含了Oracle数据库的安装和配置过程。他记录了安装过程中可能遇到的问题和解决方法,还有如何正确配置数据库参数以满足具体的需求。这部分内容非常实用,它可以帮助他在以后的实际应用中更加高效地进行数据库的部署和配置。 此外,孟老师还记录了Oracle数据库的备份和恢复策略。他介绍了不同的备份方法,如完全备份、增量备份和重写备份,并指出了每种备份方法的适用场景。在笔记中,他还总结了一些关键的恢复指令和技巧,以便在意外故障发生时能够及时应对。 最后,他还在笔记中分享了一些常见问题和实践经验。这些问题和经验既包括技术层面的,如如何提高数据库性能和调优查询语句,也包括管理层面的,如如何规划数据库用户和权限管理。这些实践经验对于其他Oracle学习者来说是非常宝贵的参考资料。 总体来说,孟老师的Oracle笔记是一个非常有用的学习资源。它不仅记录了他个人的学习过程和经验总结,也为其他学习者提供了重要的参考和指导,帮助他们更好地理解和应用Oracle数据库管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值