oracle 10g 学习之多表查询、分组函数(6)
笛卡尔集
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)的更多相关文章
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- Oracle 数据库基础学习 (五) 多表查询
多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...
- oracle 10g 学习之视图、序列、索引、同义词(9)
目标 通过本章学习,您将可以: l 描述视图 l 创建和修改视图的定义,删除视图 l 从视图中查询数据 l 通过视图插入, 修改和删除数据 l 使用“Top-N” 分析 l 创建, 维护, ...
- oracle系列笔记(2)---多表查询
多表查询 这篇文章主要讲四点: (1)oracle多表查询 (2)SQL99标准的连接查询 (3)子查询 (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...
- Django 学习 之ORM聚合查询分组查询与F查询与Q查询
一.聚合查询和分组查询 1.聚合查询aggregate 关于数据表的数据请见上一篇:Django 学习 之ORM多表操作(点我) aggregate(*args, **kwargs),只对一个组进行聚 ...
- oracle 10g 学习之oracle管理(3)
怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...
- MySQL学习9 - 单表查询
一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...
随机推荐
- 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)
在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...
- tp 多语言支持
tp支持多语言 通过get来改变语言的 http://localhost/tp/index.php/Admin/User/add/hl/zh-cn http://localhost/tp/index. ...
- Logistic Regression and Gradient Descent
Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...
- 15 条实用 Linux/Unix 磁带管理命令
导读 磁带设备应只用于定期的文件归档或将数据从一台服务器传送至另一台.通常磁带设备与 Unix 机器连接,用 mt 或 mtx 控制.强烈建议您将所有的数据同时备份到磁盘(也许是云中)和磁带设备中. ...
- NGUI 学习笔记实战——制作商城UI界面
http://www.cnblogs.com/chongxin/p/3876575.html Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我 ...
- Maya导入Unity的教程
原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0601/1586.html 昨天已经发布了1Vr.Cn翻译的多维材质模型烘培入Unity ...
- POJ 1456 Supermarket 区间问题并查集||贪心
F - Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- dhcp原理、安装、相关命令、疑惑
转自: http://blog.sina.com.cn/s/blog_642e41c20101tct3.html
- 【云计算】docker run详解
Docker学习总结之Run命令介绍 时间 2015-01-21 17:06:00 博客园精华区 ...
- css调用外部样式和css样式说明剧中显示
<title>边走边乔</title><link href="css/style.css" rel="stylesheet" ty ...