想学数据分析但不会Python,过来看看SQL吧(上)~
SQL
SQL基礎(chǔ):語法,檢索,排序,過濾,創(chuàng)建計(jì)算字段和使用別名;
SQL進(jìn)階:鏈接表,聚合,分組,條件判斷,子查詢以及時間序列的處理;
Python
Python基礎(chǔ):語法,數(shù)據(jù)類型,運(yùn)算符,控制流,函數(shù),腳本編寫及本地環(huán)境搭建;
Python數(shù)據(jù)處理:Numpy與Pandas;
Python可視化:Matplotlib,Pyecharts;
統(tǒng)計(jì)學(xué)
統(tǒng)計(jì)學(xué)基礎(chǔ):描述統(tǒng)計(jì)學(xué),概率,正態(tài)分布,隨機(jī)抽樣,中心極限定律等;
統(tǒng)計(jì)學(xué)進(jìn)階:推論統(tǒng)計(jì)學(xué),置信區(qū)間,假設(shè)檢驗(yàn),線性回歸,邏輯回歸等。
所有以上的這些技法都只是工具,所以要以會用且熟練為目的,把學(xué)習(xí)重點(diǎn)放在應(yīng)用層面,多動手便能事半功倍!我們今天先從數(shù)據(jù)分析必備技能中最為簡單的SQL來開始學(xué)習(xí)吧!(這篇文章介紹的主要是SQL基礎(chǔ),文章末尾也會給出在線的練習(xí)SQL的網(wǎng)站)
知識清單
SQL簡介
SQL是Structured Query Language的簡寫,也就是結(jié)構(gòu)化查詢語言。它最受歡迎的功能便是對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行增刪改查。作為數(shù)據(jù)分析師,會經(jīng)常使用SQL語言從數(shù)據(jù)庫中查詢并提取數(shù)據(jù),而增刪改則一般由數(shù)據(jù)工程師去操作。
🙋?♂?你可能聽說過 NoSQL,它表示 Not only SQL(不僅僅是 SQL),與NoSQL的數(shù)據(jù)庫進(jìn)行交互時,你編寫的代碼會與本課程中所學(xué)的SQL有所不同。最常用的 NoSQL 語言之一是 MongoDB(https://www.mongodb.com/),可以自行了解一下~
書寫規(guī)則及注釋
就像我們剛開始學(xué)寫字一樣,在學(xué)習(xí)編寫代碼之前,我們也要先了解這門語言規(guī)范的書寫規(guī)則和注釋方法。
這部分雖然比較簡單,但非常重要,有時候這不僅關(guān)系到你的飯碗,甚至還會危及到你的性命🥶,不信你可以看這篇假新聞:因代碼規(guī)范問題,美國一碼農(nóng)槍殺了4個同事
(https://yq.aliyun.com/articles/644710)
SQL書寫規(guī)則
SQL語句不區(qū)分大小寫,因此SELECT與select甚至是SeLect的效果是相同的,但是要對命令和變量進(jìn)行區(qū)分,所以默認(rèn)命令需要大寫,其他內(nèi)容如變量等則需要小寫;
表和變量名中不要出現(xiàn)空格,可使用下劃線_替代;
查詢語句中,使用單一空格隔開命令和變量;
為提高代碼的可移植性,請?jiān)诓樵冋Z句結(jié)尾添加一個分號;。
SQL中的注釋
代碼是給電腦看的,而注釋則是給人看的,是對你寫這行代碼的思路解釋,方便自己做debug或者給同事交接。
單行注釋-,添加注釋。
多行注釋
多行注釋以/*起始,以*/結(jié)尾。
/*SELECT?col_name? FROM?table_name;*/ SELECT?col_2? FROM?table_name;檢索數(shù)據(jù)
檢索數(shù)據(jù)主要用的語句為:SELECT和FROM,意為從(FROM)xxx表中選擇(SELECT)xxx變量,下面看示例。
檢索單列
從table_name表中檢索col_name列。
SELECT?col_name FROM?table_name;檢索多列
從table_name表中檢索col_1,col_2和col_3列。
SELECT?col_1,col_2,col_3 FROM?table_name;檢索所有列
使用通配符*,返回table_name表中的所有列;
SELECT?* FROM?table_name;檢索某列中不同的值
檢索col_1中具有唯一性的行,即唯一值。
SELECT?DISTINCT?col_1 FROM?table_name;限制檢索的結(jié)果
使用LIMIT語句可以限制返回的行數(shù)。
SELECT?col_1 FROM?table_name LIMIT?10;返回前10行(即第0-第9行)。
也可以添加OFFSET語句,設(shè)置返回數(shù)據(jù)的起始行:
SELECT?col_1 FROM?table_name LIMIT?10?OFFSET?5;從第五行之后,返回十行數(shù)據(jù)(即第5-第14行)。
排序檢索數(shù)據(jù)
排序需要使用的子句是:ORDER BY。
其可以根據(jù)指定的單列或多列對結(jié)果進(jìn)行排序;
默認(rèn)按照升序進(jìn)行排序(從小到大,從a到z),使用DESC關(guān)鍵字可以改為降序;
在使用ORDER BY時,請確保它是SELECT語句中的最后一條子句。
下面請看示例:
按列排序
返回的數(shù)據(jù)會按照col_name列進(jìn)行升序排序,這里col_name可以是單列也可以是多列,當(dāng)然也可以使用非檢索的列進(jìn)行排序。
降序排序
返回的數(shù)據(jù)會按照col_2列降序,col_3列升序?qū)ol_1和col_2兩列進(jìn)行排序。
這里可以看出,DESC關(guān)鍵字的用法:只對跟在語句前面的變量有效。所以,想要對多列進(jìn)行降序排序時,需要對每一列都指定DESC關(guān)鍵字。
過濾數(shù)據(jù)
我們使用WHERE子句來根據(jù)某個條件對篩選的數(shù)據(jù)進(jìn)行過濾。
WHERE子句應(yīng)該寫在表名(即FROM子句)之后,在ORDER BY子句之前;
使用的基本方式為:WHERE 列名+運(yùn)算符+值;
過濾條件是區(qū)分大小寫的。
使用示例:col_1 運(yùn)算符 value的值。
SELECT?col_1 FROM?table_1 WHERE?col_1?運(yùn)算符?value;運(yùn)算符
| = | 等于 |
| <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN…AND… | 在指定的兩值之間 |
| IS NULL | 為NULL值 |
| AND | 邏輯運(yùn)算符:與 |
| OR | 邏輯運(yùn)算符:或 |
| IN | 條件范圍篩選 |
| NOT | 邏輯運(yùn)算符:非 |
?? SQL的版本不同,可能導(dǎo)致某些運(yùn)算符不同(如不等于可以用!=表示),具體要查閱數(shù)據(jù)庫文檔。
在同時輸入AND和OR時,SQL會優(yōu)先處理AND語句,所以為了建議大家在進(jìn)行多條件篩選時,請用小括號將每個條件單獨(dú)擴(kuò)起來,這樣既方便閱讀代碼,又不容易出問題。
用通配符進(jìn)行過濾(LIKE)
通配符用來匹配值的一部分,跟在LIKE關(guān)鍵字后面進(jìn)行數(shù)據(jù)過濾。
| % | 表示任何字符出現(xiàn)任意次數(shù) |
| _ | 表示任何字符出現(xiàn)一次 |
| [] | 指定一個字符集,它必須匹配該位置的一個字符 |
| ^ | 在[]中使用,表示否定 |
示例:
SELECT?col_1 FROM?table_1 WHERE?col_1?LIKE?'_[^JM]%' ORDER?BY?col_1;如上篩選出的是,第二個字符為非J且非M的數(shù)據(jù)。
創(chuàng)建計(jì)算字段
其實(shí)就是在檢索數(shù)據(jù)的同時進(jìn)行計(jì)算,并使用關(guān)鍵字AS將結(jié)果保存為某一列。
數(shù)值類型的計(jì)算
輸出:
prod_id??quantity??item_price??expanded_price --------------------------------------------- RGAN01??5??4.9900??24.9500 BR03??5??11.9900??59.9500這里實(shí)現(xiàn)的就是使用quantity*item_price創(chuàng)建一個名為expanded_price的計(jì)算字段,也就是一個新列。
同樣適用于計(jì)算的操作符有+(加),-(減)和/(除)。
字符類型的拼接
輸出:
col_title ------------------------ Bear?Emporium(USA) Bears?R?Us(USA) Jouets?et?ours(France)這里實(shí)現(xiàn)的就是將col_name列與col_country列進(jìn)行了拼接,新列的名字叫做col_title。
RTRIM()函數(shù)是去掉右邊的所有空格,LTRIM()是去掉左邊的所有空格,TRIM()是去掉兩邊的所有空格。
使用別名
在上一節(jié)中我們使用AS來為變量設(shè)置別名,你可能也見過如下所示的語句:
SELECT?col1?+?col2?AS?total,?col3當(dāng)然沒有 AS 的語句也可以實(shí)現(xiàn)使用別名:
FROM?tablename?t1以及
SELECT?col1?+?col2?total,?col3將col1+col2的結(jié)果設(shè)置名為total的列。
代碼總結(jié)
| SELECT | SELECT Col1, Col2, … | 選擇要篩選的列 |
| FROM | FROM Table | 提供列所在的表格 |
| LIMIT | LIMIT 10 | 限制返回的行數(shù) |
| ORDER BY | ORDER BY Col | 根據(jù)列Col對查詢的結(jié)果排序(順序),可與 DESC 一起使用實(shí)現(xiàn)逆序。 |
| WHERE | WHERE Col > 5 | 用于過濾結(jié)果的一個條件語句 |
| LIKE | WHERE Col LIKE ‘%me%’ | 僅提取出列文本中包含 ‘me’ 的行 |
| IN | WHERE Col IN (‘Y’, ‘N’) | 僅過濾行對應(yīng)的列為 ‘Y’ 或 ‘N’的數(shù)據(jù) |
| NOT | WHERE Col NOT IN (‘Y’, “N’) | NOT表示非,與上行結(jié)果剛好互補(bǔ)。 |
| AND | WHERE (Col1 > 5) AND (Col2 < 3) | AND表示與,過濾兩個或多個條件均為真的數(shù)據(jù) |
| OR | WHERE Col1 > 5 OR Col2 < 3 | OR表示或,過濾至少某一條件為真的行 |
| BETWEEN | WHERE Col BETWEEN 3 AND 5 | 與AND連用,比用運(yùn)算符簡單一些 |
總結(jié)
以上是生活随笔為你收集整理的想学数据分析但不会Python,过来看看SQL吧(上)~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团算法专家:入门机器学习,比你想的要简
- 下一篇: 想学数据分析但不会Python,过来看看