多表查询概念:

所谓多表查询,又称表联合查询,即一条语句涉及到的表有多张,数据通过特定的连接进行联合显示。

基本语法:

select column_name,....

from table1,table2

条件。。。。

select dept_id,name

from s_emp,s_dept

s_emp s_dept

last_name   dept_id id      name

zhangsan 41 41      est

lisi           42 42     develop

学前须知:

笛卡尔积

在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y.

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积

例如:

select *

from s_emp,s_dept;

连接查询分类:

为了在多表查询中避免笛卡尔积的产生,我们可以使用连接查询来解决这个问题.

连接查询分为:

1.等值连接

2.不等值连接

3.外连接

左外连接

右外连接

全连接

4.自连接

等值连接:利用一张表中某列的值和另一张表中某列的值相等的关系,把俩张表连接起来。

语法:

select tb_name.col_name,tb_name.col_name,...

from tb_name,tb_name,...

where tb_name.col_name = tb_name.col_name

and

tb_name.col_name = tb_name.col_name

...

需求:查看每个员工的id,last_name以及所属部门名称

select s_emp.id,last_name,s_dept.name

from s_emp ,s_dept

where s_emp.detp_id = s_dept.id;

有时为了简化操作,或者表述更加清楚,可以给每张表起别名

select e.id,e.last_name,d.name

from s_emp e ,s_dept d

where d.detp_id = d.id;

不等连接: 使用的是除=以外的操作符号的多表查询

例如:使用between and

select t1.col_name,t2.col_name

from t1,t2

where t1.col_name between t2.col_name

and t2.col_name;

外连接:当一个表的记录在另外一张表中不存在的时候,我们依旧需要显示,使用外连接即可。

外连接分为:

右外连接(right join/right outer join)

左外连接(left join/left outer join)

全外连接(full join/ full outer join)

右外连接的语法:

select tb_name,col_name,...

from tb_name1,tb_name2

where

tb_name1.col_name (+)= tb_name2.col_name;

or

select tb_name,col_name,

from tb_name1 right outer join tb_name2

where .......

意义:右外连接表示右边表(=号右边的表)中的记录在左边表中不存在的时候,右边表的记录依旧显示。

select c.id,c.name,e.last_name

from s_customer c,s_emp e

where c.id (+)= c.sales_rep_id;

左外连接的语法:

select tb_name,col_name,...

from tb_name1,tb_name2

where

tb_name1.col_name = tb_name2.col_name(+);

or

select tb_name,col_name,...

from tb_name1 left outer join tb_name2

where

tb_name1.col_name = tb_name2.col_name(+);

意义:左外连接表示左边表(=号左边的表)中的记录在右边表中不存在的时候,左边表的记录依旧显示。

需求:查看s_customer中所有客户的id和名字以及该客户所对应的负责员工的id,last_name

表之间的连接列

s_customer 表中的sales_rep_id

s_emp      表中的id

select c.id,c.name,e.last_name

from s_customer c,s_emp e

where c.sales_rep_id = e.id;

自连接

实质就是一张表当多张表用,即一张表中的某列的值取决于自己的某一列

需求:查看每一个员工的经理名字

语法:

select ...

from tb_name t1,tb_name t2

where t1.col_name = t2.ano_col_name

select e1.id,e1.last_name,e1.manager_id,e2.last_name

from s_emp e1,s_emp e2

where e1.manager_id = e2.id;

集合连接:对查询结果集的操作。

union:将上下结果取并集,去除掉重复的记录(重复的只显示一次)

union all:将上下结果全部显示

minus:取差集 A-B

intersect:取交集

前提条件是:两个结果集中查询的列要完全一致。

伪列:

oracle中的伪列 rownum

伪列rownum,就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。它会根据返回的结果为每一条数据生成一个序列化的数字.rownum是oracle才有的伪列

rownum 所能作的操作:

rownum 只能等于1  如果让其等于其他数 则查不到数据

例如:

select last_name

from s_emp

where rownum=1

rownum 大于0      如果让其大于其他数 则查不到数据

