您的位置:首页 > 数据库 > Oracle

Oracle多表查询

2019-05-16 21:09 197 查看

Oracle中查询不但可以从一张表查询数据,还可以从多张表同时查询数据。

查询多张表的语法是:

SELECT  *  FROM <表1>, <表2>,…

 

例如,同时从employees表和departmenst表的“乘积”,即查询数据,可以这么写:

SELECT * FROM employees, departments;

 

这种一次查询两个表的数据,查询的结果也是一个二维表,它是employees表和departments表的“乘积”,即employees表的每一行与department表的每一行都两两拼在一起返回。结果集的列数是employees表和departments表的列数之和,行数是employees表和departments表的行数之积。

 

这种多表查询又称笛卡尔查询,在使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录。

 

你可能还注意到了,上述查询的结果集有两列department_id,两列id是因为其中一列是employees表的department_id,而另一列是departments表的department_id,但是在结果集之中,不容易区分开来。

这样子,我们就可以利用 “列的别名”来给两个表各自的department_id列起别名:

select employees.department_id,departments.department_id

from employees,departments

 

在使用多表查询时,要使用表名.列名这样的方式来引用列和设置别名,这样就可以避免结果集的列名重复问题。但是用表名.列名这种方式列举两个表的所有列很麻烦,所以我们可以给表设置一个别名:

select e.department_id,d.department_id

from employees e,departments d

 

注意到FROM子句给表设置别名的语法是FROM <表名1> <别名1>, <表名2> <别名2>。这样我们用别名s和c分别表示employees表和department表。

 

在多表查询中添加WHERE条件的:

select e.department_id,d.department_id

from employees e,departments d

where d.department_id > 50

 

这个查询的结果集每行记录都满足条件d.department_id > 50。

在使用WHERE条件后结果集的数量大大减少了,这样更有利于找到我们需要的数据。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: