经验查询:
在日后的开发之中,很多人都肯定要接触到许多新的数据库和数据表,那么在这种时候有两种做法;
做法一:新人做法,上来就直接输入以下的命令
select * from 表名称;
如果此时数据量较大的话,以上无法浏览数据,二有可能造成系统的死机;
做法二:老人做法,先看一下有多少条记录
select count(*) from 表名称;
笛卡尔积问题:
本问题在数据库的操作之中被称为笛卡尔积,就表示多张表的数据乘积的意思,但是这种查询结果肯定不是用户所希望的,那么该如何去掉笛卡尔积呢?
最简单的方式是采用关联字段的形式,emp表和dept表之间现在存在了deptno的关联字段,所以现在可以从这个字段上的判断开始

当查询之中,不同的表中有了相同字段名称的时候,访问这些字段必须加上表名称,即“表.字段”。
多表查询(条件查询):
在之前所使用的查询操作中,都是从一张表之中查询出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下:

但是以上的程序也存在一个问题,在之前访问表中字段的时候使用的是“表.字段”名称,那么如果说现在假设表名称很长,例如:“yinhe_diqiu_yazhou_zhongguo_beijing_xicheng_ren”,所以一般在进行多表查询的时候往往都会为表起一个别名,通过别名.字段的方式进行查询。

多表查询实例:
各个表的字段:

1.查询出每一位雇员的编号、姓名、职位、部门名称、位置
1).确定所需要的数据表
emp表:可以查询出雇员的编号、姓名、职位
dept表:可以查询出部门名称和位置
2).确定表的关联字段:emp.deptno=dept.deptno
 select empno,ename,job,dname,loc from dept, emp where dept.deptno=emp.deptno;
2.查询雇员的姓名、职位、领导是姓名(两个emp表,e.mgr=em.empno)
 select e.ename,e.job,em.ename from emp e,emp em where e.mgr= em.empno;
1.查询出每一位雇员的编号、姓名、职位、部门名称、位置
1).确定所需要的数据表
emp表:可以查询出雇员的编号、姓名、职位
dept表:可以查询出部门名称和位置
2).确定表的关联字段:emp.deptno=dept.deptno
3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及职位
select e.empno,e.ename,e.sal,e.job,em.ename mgrname,dname,locfrom emp e,emp em, dept where e.deptno= dept.deptno and e.mgr=em.empno;
4.查询出每一个雇员的编号、姓名、工资、部门名称、工资所在公司的工资等级,并且,等级的数字替换成文字,例如:1替换成'第五等级';2替换成'第四等级',以此类推
select e.empno,e.ename,e.sal,d.dname,decode(s.grade,'1','第五等工资','2','第四等工资','3','第三等工资','4','第二等工资','5','第一等工资') gradefrom emp e, dept d, salgrade s where e.deptno= d.deptno and (e.sal between s.losal and s.hisal);
多表查询(左右连接):
Oracle独有:

(+):代表连接方向
主表的数据可以完全查出来
左连接:左边的表是主表,右连接:右边的表是主表
如果(+)在右边,是左连接(左边的表是主表);
如果(+)在左边,是右连接(右边的表是主表)
select e.ename, e.job, em.ename from emp e, emp em where em.empno= e.mgr(+);

以上是Oracle数据库独有的多表查询的方法,下面介绍一下所有数据库通用的语法结构

通用SQL语法:
除了以上的表连接操作之外,在SQL语法之中,也提供了另外一套用于表连接的操作SQL,格式如下:

通用语法1:交叉连接
用于产生笛卡尔积
select * from emp cross join dept;  

等同于:

select * from emp ,dept;
笛卡尔积本身并不属于无用的内容,在某些情况下还是需要使用的
通用语法2:自然连接(有约束条件时使用)
自动找寻两/多个表与表之间的外键关联关系(消除笛卡尔积)
select * from emp NATURAL join dept;

等同于:

select * from empt, dept where emp.deptno=dept.deptno;
但是并不是所有的字段都是关联字段,设置关联字段需要通过约束指定
通用语法3:JOIN USING子句,相同字段名称可以使用
select * from emp join dept using (deptno);
用户自己指定一个消除笛卡尔积的关联字段
通用语法4:JOIN ON子句,不相同字段名称也可以使用
select * from emp join dept on(emp.deptno=dept.deptno);
用户自己指定一个消除笛卡尔积的关联条件
通用语法5:外链接
左外连接(左边的表是主表):left outer join...on
select * from emp LEFT OUTER join dept on emp.deptno=dept.deptno;
右外链接(右边的表是主表):right outer join...on
select * from emp RIGHT OUTER join dept on emp.deptno=dept.deptno;

全连接

