Oracle入门第三天(上)——多表查询与分组函数
一、多表查询
所有的连接分析,参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html
1.笛卡尔积
select last_name, department_name
from employees, departments
产生无效的笛卡尔积可以通过where进行过滤
连接查询:

2.等值连接
select e.last_name, d.department_name
from employees e, departments d
where e.department_id = d.department_id
3.外连接
SQL99的连接语法如下:
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)];
,这里介绍Oracle的左外连接写法:
--左外连接(e left join d)
select e.last_name,e.department_id, d.department_name
from employees e,departments d
where e.department_id = d.department_id(+)
自然连接可以省略连接条件,自动匹配所有相同的行进行笛卡尔积去重!
--自然连接(此种形式下无法使用表别名)
select employees.last_name,employees.department_id, departments.department_name
from employees NATURAL JOIN departments
CROSS JOIN叉集——与笛卡尔积相同
--CROSS JOIN叉集
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
自连接
--自连接
SELECT
e1.last_name,e2.last_name,e2.salary,e2.email
FROM
employees e1,employees e2
WHERE
e1.manager_id = e2.employee_id
AND
LOWER(e1.last_name) = 'chen'
二、分组函数
1.组类型函数
AVG 返回平均值
COUNT 返回记录的数量(非空数目)
COUNT(DISTINCT expr)返回expr非空且不重复的记录总数
MAX 返回最大值
MIN 返回最小值
SUM 返回总值
STDDEV 返回标准差
VARIANCE 返回统计方差
方差与标准差的拓展阅读:点击查看
示例:
SELECT AVG(salary),SUM(salary),MAX(salary),MIN(salary)
FROM employees
AVG(SALARY) SUM(SALARY) MAX(SALARY) MIN(SALARY)
----------- ----------- ----------- -----------
6461.682242 691400 24000 2100
2.分组——GROUP BY
查询列仅能是分组列或组函数(聚合函数)
SELECT department_id,ROUND(AVG(salary),2) sal_avg
FROM employees
GROUP BY department_id
DEPARTMENT_ID SAL_AVG
------------- ----------
100 8600
30 4150
7000
90 19333.33
20 9500
70 10000
110 10150
50 3475.56
80 8955.88
40 6500
60 5760
10 4400
与WHERE的搭配,注意SQL的顺序:(这里是先选出符合条件的,再进行分组,分组过滤则参考HAVING)
SQL顺序(手写顺序与机读顺序参考之前随笔:http://www.cnblogs.com/jiangbei/p/7420136.html)
SELECT department_id,ROUND(AVG(salary),2) sal_avg
FROM employees
WHERE department_id IN (10,20,30)
GROUP BY department_id
3.分组过滤HAVING
WHERE中不能使用组函数过滤,于是HAVING登场..
示例:
SELECT department_id,ROUND(AVG(salary),2) sal_avg
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 7500
4.组函数支持嵌套
SELECT MAX(AVG(salary)) sal_avg
FROM employees
GROUP BY department_id
Oracle入门第三天(上)——多表查询与分组函数的更多相关文章
- Oracle总结【SQL细节、多表查询、分组查询、分页】
前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...
- oracle 10g 学习之多表查询、分组函数(6)
笛卡尔集 l 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...
- Oracle入门第三天(下)——子查询
一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...
- jQuery入门第三
jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...
- 第十七篇 ORM跨表查询和分组查询---二次剖析
ORM跨表查询和分组查询---二次剖析 阅读目录(Content) 创建表(建立模型) 基于对象的跨表查询 一对多查询(Publish与Book) 多对多查询 (Author 与 Book) 一对一查 ...
- ORM单表查询,跨表查询,分组查询
ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...
- java入门第三步之数据库连接
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
- java入门第三步之数据库连接【转】
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
- HTML入门第三天
三. 表格table(表格类数据): 1.表格标签(重中之重) 基本结构标签: <table>:定义表格区域 <tr>:定义表格的行 <td>:定义表格中的单元格 ...
随机推荐
- 乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters
乘风破浪:LeetCode真题_003_Longest Substring Without Repeating Characters 一.前言 在算法之中出现最多的就是字符串方面的问题了,关于字符串的 ...
- java内部类之成员内部类之局部内部类
局部内部类特点: 1.定义在代码块.方法体内的类叫局部内部类 2.局部内部类访问外部类的属性和方法使用“外部类名.this.属性名”和“外部类名.this.方法名(参数)”的形式 3.对外部世界完全隐 ...
- socket端口复用问题一二
实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: #include <std ...
- Django settings.py 的media路径设置
转载自:http://www.xuebuyuan.com/676599.html 在一个 models 中使用 FileField 或 ImageField 需要以下步骤: 1. 在你的 settin ...
- 将git关联到pycharm
1. 安装pycharm 2. 安装git 3. 打开pycharm, 点钟File -> settings -> Version Control -> Git 该面板中,填写git ...
- 【51nod 1514】 美妙的序列
题目 我们发现我们得正难则反 还是设\(f_i\)表示长度为\(i\)的序列个数 考虑容斥 \[f_i=i!-\sum_{j=1}^{i-1}f_j(i-j)!\] \(i!\)显然是总方案数,我们减 ...
- Mysql中函数和存储过程的区别
Mysql中函数和存储过程的区别 存储过程: 1. 可以写sql语句 2. inout,out构造返回值 3. 调用:call:存储过程名称 4. 可以 ...
- 1、Android-活动(下)
1.4.活动的生命周期 对于活动来说生命周期的理解时非常重要的 当对其生命周期有了足够的了解,可以很好的写出程序 1.4.1.返回栈 Android中的活动是可以层叠的 没启动一个新的活动,就会立即覆 ...
- ethereumjs/ethereumjs-vm-3-StateManager
https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/stateManager.md StateManager 要与本博客的ethe ...
- [原创]HBase学习笔记(2)- 基本操作
1.使用hbase shell连接hbase 2.输入help可以查看帮助 3.输入list查看当前hbase中的所有表 4.使用create创建表test 其中test是表名,cf是列族.该表只创建 ...