连接
大约 2 分钟
连接
内连接
找出供应商生产的产品。
SELECT vend_name, prod_name
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id; #连接条件使用on子句
等价于:
SELECT vend_name, prod_name
FROM vendors, products
WHERE vendors.vend_id = products.vend_id;
没有给出连接条件的话,会得到两张表的笛卡尔积。
自连接
找出生产nike的供应商生产的所有物品。
SELECT prod_id, prod_name
FROM products AS p1, products AS p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'nike';
自然连接
natural join是对两张表中字段名和数据类型都相同的字段进行等值连接,并返回符合条件的结果 。
SELECT * FROM role NATURAL JOIN user_role;
返回结果:
内连接
显示符合连接条件的记录。没有设置连接条件则返回笛卡尔积的结果。join 默认是 inner join。
SELECT * FROM role INNNER JOIN user_role
返回结果:
join…using(column)按指定的属性做等值连接。 join…on tableA.column1 = tableB.column2 指定条件。
SELECT * FROM role INNER JOIN user_role ON role.role_id = user_role.role_id
返回结果:
外连接
左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。 右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。 在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系。
查找所有客户及其订单,包括没有下过订单的客户。使用左外连接,保留左边表的所有记录。
SELECT customer.cust_id, order.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = order.cust_id;
多表连接
SELECT goal.player, eteam.teamname, game.stadium, game.mdate
FROM game JOIN goal
ON game.id = goal.matchid
JOIN eteam
ON eteam.id = goal.teamid
WHERE eteam.id = 'GRE'
Loading...