likes
comments
collection
share

除了内联结,还应该掌握的高级联结

作者站长头像
站长
· 阅读数 32

创建高级联结

使用表别名

🍨 这是我们之前使用到的表别名的例子

SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name;

别名除了用于列名和计算字段之外,SQL还允许给表名起列名。主要两个原有、

  1. 缩短SQL语句
  2. 允许在单条SELECT语句中多次使用相同的表

那么我们就来试一试这个别名

SELECT cust_name,cust_contact
FROM customers AS c ,orders AS o ,orderitems AS oi
WHERE c.cust_id = o.cust_id
        AND oi.order_num = o.order_num
        AND prod_id = 'TNT2';

除了内联结,还应该掌握的高级联结

使用不同类型的联结

直到现在,我们使用的都是内部联结或者等值联结的简单联结,下面我们要继续向前通关了呀。

自联结

例:你发现某物品存在问题,因此想知道生产该物品的供应商生产的其他物品是否也有这些问题。

SELECT  p1.prod_id , p2.prod_name
FROM products AS p1,products AS p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'DTNTR';

除了内联结,还应该掌握的高级联结

⛸使用别名,我们就可以用自联结而不是子查询。有时候会快的多。

自然联结

迄今为止,我们建立的每一个内部联结都是自然联结,很可能我们永远都不会用到不是自然联结的内部联结。

外部联结

联结包含哪些在相关表中没有关联行的行,这种类型的联结称为外部联结。

🌮 例:内部联结:

SELECT customers.cust_id ,orders.order_num
FROM customers INNER JOIN orders
ON customers.cust_id  = orders.cust_id;

除了内联结,还应该掌握的高级联结

🦅例:外部联结:

SELECT customers.cust_id ,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id  = orders.cust_id;

除了内联结,还应该掌握的高级联结

那个10002对应的null就很能说明问题,因为你是left联结,所以左边表是要包含全部内容的,所以就会有10002对应的null这样一个信息,因为你左联结了,所以左边表的所有行都要出现。

☔️mysql不支持一个*=的操作符,这在其他的dbms里是十分受欢迎的。

使用带聚集函数的联结

例: 检索所有客户以及每个客户所下的订单数

SELECT customers.cust_name,
        customers.cust_id,
        COUNT(orders.order_num) AS num_ord
FROM customers INNER JOIN  orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;

除了内联结,还应该掌握的高级联结

📨下面我们用一用这个左连接,把那些没有下单的客户也揪出来

SELECT customers.cust_name,
        customers.cust_id,
        COUNT(orders.order_num) AS num_ord
FROM customers LEFT OUTER JOIN  orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;

除了内联结,还应该掌握的高级联结

例:检索所有客户及每个客户所下的订单数

SELECT customers.cust_name,
        customers.cust_id,
        COUNT(orders.order_num) AS num_ord
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;

除了内联结,还应该掌握的高级联结

转载自:https://juejin.cn/post/7137871133985996836
评论
请登录