从没有连接的多个表中选择这个sql查询的类型是什么?

时间:2013-09-18 00:47:35

标签: sql

3表架构:

create table EMP
(ID char(9) not null primary key,
NAME varchar(20) not null,
AGE integer not null,
SALARY number not null,
constraint min_salary check (salary>30000));

create table DEPARTMENT
(DNUMBER integer not null primary key,
 DNAME varchar(15) not null unique,
 BUDGET float not null,
 MANAGER char(9) not null references EMP);

create table WORKS
(EMP char(9) not null references EMP,
DEPT integer not null references DEPARTMENT,
PCT_TIME integer,
constraint check_pct check (PCT_TIME between 0 and 100), constraint WORKS_PK PRIMARY KEY (EMP,DEPT));

这是什么类型的查询:

select name,age
from emp,department,works
where id=emp and dname='Software' and dept=dnumber

它从3个表中选择但没有连接关键字?

3 个答案:

答案 0 :(得分:3)

select name,age
from emp,department,works
where id=emp and dname='Software' and dept=dnumber

...似乎是一个隐式的内连接查询。表格之间的,有效地执行CROSS JOIN,返回笛卡尔积,where id=emp and dname='Software' and dept=dnumber有效地过滤笛卡尔积,产生与INNER JOIN相同的效果。标准字段不使用表名限定,因为它们不含糊不清。

某些数据库引擎可能无法为此类连接创建有效的查询计划,因为它们与显式内部联接查询一样。

答案 1 :(得分:0)

我认为这被称为笛卡尔积。它被定义为没有限制因素的链接表,例如连接语句。

刚从这里确认:http://wiki.answers.com/Q/What_is_sql_cartesian_product

答案 2 :(得分:0)

这是对的。您可以选择:

SELECT * FROM Table1, Table2

将执行完全右外连接

如果您想进行左连接,请执行以下操作:

SELECT * FROM Table1, Table2 WHERE Table1.FID = Table2.ID

(其中FID是表2中id的外来id)。

所以基本上,你的查询仍然是一个连接查询。