自然连接
此操作仅仅把在R和S模式中有某共同属性,且此属性有相同的值的元组配对。
如果一个元组不能和另外关系中的任何一个元组配对的话,这个元组被称为悬浮元组
关系U
A | B | C |
---|---|---|
1 | 2 | 3 |
6 | 7 | 8 |
9 | 7 | 8 |
关系V
B | C | D |
---|---|---|
2 | 3 | 4 |
2 | 3 | 5 |
7 | 8 | 10 |
关系U与关系V的自然连接
A | B | C | D |
---|---|---|---|
1 | 2 | 3 | 4 |
1 | 2 | 3 | 5 |
6 | 7 | 8 | 10 |
9 | 7 | 8 | 10 |
外连接:通过悬浮元组里填充空值来是指成为查询结果
内连接:连接的表里面都要有对应的数据,否则无法显示
- JOIN…ON θ连接
movies JOIN starsIn ON title=movieTitle AND year = movieYear
NATURAL JOIN 自然连接 类似于JOIN
两个等值的属性只投影一个
movieStar NATURAL JOIN movieExec` - JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN 左外连接: 即使右表中没有匹配,也从左表返回所有的行(LEFT OUTER JOIN)
RIGHT JOIN 右外连接: 即使左表中没有匹配,也从右表返回所有的行(RIGHT OUTER JOIN)
FULL JOIN 完全外连接: 只要其中一个表中存在匹配,就返回行(FULL OUTER JOIN)
外连接表示即使其中一张表没有匹配也会显示另一张表的数据,没有数据的显示为空。 - INNER JOIN 内连接:在表中存在至少一个匹配时,INNER JOIN 关键字返回行
INNER JOIN 与JOIN相同
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
建立连接视图(内连接)
CREATE OR REPLACE VIEW v_distribution_goods
AS
SELECT DG.*,
G.f_brandCode, G.f_brandName, G.f_name f_goodsName, G.f_saleSpec, G.f_unitName,
SGP.f_execPrice,
D.f_warehouseCode,
(ST.f_quantity-ST.f_lockedQuantity)f_stockQuantity -- 库存量等于数量减去锁定量
FROM t_distribution_goods DG
INNER JOIN t_distribution D ON DG.f_distNumber=D.f_distNumber
INNER JOIN v_goods G ON DG.f_goodsId=G.f_id
INNER JOIN t_shop_goods_price SGP ON SGP.f_shopCode=D.f_shopCode AND SGP.f_goodsId=DG.f_goodsId
INNER JOIN t_stock_total ST ON G.f_id=ST.f_goodsId AND D.f_warehouseCode=ST.f_warehouseCode;
左连接(外连接)
CREATE OR REPLACE VIEW v_goods_temp
AS
SELECT T.*, S.f_code f_superCategoryCode, U.f_code f_unitCode, B.f_code f_brandCode
FROM t_goods_temp T
LEFT JOIN t_super_category S ON T.f_superCategoryName=S.f_name
LEFT JOIN t_unit U ON T.f_unitName=U.f_name
LEFT JOIN t_brand B ON T.f_brandName=B.f_name;