中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何快速上手SQL

這篇文章主要為大家展示了“如何快速上手SQL”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何快速上手SQL”這篇文章吧。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供墨竹工卡網(wǎng)站建設(shè)、墨竹工卡做網(wǎng)站、墨竹工卡網(wǎng)站設(shè)計、墨竹工卡網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、墨竹工卡企業(yè)網(wǎng)站模板建站服務(wù),十年墨竹工卡做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

兩張示例表


為了方便練習(xí)SQL語法,特地準(zhǔn)備了兩張hive表,ide_test.flightside_test.airports, 表結(jié)構(gòu)如下面的建表語句。另外兩張表中各有數(shù)行測試數(shù)據(jù),可以在練習(xí)SQL時直接使用。

Flights表

CREATE TABLE `ide_test.flights`(
  `year` string COMMENT 'year', 
  `month` string COMMENT 'month', 
  `day` string COMMENT 'day', 
  `dep_time` string COMMENT '起飛時間', 
  `crs_dep_time` string COMMENT '計劃起飛時間', 
  `arr_time` string COMMENT '到達(dá)時間', 
  `crs_arr_time` string COMMENT '計劃到達(dá)時間', 
  `carrier_code` string COMMENT '航空公司代號', 
  `flight_num` string COMMENT '航班號', 
  `actual_elapsed_time` string COMMENT '實際耗時', 
  `crs_elapsed_time` string COMMENT '計劃耗時', 
  `air_time` string COMMENT '飛行時間', 
  `arr_delay` string COMMENT '到達(dá)延遲', 
  `dep_delay` string COMMENT '起飛延遲', 
  `origin` string COMMENT '起飛機場', 
  `dest` string COMMENT '目標(biāo)機場', 
  `distance` string COMMENT '距離')
COMMENT '測試數(shù)據(jù)-航班信息'

Airports表

CREATE TABLE `ide_test.airports`(
  `name` string COMMENT 'name', 
  `country` string COMMENT 'country', 
  `area_code` string COMMENT 'area_code', 
  `code` string COMMENT 'code')
COMMENT '測試數(shù)據(jù)-機場信息'

SQL示例


簡單select查詢

使用select語句可以查看表里的數(shù)據(jù)

select用法

select name from ide_test.airports limit 5  --查詢ide_test.airports表中的name列,返回5行
select * from ide_test.airports limit 5  --使用 '*'代表表中所有列

特別提示:限制SQL返回的行數(shù)是一個好習(xí)慣,如上面的 limit 5, 表示最多返回5行數(shù)據(jù)

資料: 深入理解Hive Select語法

使用where語句按條件篩選

使用where語句,可以根據(jù)指定的條件刷選數(shù)據(jù),例如查看航班號為335的航班信息

where用法

select
    *   -- 返回表里所有列
from
    ide_test.flights
where
    flight_num= '335' --返回flight_num列為'335'的記錄
limit 5

Tips: where后面跟的是一個邏輯表達(dá)式,多個邏輯表達(dá)式用 AND、OR來連接

使用distinct語句排重

某一列(或多列)時常會有重復(fù)的值,有時候需要去重之后再查看,可以使用distinct語句來完成這個功能。例如查看ide_test.flights表中包含了那幾年的數(shù)據(jù),可以使用下面的SQL語句來完成:

distinct 用法

select
    distinct year  -- distinct會對year列的值去重之后,再返回
from
    ide_test.flights
limit 10

Tips**:**查看某列包含了哪些值,有更好的寫法,這里只是展示下distinct語句的用法

使用order by語句對查詢結(jié)果排序

找出起飛時間最晚的5個航班

order by 用法

select
    origin, dest, flight_num, dep_time
from
    ide_test.flights
order by dep_time desc    -- 按照起飛時間倒序排列, desc表示由大到小排序, asc(或者是省略不寫)表示由小到大排序 
limit 5

使用sum/count/avg計算總和/計數(shù)/平均值等

使用count()函數(shù)可以計數(shù),比如要看一下ide_test.flights表里一共有多少個航班信息,則可以這么寫:

count 用法

select
    count(flight_num) as cnt -- count函數(shù)表示計數(shù)
from
    ide_test.flights
limit 10

sum()表示按照指定的列求和,比如計算一下335號航班一共飛行了多少公里

sum 用法

select
    sum(cast(distance as int)) as total_distance --sum函數(shù)表示求和
from
    ide_test.flights
where
    flight_num = '335'
limit  10

Tips: count/sum這種函數(shù)叫聚合函數(shù),還有其他聚合函數(shù),比如avg/max/min分別用戶求平均值、最大值和最小值

