Oracle---分组函数和多表查询

本文深入探讨了SQL查询的基础知识,包括分组函数、多表查询、自连接、不等连接、外连接等概念,并详细解释了主键、外键、实体完整性、引用完整性的原理。同时,通过具体的SQL查询实例,展示了如何有效地进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

综合数据和分组函数

1.      常用的分组函数:COUNT  AVG  SUM MAX  MIN

2.      GROUP BY

3.      HAVING

4.      分组函数只能嵌套两层

5.      除了COUNT(*)外,其他的分组函数都不处理空值。

多表查询

1.      主键和实体完整性

主键:它是关系数据库表中的某一列或某几列的组合;它能够唯一的表示关系数据库表中的任一行。

实体完整性:主键不能包含空值(NULL),并且主键必须能够唯一标识任一行。

2.      外键和引用完整性

外键:是关系数据库表中的某一列或某几列的组合,它的值或者与另一个表中的某一列(一般为主键)相匹配,或者为空值。

引用完整性:(1)外键必须为空值或者有相匹配的项 (2)外键可以没有相对应的键属性,但不可以有无效的项。

3.      相等连接

如:               select *

                     fromemp,dept

                     whereemp.deptno = dept.deptno

                     orderby sal

笛卡尔乘积形成的条件:

l        查询语句中漏掉了连接条件

l        查询语句中两个表中的所有行都满足连接条件

l        查询语句中的连接条件无效

在实际工作中应该尽量的避免出现笛卡尔乘积,在多表连接查询语句的WHERE字句中,必须永远是用有效而正确的连接条件。

4.    自连接

1  select w.empno,w.ename,w.job,w.mgr,

 2 m.ename,m.job

 3  from emp w,emp m

 4  wherew.mgr = m.empno

 5  andw.job like 'ANA%'

5.    不等连接

       selecte.empno,e.ename,e.job,e.sal,s.grade

      from emp e,salgrade s

      where e.sal betweens.losal and s.hisal

      and s.grade > 2;

6.      外连接

外连接的连接运算符为(+),该连接运算符既可以放在等号的左面也可以放在等号的右面,但是一定要放在缺少信息的那一面。

 

1  select empno,ename,sal,emp.deptno,dept.deptno,loc

 2  fromemp,dept

 3* where emp.deptno(+)= dept.deptno

QL> /

 

    EMPNO ENAME             SAL     DEPTNO    DEPTNO LOC

------------------- ---------- ---------- ---------- ------------

     7369 SMITH             800         20         20 DALLAS

     7499 ALLEN            1600         30         30 CHICAGO

     7521 WARD             1250         30         30 CHICAGO

     7566 JONES            2975         20         20 DALLAS

     7654 MARTIN           1250         30         30 CHICAGO

     7698 BLAKE            2850         30         30 CHICAGO

     7782 CLARK            2450         10         10 NEW YORK

     7788 SCOTT            3000         20         20 DALLAS

     7839 KING             5000         10         10 NEW YORK

     7844 TURNER           1500         30         30 CHICAGO

     7876 ADAMS            1100         20         20 DALLAS

 

    EMPNO ENAME             SAL     DEPTNO    DEPTNO LOC

------------------- ---------- ---------- ---------- ------------

     7900 JAMES             950         30         30 CHICAGO

     7902 FORD             3000         20         20 DALLAS

     7934 MILLER           1300         10         10 NEW YORK

                                                   40 BOSTON

WHERE子句也可以写成   dept.deptno = emp.deptno(+)。

7.      SQL:1999语法的连接

selecte.empno,e.ename,e.sal,e.deptno,d.loc

from emp e

CROSS JOIN deptd

使用USING子句的连接

selecte.empno,e.ename,e.sal,deptno,d.loc

from emp e

join dept d

using(deptno)

order by d.loc;

使用ON子句的连接

select  e.empno,e.ename,e.sal,e.deptno,d.loc

 from emp e

 join dept d

 on(e.deptno = d.deptno)

 order by d.loc

 

 

左外连接

selectempno,ename,sal,emp.deptno,loc

from dept

left outer joinemp

on(emp.deptno =dept.deptno);

右外连接

selecte.empno,e.ename,e.sal,e.deptno,d.deptno,d.loc

from emp e

right outer joindept d

on (e.deptno =d.deptno)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值