zoukankan      html  css  js  c++  java
  • MariaDB JOIN

    MariaDB JOIN 

    JOIN两张表

    (jlive)[crashcourse]>SELECT vend_name, prod_name, prod_price FROM vendors, products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name;

    +-------------+----------------+------------+

    | vend_name   | prod_name      | prod_price |

    +-------------+----------------+------------+

    | ACME        | Bird seed          10.00 |

    | ACME        | Carrots        |       2.50 |

    | ACME        | Detonator          13.00 |

    | ACME        | Safe               50.00 |

    | ACME        | Sling          |       4.49 |

    | ACME        | TNT (1 stick)  |       2.50 |

    | ACME        | TNT (5 sticks) |      10.00 |

    | Anvils R Us | .5 ton anvil   |       5.99 |

    | Anvils R Us | 1 ton anvil    |       9.99 |

    | Anvils R Us | 2 ton anvil        14.99 |

    | Jet Set     | JetPack 1000       35.00 |

    | Jet Set     | JetPack 2000       55.00 |

    | LT Supplies | Fuses          |       3.42 |

    | LT Supplies | Oil can        |       8.99 |

    +-------------+----------------+------------+

    14 rows in set (0.01 sec)

    如果不加两张表的关联条件,则查询结果有误

    (jlive)[crashcourse]>SELECT vend_name, prod_name, prod_price FROM vendors, products ORDER BY vend_name, prod_name;

    +----------------+----------------+------------+

    | vend_name      | prod_name      | prod_price |

    +----------------+----------------+------------+

    | ACME           | .5 ton anvil   |       5.99 |

    | ACME           | 1 ton anvil    |       9.99 |

    | ACME           | 2 ton anvil        14.99 |

    | ACME           | Bird seed          10.00 |

    | ACME           | Carrots        |       2.50 |

    | ACME           | Detonator          13.00 |

    | ACME           | Fuses          |       3.42 |

    | ACME           | JetPack 1000       35.00 |

    | ACME           | JetPack 2000       55.00 |

    | ACME           | Oil can        |       8.99 |

    | ACME           | Safe               50.00 |

    | ACME           | Sling          |       4.49 |

    | ACME           | TNT (1 stick)  |       2.50 |

    | ACME           | TNT (5 sticks) |      10.00 |

    | Anvils R Us    | .5 ton anvil   |       5.99 |

    | Anvils R Us    | 1 ton anvil    |       9.99 |

    | Anvils R Us    | 2 ton anvil        14.99 |

    | Anvils R Us    | Bird seed          10.00 |

    | Anvils R Us    | Carrots        |       2.50 |

    | Anvils R Us    | Detonator          13.00 |

    | Anvils R Us    | Fuses          |       3.42 |

    | Anvils R Us    | JetPack 1000       35.00 |

    | Anvils R Us    | JetPack 2000       55.00 |

    | Anvils R Us    | Oil can        |       8.99 |

    | Anvils R Us    | Safe               50.00 |

    | Anvils R Us    | Sling          |       4.49 |

    | Anvils R Us    | TNT (1 stick)  |       2.50 |

    | Anvils R Us    | TNT (5 sticks) |      10.00 |

    | Furball Inc.   | .5 ton anvil   |       5.99 |

    | Furball Inc.   | 1 ton anvil    |       9.99 |

    | Furball Inc.   | 2 ton anvil        14.99 |

    | Furball Inc.   | Bird seed          10.00 |

    | Furball Inc.   | Carrots        |       2.50 |

    | Furball Inc.   | Detonator          13.00 |

    | Furball Inc.   | Fuses          |       3.42 |

    | Furball Inc.   | JetPack 1000       35.00 |

    | Furball Inc.   | JetPack 2000       55.00 |

    | Furball Inc.   | Oil can        |       8.99 |

    | Furball Inc.   | Safe               50.00 |

    | Furball Inc.   | Sling          |       4.49 |

    | Furball Inc.   | TNT (1 stick)  |       2.50 |

    | Furball Inc.   | TNT (5 sticks) |      10.00 |

    | Jet Set        | .5 ton anvil   |       5.99 |

    | Jet Set        | 1 ton anvil    |       9.99 |

    | Jet Set        | 2 ton anvil        14.99 |

    | Jet Set        | Bird seed          10.00 |

    | Jet Set        | Carrots        |       2.50 |

    | Jet Set        | Detonator          13.00 |

    | Jet Set        | Fuses          |       3.42 |

    | Jet Set        | JetPack 1000       35.00 |

    | Jet Set        | JetPack 2000       55.00 |

    | Jet Set        | Oil can        |       8.99 |

    | Jet Set        | Safe               50.00 |

    | Jet Set        | Sling          |       4.49 |

    | Jet Set        | TNT (1 stick)  |       2.50 |

    | Jet Set        | TNT (5 sticks) |      10.00 |

    | Jouets Et Ours | .5 ton anvil   |       5.99 |

    | Jouets Et Ours | 1 ton anvil    |       9.99 |

    | Jouets Et Ours | 2 ton anvil        14.99 |

    | Jouets Et Ours | Bird seed          10.00 |

    | Jouets Et Ours | Carrots        |       2.50 |

    | Jouets Et Ours | Detonator          13.00 |

    | Jouets Et Ours | Fuses          |       3.42 |

    | Jouets Et Ours | JetPack 1000       35.00 |

    | Jouets Et Ours | JetPack 2000       55.00 |

    | Jouets Et Ours | Oil can        |       8.99 |

    | Jouets Et Ours | Safe               50.00 |

    | Jouets Et Ours | Sling          |       4.49 |

    | Jouets Et Ours | TNT (1 stick)  |       2.50 |

    | Jouets Et Ours | TNT (5 sticks) |      10.00 |

    | LT Supplies    | .5 ton anvil   |       5.99 |

    | LT Supplies    | 1 ton anvil    |       9.99 |

    | LT Supplies    | 2 ton anvil        14.99 |

    | LT Supplies    | Bird seed          10.00 |

    | LT Supplies    | Carrots        |       2.50 |

    | LT Supplies    | Detonator          13.00 |

    | LT Supplies    | Fuses          |       3.42 |

    | LT Supplies    | JetPack 1000       35.00 |

    | LT Supplies    | JetPack 2000       55.00 |

    | LT Supplies    | Oil can        |       8.99 |

    | LT Supplies    | Safe               50.00 |

    | LT Supplies    | Sling          |       4.49 |

    | LT Supplies    | TNT (1 stick)  |       2.50 |

    | LT Supplies    | TNT (5 sticks) |      10.00 |

    +----------------+----------------+------------+

     

    84 rows in set (0.00 sec)



    INNER JOIN两张表

    (jlive)[crashcourse]>SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;

    +-------------+----------------+------------+

    | vend_name   | prod_name      | prod_price |

    +-------------+----------------+------------+

    | Anvils R Us | .5 ton anvil   |       5.99 |

    | Anvils R Us | 1 ton anvil    |       9.99 |

    | Anvils R Us | 2 ton anvil        14.99 |

    | LT Supplies | Oil can        |       8.99 |

    | LT Supplies | Fuses          |       3.42 |

    | ACME        | Sling          |       4.49 |

    | ACME        | TNT (1 stick)  |       2.50 |

    | ACME        | TNT (5 sticks) |      10.00 |

    | ACME        | Bird seed          10.00 |

    | ACME        | Carrots        |       2.50 |

    | ACME        | Safe               50.00 |

    | ACME        | Detonator          13.00 |

    | Jet Set     | JetPack 1000       35.00 |

    | Jet Set     | JetPack 2000       55.00 |

    +-------------+----------------+------------+

     

    14 rows in set (0.00 sec)

    比WHERE效率更高,性能更好


    JOIN多张表

    (jlive)[crashcourse]>SELECT prod_name, vend_name, prod_price, quantity FROM orderitems, products, vendors WHERE products.vend_id = vendors.vend_id AND orderitems.prod_id = products.prod_id AND order_num = 20005;

    +----------------+-------------+------------+----------+

    | prod_name      | vend_name   | prod_price | quantity |

    +----------------+-------------+------------+----------+

    | .5 ton anvil   | Anvils R Us |       5.99 |       10 |

    | 1 ton anvil    | Anvils R Us |       9.99 |        3 |

    | TNT (5 sticks) | ACME            10.00 |        5 |

    | Bird seed      | ACME            10.00 |        1 |

    +----------------+-------------+------------+----------+

     

    4 rows in set (0.00 sec)



    Self JOIN

    (jlive)[crashcourse]>SELECT prod_id, prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR');

    +---------+----------------+

    | prod_id | prod_name      |

    +---------+----------------+

    | SLING   | Sling          |

    | TNT1    | TNT (1 stick)  |

    | TNT2    | TNT (5 sticks) |

    | FB      | Bird seed      |

    | FC      | Carrots        |

    | SAFE    | Safe           |

    | DTNTR   | Detonator      |

    +---------+----------------+

    7 rows in set (0.00 sec)


    (jlive)[crashcourse]>SELECT p1.prod_id, p1.prod_name FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';

    +---------+----------------+

    | prod_id | prod_name      |

    +---------+----------------+

    | SLING   | Sling          |

    | TNT1    | TNT (1 stick)  |

    | TNT2    | TNT (5 sticks) |

    | FB      | Bird seed      |

    | FC      | Carrots        |

    | SAFE    | Safe           |

    | DTNTR   | Detonator      |

    +---------+----------------+

     

    7 rows in set (0.00 sec)

    同一张表做查询,妙用别名


    Natural JOIN

    (jlive)[crashcourse]>SELECT c.*, o.order_num, o.order_date, oi.prod_id, oi.quantity, oi.item_price 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 = 'FB';

    +---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------+

    | cust_id | cust_name   | cust_address   | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email      | order_num | order_date          | prod_id | quantity | item_price |

    +---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------+

    |   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com |     20005 | 2011-09-01 00:00:00 | FB            1 |      10.00 |

    |   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com |     20009 | 2011-10-08 00:00:00 | FB            1 |      10.00 |

    +---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+-----------+---------------------+---------+----------+------------+

     

    2 rows in set (0.00 sec)


    OUTER JOIN

    (jlive)[crashcourse]>SELECT customers.cust_id, orders.order_num FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id;

    +---------+-----------+

    | cust_id | order_num |

    +---------+-----------+

    |   10001 |     20005 |

    |   10003 |     20006 |

    |   10004 |     20007 |

    |   10005 |     20008 |

    |   10001 |     20009 |

    +---------+-----------+

    5 rows in set (0.00 sec)


    (jlive)[crashcourse]>SELECT customers.cust_id, orders.order_num FROM customers RIGHT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

    +---------+-----------+

    | cust_id | order_num |

    +---------+-----------+

    |   10001 |     20005 |

    |   10003 |     20006 |

    |   10004 |     20007 |

    |   10005 |     20008 |

    |   10001 |     20009 |

    +---------+-----------+

     

    5 rows in set (0.00 sec)


    (jlive)[crashcourse]>SELECT customers.cust_id, orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

    +---------+-----------+

    | cust_id | order_num |

    +---------+-----------+

    |   10001 |     20005 |

    |   10001 |     20009 |

    |   10002 |      NULL |

    |   10003 |     20006 |

    |   10004 |     20007 |

    |   10005 |     20008 |

    +---------+-----------+

     

    6 rows in set (0.00 sec)

    Inner Join的两张表都有相关的行,Outer Join既包含两张表的相关行也包含不相关的行,故有左右之分,必须使用LEFT(或RIGHT),LEFT是以JOIN左边的表(customers)为基准,RIGHT是以JOIN右边的表(orders)为基准,始终查询显示完LEFT(或RIGHT)为止



    JOIN with Aggregate


    (jlive)[crashcourse]>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;

    +----------------+---------+---------+

    | cust_name      | cust_id | num_ord |

    +----------------+---------+---------+

    | Coyote Inc.    |   10001 |       2 |

    | Wascals        |   10003 |       1 |

    | Yosemite Place |   10004 |       1 |

    | E Fudd         |   10005 |       1 |

    +----------------+---------+---------+

     

    4 rows in set (0.00 sec)

    (jlive)[crashcourse]>SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS num_ord FROM customers RIGHT OUTER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;

    +----------------+---------+---------+

    | cust_name      | cust_id | num_ord |

    +----------------+---------+---------+

    | Coyote Inc.    |   10001 |       2 |

    | Wascals        |   10003 |       1 |

    | Yosemite Place |   10004 |       1 |

    | E Fudd         |   10005 |       1 |

    +----------------+---------+---------+

     

    4 rows in set (0.00 sec)

  • 相关阅读:
    MySQL(数据库)
    移动端兼容
    Vue常用指令
    JS浮点运算精度问题
    ES11新增的9个新特性
    后端要采用ArrayBuffer上传文件
    重磅来袭 Vue 3.0 One Piece 正式发布
    Vue 事件的高级使用方法
    浏览器的回流与重绘(Reflow&Repaint)
    微前端介绍
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814183.html
Copyright © 2011-2022 走看看