笛卡尔集

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

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

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. yii框架常用url地址

    调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery');        framework/web/j ...

  2. OracleBulkCopy批量插入数据

    1.OracleBulk程序集引用using ODAC = Oracle.DataAccess.Client 2.有时候不做字段映射,会使导入的数据出错 上代码 /// <summary> ...

  3. 锋利的jQuery-3--用js给多选的checkbox或者select赋值

    单选的select: <select id="single"> <option>Single</option> <option>Si ...

  4. win32控制台消息机制

    源码: #include<windows.h>HANDLE hInput; /* 获取标准输入设备句柄 */INPUT_RECORD inRec;/* 返回数据记录 */DWORD num ...

  5. nginx 服务器重启命令,关闭 (转)

    nginx -s reload  :修改配置后重新加载生效nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...

  6. WPF控件模拟双击事件

    Action a = () => { i += ; ) { Interval = }; timer.Elapsed += (sender, e) => { timer.Enabled = ...

  7. ios开发@selector的函数如何传参数/如何传递多个参数

    不同的类会有不同的传递方式,参数名也不尽相同.如果是传单个参数的就不用集合,如果是传多个参数可以用类似nsarray,nsdictionary之类的集合传递.看下面例子: 例子1: 通过NSTimer ...

  8. 新浪微博客户端(32)-设置相册图片的contentMode

    DJStatusPhotoView.m #import "DJStatusPhotoView.h" #import "UIImageView+WebCache.h&quo ...

  9. js控制固定div和随屏滚动div兼容多浏览器和纯css控制(来自网络)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. php-jquery-json-3

    memcache redis缓存技术mysql中的int和text是有区别的, , 按字节长度来记忆jquery中的选择器中的空格是运算符, 所以不能多也不能少, 非常严格层次运算符: 空格 大于 等 ...