笛卡尔集

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

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

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. 设置button不同状态下的背景色,即把这个颜色变成图片设置成,背景图片

    - (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state { [self setBack ...

  2. python集合类型set

    set 类型的简单粗暴取出并集合交集  |   & li=[11,22,33] n_li=[44,55] b= (list(set(li)&set(n_li))) b2=set(li) ...

  3. vssver2.scc 文件是干啥的?

    idcdpi源文件下的tools下有一个文件    vssver2.scc     vssver2.scc是什么文件 首先,先来个名词解释:Microsoft Visual Source Safe是美 ...

  4. linux 的useradd 命令的p选项

     linux 的useradd 命令的p选项                错误用法: #useradd   gaojian   -p  gaojian                      #  ...

  5. stripslashes — 反引用一个引用字符串

    stripslashes (PHP 4, PHP 5) stripslashes — 反引用一个引用字符串 Report a bug  说明 string stripslashes ( string  ...

  6. java笔记--查看和修改线程名称

    查看和修改线程名称 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3893797.html  "谢谢-- java是一种允许 ...

  7. Ubuntu 16.04 下安装Firefox的Flash插件

    在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...

  8. Hibernate执行原生SQL返回List<Map>类型结果集

    我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...

  9. Stanford机器学习---第七讲. 机器学习系统设计

    原文:http://blog.csdn.net/abcjennifer/article/details/7834256 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  10. DICOM:DICOM3.0网络通信协议(续)

    转载:http://blog.csdn.net/zssureqh/article/details/44278693 题记: 近一年来一直坚持周末写博客,整理工作和闲暇之余的点点滴滴.对于新知识点.新技 ...