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个表中选择但没有连接关键字?
答案 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)。
所以基本上,你的查询仍然是一个连接查询。