a、显式的内连接与隐式连接(inner join == join )
显示连接:SELECT * from employee join department on employee.DepartmentID = department.DepartmentID
等价于:
隐式连接:SELECT * from employee,department WHERE employee.DepartmentID = department.DepartmentID
注:当DepartmentID不匹配,就不会往结果表中生成任何数据。
b、相等连接
提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。
SELECT * from employee join department using (DepartmentID)
注:与显式连接不同在于:DepartmentID只显示一列
c、自然连接
比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。
自然连接得到的结果表中,两表中名称相同的列只出现一次.
select * from employee natural join department
注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,
则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"
或 "ORA-25155: column used in NATURAL join cannot have qualifier".
d、交叉连接(又称笛卡尔连接)
如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.
显示连接:
select * from employee cross join department
等价于
隐式连接:
select * from employee,department
join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的。
SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
http://www.w3school.com.cn/sql/sql_join.asp
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)