例如:

select last_name

from s_emp

where rownum>0

rownum 可以小于任何数

例如:

select last_name

from s_emp

where rownum<7

Oracle的多表查询的更多相关文章

  1. Oracle笔记 多表查询

    Oracle笔记  多表查询   本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...

  2. oracle SQL多表查询

    SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列.              1 ro ...

  3. Oracle查询优化-多表查询

    --合并结果集 --1.union all UNION ALL--单纯合并 ; --2.union UNION --将重复结果集合并 ; --------------使用命令窗口执行,查看union与 ...

  4. Oracle之多表查询

    -多表查询 1.交叉连接 select * from t_class for update; select * from t_student for update; select for update ...

  5. oracle数据库单表查询

    今天给大家分享的是关于数据库的单表查询,像单表查询/多表查询/分组查询/子查询,这些方法的使用在实际项目过程中会经常用到,作为一名合格的测试人员如果不会数据库那肯定是不行的,行走江湖可能随时会面临被侮 ...

  6. oracle习题-emp表查询练习

    emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...

  7. 关于oracle数据库 跨表查询建立 视图的方法

    工作中很多时候都会遇到需要将两个不同的表空间甚至数据库的表进行联合查询或者建立视图的情况. 不同的表空间查询我们可以通过在将要查询的表前面加上 表空间的对应的用户名来实现,如有两个表空间分别对应两个用 ...

  8. Oracle数据库多表查询,子查询,集合运算

    记得自己要敲o~~~ select * from bonus; select * from salgrade; from dual; --笛卡尔积:两张表的乘积 select * from emp,d ...

  9. ORACLE关于锁表查询的部分SQL

    http://www.cnblogs.com/quanweiru/archive/2012/08/28/2660700.html --查询表空间名称和大小 SELECT UPPER (F.TABLES ...

随机推荐

  1. php课程---php使用PDO方法详解(转)

    本文详细分析了php使用PDO方法.分享给大家供大家参考.具体分析如下: PDO::exec:返回的是int类型,表示影响结果的条数. 代码如下: PDOStatement::execute 返回的是 ...

  2. .gitignore文件不起作用

    当我们用git时常常会习惯把我们不想上传到远程代码库中的一些本地文件(夹)放在一个叫做.gitignore的文件中,例如常见的本地build文件夹,一些IDE如Intellig,Eclipse的项目管 ...

  3. 关于IOS的证书、App ID、设备、Provisioning Profile详述

    首先,打开developer.apple.com ,在iOS Dev Center打开Certificates, Indentifiers & Profiles认识一下基本结构.列表就包含了开 ...

  4. mysql重点--正确使用

    1.一些错误情况 数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效.即使建立索引,索引也不会生效: - like '%xx' ...

  5. UIView 的autoresizingMask属性

    autoresizingMask属性的意思就是自动调整子控件与父控件中间的位置,宽高,定义如下: typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) ...

  6. join用法

    join命令可以将多个文件结合在一起,每个文件里的每条记录,都共享一个键值(key),键值指的是记录中的主字段,通常会是用户名称.个人姓氏.员工编号之类的数据. join - join lines o ...

  7. 下载pdf_不同操作系统,无法正常下载(兼容性问题)

    [功能点]:下载pdf文件 [问题描述]:window上传附件,linux无法下载 [根本原因]:window中路径分割符为"\",linux中路径分割符为"/" ...

  8. Hadoop学习(5)-- Hadoop2

    在Hadoop1(版本<=0.22)中,由于NameNode和JobTracker存在单点中,这制约了hadoop的发展,当集群规模超过2000台时,NameNode和JobTracker已经不 ...

  9. JSP 运行

    Tomcat 上运行 JSP 应用程序 完成一些包装工作后,才能在 Tomcat 上运行 index.jsp 程序.通常需要按照以下步骤操作: 创建 JSP 应用程序.如果只使用一个页面,则称它为 i ...

  10. Spring 计划

    3.0----------------------------------------------------- SCRUM 流程的步骤2: Spring 计划 1. 确保product backlo ...