SQL 连接

自然连接

此操作仅仅把在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

外连接:通过悬浮元组里填充空值来是指成为查询结果
内连接:连接的表里面都要有对应的数据,否则无法显示

  1. JOIN…ON θ连接
    movies JOIN starsIn ON title=movieTitle AND year = movieYear

    NATURAL JOIN 自然连接 类似于JOIN
    两个等值的属性只投影一个
    movieStar NATURAL JOIN movieExec`
  2. JOIN: 如果表中有至少一个匹配,则返回行
    LEFT JOIN 左外连接: 即使右表中没有匹配,也从左表返回所有的行(LEFT OUTER JOIN)
    RIGHT JOIN 右外连接: 即使左表中没有匹配,也从右表返回所有的行(RIGHT OUTER JOIN)
    FULL JOIN 完全外连接: 只要其中一个表中存在匹配,就返回行(FULL OUTER JOIN)
    外连接表示即使其中一张表没有匹配也会显示另一张表的数据,没有数据的显示为空。
  3. 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;

猜你喜欢

转载自blog.csdn.net/Datura_Elena/article/details/78430687