大概上周看到leetcode开始做数据相关的挑战题目,目前是基于MySQL的Sql测试题目。作为一个现在hive sql占掉大部分工作时间的码农,还是可以选择来练练手,今天立帖把这些题目一一解决。
第一题的描述:题目地址:https://oj.leetcode.com/problems/combine-two-tables/
一张表叫做Person,主键是PersonId
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
另一张表叫做Address,主键是AddressId
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
题目要求写一个sql完成查询任务:把Person表中每个人的FirstName,LastName,City和State都查询出来。
这明显是个非常简单的sql,只要拿Person表做左表进行left outer join即可(当然做右表进行right join也行)
1 select
2 o1.FirstName
3 ,o1.LastName
4 ,o2.City
5 ,o2.State
6 from(
7 select * from Person
8 )o1
9 left outer join(
10 select * from Address
11 )o2
12 on(o1.PersonId = o2.PersonId)
最后,啰嗦几句,在我们现在的软件开发过程中,数据处理应该是一个工程师必备的技能,身在大公司,可能sql的编写有很多的限制,有的甚至不需要工程师来编写,直接交给DBA就行了。在这样的环境下,开发工程师往往丢掉了数据库的基本功。而在大数据的浪潮下,在hive\pig\ODPS下编写 sql 也成了数据开发工程师的基本技能,数据开发不能仅仅停留在写sql实现功能,最重要的是理解Hadoop生态下,各种sql语句的原理。就像开发一样,要写出最高效的sql来处理数据。我相信leetcode对于sql的挑战会是一个不错的平台,大家加油~~