select * from emp FULL OUTER join dept on emp.deptno=dept.deptno;
通用语法6:统计函数
在之前学习过一个count()函数,此函数的功能可以统计出表中的数据量,实际上这个就是一个统计函数,而常用的统计函数有如下几个:
COUNT():查询表中的数据记录
AVG():求出平均值
SUM():求和
MAX():求出最大值
MIN():求出最小值
练:统计出公司的所有雇员,每个月支付的平均工资及总工资
select trunc(AVG(sal)) avg, sum(sal) from emp;
通用语法7:分组查询
首先必须先明确一点,什么情况下可能分组,例如:
>>公司的所有雇员,要求男性一组,女性一组,之后可以统计男性和女性的 数量
>>按照年龄分组,18岁以上的分一组,18岁以下的分一组
>>按照地区分组:北京人一组,上海人一组,四川人一组
如果这些信息都保存了数据库之中,肯定在数据的某一列上回存在重复的内容,例如;按照性别分组的时候,性别肯定有重复(男和女),按照年龄分组(有一个范围的重复),按照地区分组(有一个地区的信息重复)
所以,分组之中有一个不成文的规定:当数据重复的时候分组才有意义,以为一个人也可以一组(没什么意义)
分组查询语句(group by 放在最后写):

练:按照部门编号分组,求出每个部门的人数,平均工资
group by语句使用,除了统计函数以外,要查询的字段必须包含在group by中
select deptno,count(*),trunc(avg(sal),2) from emp group by deptno;



Oracle数据库中的多表查询相关推荐

  1. Oracle数据库之一_多表查询

    Oracle数据库之一_多表查询 Oracle的查询是SQL语句的重点,在日常开发中,增删改查4项操作,查询占80%的工作量. Oracle的单表查询通常较简单,大多数时候,一个select * fr ...

  2. Oracle表里的照片怎么导出来,如何导出oracle数据库中某张表到excel_oracle数据库表格导出到excel...

    如何将oracle数据库表字段导成excel表格 这个你只要用ADO连oracle并获取记录集,根据你用的编程语言打开EXCEL,然后操作EXCEL对象的工作表就可以了.以VB为例: 1.在工程中引用 ...

  3. oracle数据库插入多表,在Oracle数据库中插入嵌套表

    我是PL/SQL数据库的新学习者,这是一种给apex.oracle.com上的数据库应用指定序列的练习.然后我创建了表格,但是当填充与插入的代码如下所示,应用赋予错误,表你不介意,我需要你的帮助在Or ...

  4. MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~

    MySQL数据库中的多表查询含义以及练习 一. 多表查询含义 二. 多表查询练习 1. 已知表 2. 需求And代码 一. 多表查询含义 查询语法: select列名列表from表名列表where条件 ...

  5. JDBC查询Oracle全部表名称,如何使用JDBC API从Oracle数据库中的现有表中检索记录?...

    您可以使用UPDATE查询来更新/修改表中记录的现有内容.使用此功能,您可以更新表的所有记录或特定记录. 语法UPDATE table_name SET column1 = value1, colum ...

  6. oracle数据库中的虚拟表,Oracle10g中的虚拟专用数据库(VPD)

    什么是VPD 所谓虚拟专用数据库(VPD)指的是,通过在数据库里进行配置,从而让不同的用户只能查看某个表里的部分数据.VPD分为以下两个级别: 行级别:在该级别下,可以控制某些用户只能查看到某些行数据 ...

  7. Oracle数据库中的多表关联查询

    多表关联查询:在实际开发中,每个表的信息都不是独立的,而是若干个表之间存在一定的联系,如果用户查询某一个表的信息时,可能需要查询关联表的信息,这就是多表关联查询. 1.查询语句的执行顺序 from&g ...

  8. 在mysql数据库中,多表查询,事务,DCL,

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

  9. Oracle数据库中的dual表

    select user from dual; select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间 select S ...

最新文章

  1. onclick事件执行2次
  2. Hadoop分布式文件系统--HDFS结构分析
  3. Windows CE(C#)嵌入式应用开发pdf
  4. 2008年最新的100条经典句子
  5. Lambda表达式的无参数无返回值的练习
  6. mysql 优化器不准_mysql 优化器有哪些可选开关
  7. IOS动态库打包导入工程报错Library not loaded: @rpath/SwiftFrame.framework/SwiftFrame
  8. 类与对象和对应方法、封装
  9. 关于路径的问题(以后会慢慢的补进来)
  10. nginx日志切割脚本
  11. h3c配置snmp配置命令_配置单元命令
  12. 腾讯云开发者实验室是什么?如何学习其中的153个实验案例?
  13. Centos如何设置ip黑名单,防止被攻击
  14. 怎么解log方程_对数方程的解法
  15. 试卷代号:4988 2021年春季学期期末统一考试电子政务概论 试题(开卷)
  16. java学籍管理系统_JavaWeb实现学生学籍信息管理系统
  17. 《数据挖掘原理与实战》教程网盘下载
  18. 机器人开发--电机中的电流环、速度环、位置环
  19. Windows安装arm64架构的麒麟V10
  20. 诗梦博客网站关站维护通告单页

热门文章

  1. Docker run 启动容器
  2. 计算机学校起名网,最好听的微信名字校园
  3. Bootstrap--简易上手
  4. 服务器文档怎么进入,服务器怎么进入
  5. 寒假作业1打印沙漏总结
  6. 初探win10 x64 SSDT(驱动学习笔记五)
  7. 谷歌服务器有windows系统吗,闷声发大财:谷歌浏览器内置电脑系统,媲美Windows...
  8. JPEG图像压缩原理与DCT离散余弦变换
  9. 年度盘点丨产品在线帮助文档/中心怎么做?看完这4个案例就知道
  10. 好用的窗口透明软件:Vitrite