Oracle常用sql语句(二)之组函数、多表查询

简介: DML(数据操纵语言)INSERT 、UPDATE、 DELETE插入操作:INSERT: 语法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…); 注意:列名与列值的类型、个数、顺序要一一对应。

DML(数据操纵语言)

INSERT 、UPDATE、 DELETE

插入操作:INSERT:
语法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…);

注意:列名与列值的类型、个数、顺序要一一对应。
   可以把列名当做java中的形参,把列值当做实参。
   值不要超出列定义的长度。
   如果插入空值,请使用null
   插入的日期和字符一样,都使用引号括起来。

修改操作 UPDATE:
  语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 …….. WHERE 列名=值

删除操作 DELETE:
语法 : DELETE FROM 表名 【WHERE 列名=值】

注意:where语句可以不写
   DELETE :删除表中的数据,表结构还在;删除后的数据可以找回。
   TRUNCATE :删除是把表直接DROP掉,然后再创建一个同样的新表。
   删除的数据不能找回。执行速度比DELETE快。

DQL(数据查询语言)

 查询表中的所有数据

 语法: SELECT 列名 FROM表名
    [WHERE –> GROUP BY –>HAVING–> ORDER BY]

语法:

  SELECT selection_list /*要查询的列名称*/
  FROM table_list /*要查询的表名称*/
  WHERE condition /*行条件*/
  GROUP BY grouping_columns /*对结果分组*/
  HAVING condition /*分组后的行条件*/
  ORDER BY sorting_columns /*对结果分组*/
  LIMIT offset_start, row_count /*结果限定*/

  DML是对表中的数据进行增、删、改的操作。不要与DDL(数据定义语言)混淆了。
  查询代码的书写顺序和执行顺序

 查询语句书写顺序:select – from- where- group by- having- order by-limit
 查询语句执行顺序:from -> where  --> group by  --> having --> select --> order by --> limit

注:其中WHERE 语句执行顺序是从右到左

### 组函数(多行函数,分组函数) ###

  注:组函数会自动忽略空值,NVL函数使分组函数无法忽略空值

  • AVG(expr) 求平均值

  • COUNT([DISTINCT] expr) 统计行数,当expr=*时,所有的行数,expr=COLUMN时会自动过滤对应列的空值的行数
    DISTINCT 去掉重复行

  • MAX(expr) 求最大值

  • MIN(expr) 求最小

  • SUM(expr) 求和

分组函数(GROUP BY)

  注:SELECT 中的列不在组函数中就必须在 GROUP BY 中
    多个列的分组:先按照第一个列分组,如果相同,再第二个列分组,依次类推

SELECT
    deptno,
    job,
    AVG( sal ) 
FROM
    emp 
GROUP BY
    deptno,
    job;

Oracle的增强GROUP BY:用于做财务报表

break on deptno skip 2
– 部门号只显示一个,不同的部门号跳过2行

break on null 关闭设置

GROUP BY ROLLUP(a,b) 增强分组

例子

SELECT
    deptno,
    job,
    SUM( sal ) 
FROM
    emp 
GROUP BY
    ROLLUP (
    deptno,
    job)

上面代码相当于下面几个分组函数的和

SELECT
    deptno,
    job,
    SUM( sal ) 
FROM
    emp 
GROUP BY
    deptno,
    job;
+
SELECT
    deptno,
    SUM( sal ) 
FROM
    emp 
GROUP BY
    deptno,
    job;
+
SELECT
SUM( sal ) 
FROM
    emp 
GROUP BY
    deptno,
    job 

即:

GROUP BY a,b  +  GROUP BY a + 没有GROUP BY

过滤分组(HAVING)

  注:不能再WHERE子句中使用组函数
    可以在HAVING 子句中使用组函数,尽量使用WHERE

SELECT
    deptno,
    job,
    AVG( sal ) 
FROM
    emp 
GROUP BY
    deptno,
    job
HAVING AVG(sal)>300;

多表查询

  • 连接类型
  • 等值连接
  • 不等值连接
  • 外连接
  • 自连接

左外连接:当条件不成立的时候,等号左边的表依然包含在最后的结果中

写法:

WHERE e.deptno=d.deptno(+) 或者FROM emp e right outer join dept d on e.deptno=d.deptno

右外连接:当条件不成立的时候,等号右边的表依然包含在最后的结果中

写法:

WHERE e.deptno(+)=d.deptno 或者FROM emp e left outer join dept d on e.deptno=d.deptno

例子

按部门号查询部门号,部门名称,人数

SELECT d.deptno 部门号,d.dname 名称,COUNT(e.empno) 人数
FROM emp e ,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname

SELECT d.deptno 部门号,d.dname 名称,COUNT(e.empno) 人数
FROM emp e right outer join dept d
on e.deptno=d.deptno
GROUP BY d.deptno,d.dname

自连接: 通过表的别名,将同一张表视为多张表
注:自连接不适合操作大表

-- 查询员工信息: 员工姓名 老板名

SELECT e1.empno,e1.ename 员工,e2.empno,e2.ename 老板 
FROM emp e1 left outer join emp e2
on e1.mgr=e2.empno

SELECT e1.empno,e1.ename 员工,e2.empno,e2.ename 老板 
FROM emp e1 , emp e2
WHERE e1.mgr=e2.empno(+)

 层次查询

实质是单表查询
  在层次查询中Oracle为我们提供了伪列 leval
  
上面的自连接问题:
  查询员工信息: 员工姓名 老板名

SELECT LEVEL ,empno, ename,mgr
FROM emp
CONNECT BY PRIOR empno=mgr
START WITH mgr IS NULL;
相关文章
|
1月前
|
SQL Oracle 关系型数据库
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
本文介绍了多种SQL内置函数,包括单行函数、非空判断函数、日期函数和正则表达式相关函数。每种函数都有详细的参数说明和使用示例,帮助读者更好地理解和应用这些函数。文章强调了字符串操作、数值处理、日期计算和正则表达式的使用方法,并提供了丰富的示例代码。作者建议读者通过自测来巩固学习成果。
20 1
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
|
2月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
2月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
2月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
2月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
70 3
|
2月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
64 1
|
2月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
|
3月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
4月前
|
SQL 数据处理 数据库

推荐镜像

更多