一、多表查询

   所有的连接分析,参考之前随笔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入门第三天(上)——多表查询与分组函数的更多相关文章

  1. Oracle总结【SQL细节、多表查询、分组查询、分页】

    前言 在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了...印象中就只有基本的SQL语句和相关一些概念....写下本博文的原因就是记载着Or ...

  2. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  3. Oracle入门第三天(下)——子查询

    一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...

  4. jQuery入门第三

    jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...

  5. 第十七篇 ORM跨表查询和分组查询---二次剖析

    ORM跨表查询和分组查询---二次剖析 阅读目录(Content) 创建表(建立模型) 基于对象的跨表查询 一对多查询(Publish与Book) 多对多查询 (Author 与 Book) 一对一查 ...

  6. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询   单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...

  7. java入门第三步之数据库连接

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

  8. java入门第三步之数据库连接【转】

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

  9. HTML入门第三天

    三. 表格table(表格类数据): 1.表格标签(重中之重) 基本结构标签: <table>:定义表格区域 <tr>:定义表格的行 <td>:定义表格中的单元格 ...

随机推荐

  1. lisp base

    一 .quote lisp 使用s-expr表示数据和代码,通常会将第一项作为函数,而将后续元素当做参数传给第一项进行计算.可以通过quote来进行其他解析,quote可用(‘)表示: ( + 1 1 ...

  2. Modal实现页面跳转和控制器数据传递

    一.Model跳转的实现 1.新建工程 2.新建View控制器和导航控制器 (1)为拖控件,两个view一个navigation; 如图: (2)view的“GotoTwo”按键添加Segues到Na ...

  3. Calabash(葫芦娃)

    嘟嘟嘟 第一眼就觉得肯定某种是最短路,然后想了半天也不知道.然后就把送的50分写了,然后就爆搜,结果因为一个错误的剪枝竟然90分?!只能怪数据太水…… 考完试后听bin哥讲,说就是普通的最短路,只不过 ...

  4. Todolist项目总结 JavaScript+jQuery

    Html部分 消息提醒,开始隐藏 内容区 2.1    标题 2.2    表单(输入框.提交按钮) 2.3 清单列表 2.4 任务详情遮罩 2.5 任务详情 3   video引入提示音乐 Css部 ...

  5. Kali-linux无线网络嗅探工具Kismet

    如果要进行无线网络渗透测试,则必须先扫描所有有效的无线接入点.刚好在Kali Linux中,提供了一款嗅探无线网络工具Kismet.使用该工具可以测量周围的无线信号,并查看所有可用的无线接入点.本节将 ...

  6. HDU 1165 Eddy's research II(给出递归公式,然后找规律)

    - Eddy's research II Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  7. Git IDEA Move or commit them before merge

    提交代码遇到这个问题. Move or commit them before merge 百度了一下都是在Gitbash 中敲命令. 在团队协作中 你总不能去敲命令吧 后来在组长的怂恿下,我删除了一个 ...

  8. 用Vue的父子组件通信实现todolist的功能

    先上代码 <body> <div id="root"> <div> <input v-model="inputValue&quo ...

  9. nodejs( koa2 )配置 browserHistory

    前言 既然能搜到并且还点进来看这篇文章, 那么肯定是知道后台为什么要配置 browserHistory, 也肯定知道为什么非要去用相对来说更麻烦的吧browserHistory, 而不用更简单点的不需 ...

  10. 添加一个js扩展方法

    String.prototype.repeatify=String.prototype.repeatify || function(times){ var str=''; for(var i=0;i& ...