笛卡尔集

笛卡尔集会在下面条件下产生:

  • 省略连接条件
  • 连接条件无效
  • 所有表中的所有行互相连接

l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。

自连接

select m.last_name,m.email,m.salary from employees e,employees m where e.employee_id = m.manager_id and m.last_name='Chen';

自己和自己连接,将一张表分为两张表查询使用

非等值连接

SELECT e.last_name, e.salary, j.grade_level

FROM   employees e, job_grades j

WHERE  e.salary

       BETWEEN j.lowest_sal AND j.highest_sal;

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外联接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部链接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).

左外连接

select last_name,department_name from employees,departments

where employees.department_id = departments.department_id(+)

右外连接

select last_name,department_name from employees,departments

where employees.department_id(+) = departments.department_id

表的别名

l  使用别名可以简化查询。

l  使用表名前缀可以提高执行效率。

使用SQL: 1999 语法连接

使用连接从多个表中查询数据:

SELECT     table1.column, table2.column

FROM       table1

[CROSS JOIN table2] |

[NATURAL JOIN table2] |

[JOIN table2 USING (column_name)] |

[JOIN table2

  ON(table1.column_name = table2.column_name)] |

[LEFT|RIGHT|FULL OUTER JOIN table2

  ON (table1.column_name = table2.column_name)];

叉集

l  使用CROSS JOIN 子句使连接的表产生叉集。

l  叉集和笛卡尔集是相同的。

SELECT last_name, department_name

FROM   employees

CROSS JOIN departments ;

自然连接

l  NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接

l  在表中查询满足等值条件的数据。

l  如果只是列名相同而数据类型不同,则会产生错误。

SELECT department_id, department_name,

       location_id, city

FROM   departments

NATURAL JOIN locations ;两张表都有location_id字段

使用 USING 子句创建连接

l  在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列

l  使用 USING 可以在有多个列满足条件时进行选择。

不要给选中的列中加上表名前缀或别名

NATURAL JOIN 和 USING 子句经常同时使用

SELECT e.employee_id, e.last_name, d.location_id

FROM   employees e JOIN departments d

USING (department_id) ;

SQL: 1999外连接

左外连接

SELECT e.last_name, e.department_id, d.department_name

FROM   employees e

LEFT OUTER JOIN departments d

ON   (e.department_id = d.department_id) ;

右外联接

SELECT e.last_name, e.department_id, d.department_name

FROM   employees e

RIGHT OUTER JOIN departments d

ON    (e.department_id = d.department_id)

满外联接

SELECT e.last_name, e.department_id, d.department_name

FROM   employees e

FULL OUTER JOIN departments d

ON   (e.department_id = d.department_id) ;

内连接

SELECT e.employee_id, e.last_name, e.department_id,

       d.department_id, d.location_id

FROM   employees e JOIN departments d

ON     (e.department_id = d.department_id);

 

分组函数

COUNT(计数)函数

l  COUNT(expr) 返回 expr不为空的记录总数

SELECT COUNT(commission_pct)

FROM   employees

WHERE  department_id = 80;

组函数与空值

组函数忽略空值

SELECT AVG(commission_pct)

FROM   employees;

在组函数中使用NVL函数

NVL函数使分组函数无法忽略空值

SELECT AVG(NVL(commission_pct, 0))

FROM   employees;

oracle 10g 学习之多表查询、分组函数(6)的更多相关文章

  1. Oracle中把一张表查询结果插入到另一张表中

      1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...

  2. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  3. Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

  4. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  5. oracle 10g 学习之视图、序列、索引、同义词(9)

    目标 通过本章学习,您将可以: l  描述视图 l  创建和修改视图的定义,删除视图 l  从视图中查询数据 l  通过视图插入, 修改和删除数据 l  使用“Top-N” 分析 l  创建, 维护, ...

  6. oracle系列笔记(2)---多表查询

    多表查询     这篇文章主要讲四点: (1)oracle多表查询    (2)SQL99标准的连接查询   (3)子查询     (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...

  7. Django 学习 之ORM聚合查询分组查询与F查询与Q查询

    一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...

  8. oracle 10g 学习之oracle管理(3)

    怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...

  9. MySQL学习9 - 单表查询

    一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...

随机推荐

  1. 织梦DedeCMS调用二级子栏目或者多级栏目解决方法

    本文是关于织梦DedeCMS调用多级子栏目的,拿来测试分享下.DEDECMS v5.7,后台已建栏目目录,如下图1所示: 图1 DEDECMS后台栏目结构 现在,我们先来调用顶级栏目"站长新 ...

  2. SQL注入小结

    分类学习有利于条理化知识,大致的SQL注入分为三种: 1.BealeanBase 2.TimeBase 3.ErrorBase 1.从最简单的说起,基于布尔类型是最常见的SQL注入方式 select ...

  3. C# Socket大文件上传

    public sealed class SocketData { private SocketData() { } public static SendFileMode SendFile(Socket ...

  4. TYVJ2477 架设电话线

    题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用.     FJ的农场周围分布着N(1 <= N < ...

  5. editplus快速定位到文章头部和尾部

    经常用editplus发现有时文档比较长,要查找前面的内容时得一直滚动鼠标滚轮,或者拉动右侧边栏的导航标签,很少麻烦,有没有好的方法快速定位editplus到头部和尾部呢? 其实很简单,editplu ...

  6. [Effective JavaScript 笔记]第23条:永远不要修改arguments对象

    arguments对象并不是标准的Array类型的实例.arguments对象不能直接调用Array方法. arguments对象的救星call方法 使得arguments可以品尝到数组方法的美味,知 ...

  7. 重写HashMap

    package gov.gfmis.fap.util; import java.util.ArrayList; import java.util.HashMap; import java.util.L ...

  8. ubuntu 桌面版性能调优

    http://www.howtogeek.com/115797/6-ways-to-speed-up-ubuntu/

  9. Objective-C中的instancetype和id区别

    目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...

  10. Product of Array Exclude Itself

    Given an integers array A. Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WI ...