笛卡尔集

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

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

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 可以在有多个列满足条件时进行选择。

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

l  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. mongodb(基础用法)

    驱动和客户端库 https://mongodb-documentation.readthedocs.org/en/latest/ecosystem/drivers.html#id2 https://m ...

  2. JS面试题及答案总结

    1. 截取字符串abcdefg的efg  <div id="test">abcdefg</div> var mytext=document.getEleme ...

  3. Nginx 服务器性能参数设置

    Nginx服务器性能调优 Nginx 配置文件 1.根据CPU内核数设置worker进程个数,以12核CPU为例,设置11个worker进程: worker_processes 11; worker_ ...

  4. Linux SSH安全策略限制IP登录方法(转)

    本文介绍了Linux SSH安全策略限制IP登录的两种方法.具体如下: 方法一: 首先需要限制登录的ip(或者如果需要自己本地登录,查看最后登录ip即可) Vim /etc/hosts.allow 输 ...

  5. C# 根据IP地址获取城市

    using System; using System.IO; using System.Net; using System.Text; using System.Web.Script.Serializ ...

  6. 统一软件开发过程(rup)理解

    不好意思,没有内容,请看百科吧http://baike.baidu.com/link?url=-zXA6oXiHRts5Z1THGzie7seH-YRigfiR7KRppP6TYcnnb7_Bxc_f ...

  7. SMTP 简单邮件传输协议

    SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...

  8. JavaScript 参数传递与变量复制

            ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.         5 种基本数 ...

  9. C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

    1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局 ...

  10. FATAL: ActionView::Template::Error (application.css isn't precompiled):

    iwangzheng.com tty:[0] jobs:[0] cwd:[/opt/logs/m]13:02 [root@a02.cmsapi$ tail thin\ server\ \(0.0.0. ...