資料: 深入理解Hive函數(shù)

使用group by按照分組計算

group by語句的用處很大,它可以先對數(shù)據(jù)分組、然后再計算,看個例子就明白了。比如,要計算每個航班飛行的里程數(shù),并按照總數(shù)由大到小取前10個,寫法如下:

group by 用法

select
    flight_num, sum(distance) as total_distance --除了sum/count/avg/min/max這些聚合函數(shù)之外,明確寫在select之后的列,必須同時出現(xiàn)在group by的后面
from
    ide_test.flights
group by flight_num  --按照航班號分組,對每一組的里程數(shù)求和
order by total_distance desc
limit  10

還有一種情況,查詢總飛行里程數(shù)大于3000的航班號,這時having語句就排上用場了

having 語法

select
    flight_num --寫在select之后的列,必須同時出現(xiàn)在group by的后面
from
    ide_test.flights
group by flight_num
having sum(distance) > 3000 --刷選出飛行總里程大于3000的航班
limit  5

小思考:為什么這種情況下要使用having來作為篩選條件,而不是使用where?

資料: 深入理解Hive Group by語法

子查詢

要計算飛行總里程大于3000的航班數(shù)量,SQL可以這么寫

子查詢用法

select count(1) as cnt 
from
(
    select flight_num
    from  ide_test.flights
    group by flight_num
    having sum(distance) > 3000
) t

Tips: 子查詢的用法和普通hive表是一樣的,一般為了清晰,會使用括號’()’把子查詢包含起來

資料:深入理解Hive 子查詢

使用join從多張表中查詢數(shù)據(jù)

假如,我們計劃查詢每個航班的飛行里程和起始機場名稱,因為這兩個信息分別存儲在兩張不同的hive表中,因此需要同時查詢兩張hive表才能得到結(jié)果,寫法如下

join 用法

select
    p.flight_num, -- 從flights表取出航班號
    p.distance, --從flights表取出飛行里程
    q.name  --從airports表取出出發(fā)的機場名稱
from
    ide_test.flights p
left join ide_test.airports q 
on p.origin = q.code
limit 10

Tips**:**

left join**:**左表關(guān)聯(lián)右表,當(dāng)坐標(biāo)中存在某值而右表不存在時,則右表對應(yīng)信息使用null代替

inner join**:**只有左表和右表都存在對應(yīng)值的時候,才出現(xiàn)的結(jié)果中

right join**:**與left join相反

full outer join**:**當(dāng)左表或右表不存在相應(yīng)值時,使用null代替

注意:

如果A中有m條記錄,B中有n條記錄,A join B的時候,則最多會產(chǎn)生m\n*條記錄,想想為什么?

資料

深入理解Hive Join語法

使用union all拼接多份數(shù)據(jù)

UNION 語句符用于合并兩個或多個 SELECT 語句的結(jié)果集。

選出飛行里程大于1000或小于100的航班,SQL寫法如下:

注意:這里只是為了展示union用法,顯然應(yīng)該有更好的寫法,自己思考下:)

union 用法

select flight_num
from ide_test.flights
where distance > 1000 
union 
select flight_num
from ide_test.flights
where distance < 100

Tips: 請注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時,每條 SELECT 語句中的列的順序必須相同

資料:深入理解Hive Union語法

使用case when控制列輸出

查詢航班的飛行距離,按照距離分成“長、中、短”三個級別,可以借助case when語句來實現(xiàn),示例寫法:

case when 用法

select flight_num,
distance,
case when distance > 3000 then '長距離航班'
    when distance > 1000 then '中距離航班'
    else '近距離航班'
end as flight_level
from ide_test.flights
limit 10

以上是“如何快速上手SQL”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

名稱欄目:如何快速上手SQL
文章來源:http://www.rwnh.cn/article48/jipphp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗定制開發(fā)、網(wǎng)站策劃、域名注冊Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
汽车| 高雄市| 平凉市| 平安县| 湖口县| 桦南县| 岳池县| 馆陶县| 伊通| 曲靖市| 墨脱县| 龙井市| 正定县| 南岸区| 江北区| 宁陕县| 磴口县| 邻水| 波密县| 文水县| 华蓥市| 宁武县| 邮箱| 萝北县| 柘城县| 陕西省| 右玉县| 咸阳市| 馆陶县| 嘉定区| 鲁甸县| 大同市| 雷山县| 酒泉市| 开江县| 昌邑市| 邵武市| 平谷区| 金塔县| 廉江市| 东乌珠穆沁旗|