Oracle基础笔记四

第四章 多表查询

1.笛卡尔集

笛卡尔集会在下面条件下产生:

省略连接条件

连接条件无效

所有表中的所有行互相连接

为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。

2.Oracle 连接

使用连接在多个表中查询数据。

select table1.column,table2.column

from table1,table2

where table1.column = table2.column

在 WHERE 子句中写入连接条件。

在表中有相同列时,在列名之前加上表名前缀

2.1等值连接:

多个连接条件与 AND 操作符

区分重复的列名,使用表名前缀在多个表中区分相同的列,在不同表中具有相同列名的列可以用表的别名加以区分。

表的别名:

使用别名可以简化查询。

使用表名前缀可以提高执行效率。

SELECT e.employee_id, e.last_name, e.department_id,

d.department_id, d.location_id

FROM   employees e , departments d

WHERE  e.department_id = d.department_id;

连接多个表:连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。

2.2非等值连接:

SELECT e.last_name, e.salary, j.grade_level

FROM   employees e, job_grades j

WHERE  e.salary

BETWEEN j.lowest_sal AND j.highest_sal;

3.内连接和外连接:

内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).

外连接语法:

使用外连接可以查询不满足连接条件的数据。

外连接的符号是 (+)。

SELECT table1.column, table2.column

FROM table1, table2

WHERE table1.column(+) = table2.column;//右外连接

SELECT table1.column, table2.column

FROM table1, table2

WHERE table1.column = table2.column(+);//左外连接

自连接:

题目:查询employees表,返回“Xxx  works for Xxx”

SELECT worker.last_name || ‘ works for ‘

|| manager.last_name

FROM   employees worker, employees manager

WHERE  worker.manager_id = manager.employee_id ;

4.

叉集(了解):

使用CROSS JOIN 子句使连接的表产生叉集。

叉集和笛卡尔集是相同的。

SELECT last_name, department_name

FROM   employees

CROSS JOIN departments ;

自然连接:

NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。

在表中查询满足等值条件的数据。

如果只是列名相同而数据类型不同,则会产生错误。

SELECT department_id, department_name,

location_id, city

FROM   departments

NATURAL JOIN locations ;

使用 USING 子句创建连接:

在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。

使用 USING 可以在有多个列满足条件时进行选择。

不要给选中的列中加上表名前缀或别名。

JOIN 和 USING 子句经常同时使用。

SELECT e.employee_id, e.last_name, d.location_id

FROM   employees e JOIN departments d

USING (department_id) ;

使用ON 子句创建连接(常用):

自然连接中是以具有相同名字的列为连接条件的。

可以使用 ON 子句指定额外的连接条件。

这个连接条件是与其它条件分开的。

ON 子句使语句具有更高的易读性。

SELECT e.employee_id, e.last_name, e.department_id,

d.department_id, d.location_id

FROM   employees e JOIN departments d

ON     (e.department_id = d.department_id);

使用 ON 子句创建多表连接:

SELECT employee_id, city, department_name

FROM   employees e

JOIN   departments d

ON     d.department_id = e.department_id

JOIN   locations l

ON     d.location_id = l.location_id;

补充:

SQL语句的多表查询方式:

例如:按照department_id查询employees(员工表)和departments(部门表)

的信息。

方式一(通用型):SELECT ... FROM ... WHERE

SELECT e.last_name,e.department_id,d.department_name

FROM employees e,departments d

where e.department_id = d.department_id

方式二:SELECT ... FROM ... NATURAL JOIN ...

有局限性:会自动连接两个表中相同的列(可能有多个:department_id和manager_id)

SELECT last_name,department_id,department_name

FROM employees

NATURAL JOIN departments

方式三:SELECT ... JOIN ... USING ...

有局限性:好于方式二,但若多表的连接列列名不同,此法不合适

SELECT last_name,department_id,department_name

FROM employees

JOIN departments

USING(department_id)

方式四:SELECT ... FROM ... JOIN ... ON ...

常用方式,较方式一,更易实现外联接(左、右、满)

SELECT last_name,e.department_id,department_name

FROM employees e

JOIN departments d

ON e.department_id = d.department_id

