题目类型:合并
难度:简单
题目链接:175. 组合两个表
思路:
本题使用左连接查询,在使用outer join
时,必须使用right
或left
来指定包含其所有行的表。
很明显,本体应将Person表作为所有行的表,即Person作为主表。
SQL语句:
select firstName, lastName, city, state
from Person left join Address
on Person.personId = Address.personId;
题目链接:1581. 进店却未进行过交易的顾客
思路:
这一题稍微比上一题有点难度,这一题要用到count()函数,还要对数据进行分组,但整体来说也算还行。
稍稍熟练这一类题的做法,也不难。
SQL语句:
select v.customer_id as customer_id, count(v.customer_id) as count_no_trans
from Visits v left join Transactions t
on v.visit_id = t.visit_id
where t.transaction_id is null
group by v.customer_id;
题目链接:1148. 文章浏览 I
思路:
这一题也是基本没啥难度,就将表中author_id和viewer_id相同的数据升序排列返回就行了。
SQL语句:
select distinct author_id as id
from Views
where author_id = viewer_id
order by author_id;
题目链接:197. 上升的温度
思路:
这一题要运用一个日期处理函数datediff():计算两个日期之差
要计算昨天的,就要将主表与连接表的日期只差设为1,这样就能得到与昨天日期的差了。
并且今天的温度要大于昨天的,这样才行。
SQL语句:
select w1.id
from Weather w1 JOIN
Weather w2
on DATEDIFF(w1.recordDate, w2.recordDate) = 1
and w1.temperature > w2.temperature;
题目链接:607. 销售员
SQL语句:
SELECT
s.name
FROM
salesperson s
WHERE
s.sales_id NOT IN (SELECT
o.sales_id
FROM
orders o
LEFT JOIN
company c ON o.com_id = c.com_id
WHERE
c.name = 'RED')
;