数据库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
发布评论