Oracle数据库07

编程入门 行业动态 更新时间:2024-10-10 12:22:06

Oracle<a href=https://www.elefans.com/category/jswz/34/1771350.html style=数据库07"/>

Oracle数据库07

1. 多表连接获取数据

2.笛卡尔积


笛卡尔积产生原因

省略连接条件
连接条件无用
所有表中所有行互相连接

在实际应用中应该避免笛卡尔积的出现,可以在where中加入有效的连接条件。

3.连接的类型

4.Oracle 多表连接

(1)where 等值连接实现多个表中查询

基础语法:

【例1】

【注意】:
这种方法只需要在where子句中加入连接条件;
当不同表中有先相同字段时,列名前加入表名前缀
表名过长可以将表别名as,以此来区分不同的表字段
当与多个连接条件时用and连接各个条件;
where引导的连接可能内容一样但是字段名称不同

【例2】采用别名

【注意】
别名可以使简化查询、提高查询的执行效率;
用了表的别名不能用表的真名

(2)不等值连接 between…and
--查询员工信息:员工号、姓名、月薪和工资级别select e.empno,e.ename,e.sal,s.grade 
from emp e,salgrade s
where e.sal between s.losal and hisal
(3)外连接(+)

使用外连接可以查询不满足条件的数据
外连接的符号是(+)

语法格式:

【举例】

-- 按照部门统计员工人数:部门号,部门名称和人数select d.deptno,d.dname,count(e.empno)
from emp e ,dept d
where e.deptno(+) = d.deptno
group by d.deptno, d.dname;
(4)自连接

SQL自连接被用来联接表本身以作为两个表,暂时重命名,在SQL语句中至少有一个表。自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。

自连接的基本语法如下:

SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE amon_field = bmon_field;

在这里,WHERE子句可以根据您的需要给定的任意表达式。

【例1】:假设在【成绩表】有【主键ID】【学生姓名】【课程名称】【成绩】等字段。
现在要查询 “语文成绩>=数学成绩”的学生姓名,这时就可以使用自连接查询:

select 【学生姓名】
from 【成绩表】 AS a,【成绩表】 AS b
where a.【主键ID】=b.【主键ID】
and a.【成绩】>=b.【成绩】
and a.【课程名称】='语文'
and b.【课程名称】='数学'

自连接是指使用表的别名实现表与其自身连接的查询方法。

5.使用SQL1999连接

(1)基础语法

(2)叉集cross join

叉集和笛卡尔积是相同的
使用cross join 表示产生叉集

(3)自然连接natural join

natural join子句,会以两个表中具有相同名字的列为条件创建等值连接。
在表中查询满足等值条件的数据
如果只是列名相同而数据类型不同,则会产生错误

(4)using子句连接

natural juin 和using 子句经常联合使用
使用using子句时可以在多个列满足条件时进行选择
不要给选中的列中加上表名前缀或者别名
【举例】

mysql> select u.name from user u join goods using(gid);
+---------+
| name    |
+---------+
| 郭德纲  |
| 岳云鹏  |
| 于谦    |
| 牛群    |
| 冯巩    |
| 大兵    |
| 贾玲    |
| Kobe    |
| tony    |
| manu    |
| Tim     |
| Pop     |
| Paul    |
| Grephen |
| Stephen |
| GREEN   |
| topson  |
| Harden  |
| KEVIN   |
+---------+
19 rows in set (0.00 sec)
܇

上述方法和用join on的方式是等效的(在下面内容)

mysql> select u.name from user u join goods g on u.gid = g.gid;
+---------+
| name    |
+---------+
| 郭德纲  |
| 岳云鹏  |
| 于谦    |
| 牛群    |
| 冯巩    |
| 大兵    |
| 贾玲    |
| Kobe    |
| tony    |
| manu    |
| Tim     |
| Pop     |
| Paul    |
| Grephen |
| Stephen |
| GREEN   |
| topson  |
| Harden  |
| KEVIN   |
+---------+
19 rows in set (0.00 sec)
(5)用join …on子句连接

两个表连接

多个表连接

6.外连接

外连接分为左外连接、右外连接和全外连接。

内连接只返回满足条件的数据
两个表在连接的过程中除了返回满足条件的行以外还返回左(右)表中不满足条件的行,这种连接成为左(右)外连接。
返回两个表中不满足条件的数据称为全外连接(或满外连接)



更多推荐

Oracle数据库07

本文发布于:2024-02-06 06:32:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747347.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   Oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!