题目:https://leetcode-cn.com/problems/product-sales-analysis-i/
销售表 Sales:
+-------------+-------+
| Column Name | Type |
+-------------+-------+
| sale_id | int |
| product_id | int |
| year | int |
| quantity | int |
| price | int |
+-------------+-------+
(sale_id, year) 是销售表 Sales 的主键.
product_id 是关联到产品表 Product 的外键.
注意: price 表示每单位价格
产品表 Product:
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| product_id | int |
| product_name | varchar |
+--------------+---------+
product_id 是表的主键.
写一条SQL 查询语句获取 Sales 表中所有产品对应的 产品名称 product_name 以及该产品的所有 售卖年份 year 和 价格 price 。
示例:
Sales 表:
+---------+------------+------+----------+-------+
| sale_id | product_id | year | quantity | price |
+---------+------------+------+----------+-------+
| 1 | 100 | 2008 | 10 | 5000 |
| 2 | 100 | 2009 | 12 | 5000 |
| 7 | 200 | 2011 | 15 | 9000 |
+---------+------------+------+----------+-------+
Product 表:
+------------+--------------+
| product_id | product_name |
+------------+--------------+
| 100 | Nokia |
| 200 | Apple |
| 300 | Samsung |
+------------+--------------+
Result 表:
+--------------+-------+-------+
| product_name | year | price |
+--------------+-------+-------+
| Nokia | 2008 | 5000 |
| Nokia | 2009 | 5000 |
| Apple | 2011 | 9000 |
+--------------+-------+-------+
代码:
SELECT Product.product_name, Sales.year, Sales.price FROM Product, Sales WHERE Product.product_id = Sales.product_id
where的效率是相当差的,因为数据库会先创建了一张笛卡尔积表,所有Product与Sales的组合都被创建出来,假如Product有10条记录,Sales有10条记录,那么先会创建出100个结果,然后再从100个结果中筛选product_id满足条件的情况。所以可以用inner join去替代where(部分数据库会自动将where转换为inner join)。
SELECT Product.product_name, Sales.year, Sales.price FROM Product INNER JOIN Sales ON Product.product_id = Sales.product_id