大概上周看到leetcode開始做數(shù)據(jù)相關(guān)的挑戰(zhàn)題目,目前是基于MySQL的Sql測試題目。作為一個現(xiàn)在hive sql占掉大部分工作時間的碼農(nóng),還是可以選擇來練練手,今天立帖把這些題目一一解決。
第一題的描述:題目地址: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完成查詢?nèi)蝿眨喊?/span>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)
最后,啰嗦幾句,在我們現(xiàn)在的軟件開發(fā)過程中,數(shù)據(jù)處理應該是一個工程師必備的技能,身在大公司,可能sql的編寫有很多的限制,有的甚至不需要工程師來編寫,直接交給DBA就行了。在這樣的環(huán)境下,開發(fā)工程師往往丟掉了數(shù)據(jù)庫的基本功。而在大數(shù)據(jù)的浪潮下,在hive\pig\ODPS下編寫 sql 也成了數(shù)據(jù)開發(fā)工程師的基本技能,數(shù)據(jù)開發(fā)不能僅僅停留在寫sql實現(xiàn)功能,最重要的是理解Hadoop生態(tài)下,各種sql語句的原理。就像開發(fā)一樣,要寫出最高效的sql來處理數(shù)據(jù)。我相信leetcode對于sql的挑戰(zhàn)會是一個不錯的平臺,大家加油~~