时间: 2024-11-01 04:05:12

Oracle基础笔记四的相关文章

Oracle基础笔记十四

第十四章 高级子查询 1.子查询 子查询 (内查询) 在主查询执行之前执行 主查询(外查询)使用子查询的结果 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM  table); 问题:查询工资大于149号员工工资的员工的信息 SELECT last_name FROM   employees WHERE  salary > (SELECT salary FROM   employees WHERE

Oracle基础(四)pl/sql

PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断.循环等操作实现复杂的功能或者计算的程序语言. 总结下来就是是sql语言的扩展,sql语句+ 变量和常量+条件语句+循环语句+例外处理各种错误! PL/SQL的作用 使用PL/SQL可以编写具有很多高级功能的程

Oracle基础笔记十

第十章 视图 1.视图:从表中抽出的逻辑上相关的数据集合. 视图是一种虚表. 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表. 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句. 视图向用户提供基表数据的另一种表现形式 2.为什么使用视图 控制数据访问 简化查询 避免重复访问相同的数据 3.分类:简单视图和复杂视图 特性           简单视图       复杂视图 表的数量        一个       一个或多个 函数    

Oracle基础笔记

=====================================第一章:oracle数据库基础============================================= Orace特点: 1.跨操作系统,跨硬件平台的数据操作能力 2.支持多用户,大事务量的处理 3.在保持数据安全性和完整性方面的性能优越 4.支持分布式数据处理,具有可移植性 Sqlserver特点: 1.只能在windows上运行 Oracle和Sqlserver两者的共同点: 1.都是关系型数据库 表

JavaSE基础笔记四

第三章 面向对象(一) 1.(了解)面向对象和面向过程 2.面向对象的编程关注于类的设计 1)一个项目或者工程,不管多么庞大,一定是由一个一个的类构成 2)类是抽象的,好比是制造汽车的图纸,车是由图纸制造的,其实就是类的实例化 3完成一个项目(功能)的思路 1)所需要完成的功能对应的类的对象是否存在 2)若存在,则通过对象直接调用对应的类中的属性或者方法即可 3)若不存在,则要创建类的对象,甚至说类都不存在,就需要设计类 4.面向对象编程的三条主线: 1)类及类的构成成分:属性 方法 构造器 代

Oracle基础笔记九

第九章 约束 1.什么是约束 约束是表级的强制规定 有以下五种约束:NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 2.注意事项 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名 创建和修改约束: 建表的同时 建表之后 可以在表级或列级定义约束 可以通过数据字典视图查看约束 3.表级约束和列级约束 作用范围: ①列级约束只能作用在一个列上 ②表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上) 定义方

Oracle基础笔记十一

第十一章 其他数据库对象 1.什么是序列? 序列:提供有规律的数值. 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 1.2.定义序列 CREATE SEQUENCE 语句 CREATE SEQUENCE sequence [INCREMENT BY n]  --每次增长的数值 [START WITH n]    --从哪个值开始 [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n

Oracle基础笔记七

第七章 创建和管理表 1.常见的数据库对象 对象 描述 表              基本的数据存储集合,由行和列组成. 视图 从表中抽出的逻辑上相关的数据集合. 序列 提供有规律的数值. 索引 提高查询的效率 同义词 给对象起别名 2.命名规则 表名和列名: 必须以字母开头 必须在 1–30 个字符之间 必须只能包含 A–Z, a–z, 0–9, _, $, 和 # 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 3.数据类型 数据类型                 描述

Oracle 学习笔记(四)

一.高效 SQL 语句原则 在where 中用 = 关系运算时 避免用函数在关系运算中,除非你使用函数建立索引 尽量不要隐式转化数据类型,数据类型一定要匹配 尽量将一句SQL分成多个语句完成 不能差分的请用UNION ALL 来组合 条件确定的子查询  Exist 适合于外表小,内表大    in  适合于外表大,内表小 使用视图的注意事项 复杂视图的连接要小心,尤其有外键的时候 当查询的是视图中引用的部分表的时候,请不要使用视图,或者建立新的更小的表 存储中间结果 对查询中可能多次调用的结果集