PostgreSQL如何入門學(xué)習(xí)?

在各種數(shù)據(jù)崗招聘中县遣,SQL幾乎成為了必備技能糜颠。有公司的地方就會(huì)有數(shù)據(jù)汹族,有數(shù)據(jù)的地方就會(huì)有數(shù)據(jù)庫,有數(shù)據(jù)庫的地方就會(huì)有SQL其兴。

SQL在數(shù)據(jù)分析中到底有多重要顶瞒?這么說吧,除了Excel外元旬,SQL是數(shù)據(jù)工作最常接觸的到的工具榴徐。

雖然本質(zhì)上SQL和Excel都用來處理分析數(shù)據(jù),但不一樣的是匀归,SQL是一種查詢語言坑资,并非可視化的軟件,所以學(xué)習(xí)門檻更高穆端,需要使用者有多的邏輯思考袱贮。

當(dāng)然學(xué)習(xí)SQL并非難事,對(duì)比Java徙赢、C++字柠、Python這類編程語言,SQL的語言邏輯更為簡(jiǎn)單狡赐,你可以從SQL的3個(gè)功能來初步了解它窑业。

(1) SQL數(shù)據(jù)定義功能:負(fù)責(zé)創(chuàng)建、修改枕屉、刪除常柄、索引、視圖搀擂、函數(shù)西潘、存儲(chǔ)過程和觸發(fā)器等對(duì)象。

(2)SQL數(shù)據(jù)操縱功能:負(fù)責(zé)對(duì)表進(jìn)行增刪改查哨颂,尤其是自定義查詢喷市,是工作中最常用的場(chǎng)景。

(3)SQL的數(shù)據(jù)控制功能:負(fù)責(zé)對(duì)用戶的訪問權(quán)限加以控制威恼,以保證系統(tǒng)的安全性品姓。

針對(duì)這3個(gè)功能,以PostgreSQL為例箫措,我們只需要從以下4個(gè)方面來學(xué)習(xí)即可腹备。

1、數(shù)據(jù)庫與數(shù)據(jù)表

了解數(shù)據(jù)庫斤蔓,有幾個(gè)重要的概念需要清楚植酥。

首先是數(shù)據(jù)庫管理系統(tǒng),簡(jiǎn)稱數(shù)據(jù)庫,也就是DBMS友驮,這是數(shù)據(jù)庫的管理軟件漂羊。

市場(chǎng)上有很多選擇,比如MySQL喊儡、Oracle拨与、PostgreSQL等,不同軟件特性也不一樣艾猜,你盡量選擇主流的去學(xué)習(xí)买喧。

PostgreSQL是一種特性非常齊全的自由軟件的對(duì)象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS),它支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性匆赃,如復(fù)雜查詢淤毛、外鍵、觸發(fā)器算柳、視圖低淡、事務(wù)完整性、多版本并發(fā)控制等瞬项。

同樣蔗蹋,PostgreSQL也可以用許多方法擴(kuò)展,例如通過增加新的數(shù)據(jù)類型囱淋、函數(shù)猪杭、操作符、聚集函數(shù)妥衣、索引方法皂吮、過程語言等。

另外税手,因?yàn)樵S可證的靈活蜂筹,任何人都可以以任何目的免費(fèi)使用、修改和分發(fā)PostgreSQL芦倒。

再來說說數(shù)據(jù)庫艺挪,這是我們?cè)跀?shù)據(jù)庫軟件中創(chuàng)建的數(shù)據(jù)表的集合,你可以創(chuàng)建多個(gè)數(shù)據(jù)庫兵扬,去存儲(chǔ)不同用途的數(shù)據(jù)表麻裳,方便檢索。

可以使用SQL代碼或者數(shù)據(jù)庫工具來創(chuàng)建數(shù)據(jù)庫周霉,創(chuàng)建的時(shí)候要注意設(shè)置好數(shù)據(jù)庫權(quán)限掂器。

在SQL語句中亚皂,使用如下語句來創(chuàng)建表:

CREATE DATABASE database_name

最后是數(shù)據(jù)表俱箱,這數(shù)據(jù)庫中最基礎(chǔ)的單元,數(shù)據(jù)表存儲(chǔ)在數(shù)據(jù)庫中灭必。

在關(guān)系型數(shù)據(jù)庫中狞谱,數(shù)據(jù)是以行列的形式存儲(chǔ)在數(shù)據(jù)表中乃摹,每列都有相應(yīng)的數(shù)據(jù)類型,這是在創(chuàng)建表的時(shí)候去設(shè)定跟衅。

在SQL語句中孵睬,使用如下語句來創(chuàng)建表:

CREATE TABLE <table_name> (columns_name datatype , ...)

數(shù)據(jù)表中有一些約束需要注意,比如主鍵約束伶跷、外鍵約束掰读、非空約束、唯一性約束叭莫、默認(rèn)約束等蹈集,視具體業(yè)務(wù)針對(duì)性設(shè)置。

2雇初、數(shù)據(jù)類型和函數(shù)

同其他編程語言一樣拢肆,SQL中有固定的數(shù)據(jù)類型和五花八門的函數(shù),在不同的數(shù)據(jù)庫軟件中靖诗,數(shù)據(jù)類型和函數(shù)也會(huì)有差異郭怪。但所有關(guān)系型數(shù)據(jù)庫都會(huì)遵守SQL基本語法規(guī)則,

以PostgreSQL為例刊橘,主要的數(shù)據(jù)類型包括整數(shù)類型鄙才、浮點(diǎn)數(shù)類型、日期時(shí)間類型伤为、字符串類型咒循、二進(jìn)制類型、布爾類型绞愚、數(shù)組類型叙甸、幾何類型、網(wǎng)絡(luò)地址類型位衩、JSON類型等裆蒸,其中每個(gè)類型下又細(xì)分多個(gè)子類型。具體可以下圖:

SQL中的函數(shù)非常之多糖驴,用來計(jì)算和修改數(shù)據(jù)僚祷,基于數(shù)據(jù)表可以得到任何你想要的分析結(jié)果。一般把SQL函數(shù)主要分為以下6大類:聚合函數(shù)贮缕、轉(zhuǎn)換函數(shù)辙谜、日期時(shí)間函數(shù)、數(shù)學(xué)函數(shù)感昼、字符串函數(shù)装哆、系統(tǒng)處理函數(shù)。

除了上述函數(shù)外,PostgreSQL系統(tǒng)自定義了許多用于處理特殊場(chǎng)景的函數(shù)蜕琴,比如幾何函數(shù)萍桌、文本搜索函數(shù)等。下面以PostgreSQL為例凌简,列舉常見函數(shù)的用法:

聚合函數(shù):

轉(zhuǎn)換函數(shù):

日期時(shí)間函數(shù):

數(shù)學(xué)函數(shù):

字符串函數(shù):

系統(tǒng)函數(shù):

還有其他諸如幾何函數(shù):

3上炎、數(shù)據(jù)查詢

數(shù)據(jù)查詢是學(xué)習(xí)SQL最核心的目的,也是廣大數(shù)據(jù)分析師們最日常的工作雏搂。

select是你學(xué)習(xí)SQL數(shù)據(jù)查詢的基本語句藕施,幾乎所有查詢都需要用select來實(shí)現(xiàn)。

select查詢又分為單表查詢凸郑、聚合查詢铅碍、連接查詢、子查詢线椰、合并查詢等胞谈。

單表查詢(查詢一張表):

SELECT ... FROM table_name

聚合查詢(根據(jù)某字段聚合進(jìn)行計(jì)算):

SELECT count(column_1) FROM table_name GROUP BY column_2

連接查詢(通過JOIN連接多張表):

SELECT ... FROM table_name_1 LEFTJOIN tablea_name_2 ON...

子查詢(對(duì)多個(gè)表進(jìn)行嵌套查詢)

SELECT ... FROM table_name_1 
WHERE column_1 IN (SELECT column_2 FROM table_name_2)

合并查詢(查詢結(jié)果進(jìn)行合并)

SELECT ... FROM table_name_1 
UNION
SELECT ... FROM table_name_2

前面列舉了幾種常見查詢的簡(jiǎn)單例子,在日常數(shù)據(jù)分析工作中憨愉,還會(huì)用到各種各樣的查詢子句烦绳。

WHERE子句(篩選查詢操作)

SELECT ... FROM fdt WHERE c1 > 5

SELECT ... FROM fdt WHERE c1 IN (1, 2, 3)

SELECT ... FROM fdt WHERE c1 IN (SELECT c1 FROM t2)

SELECT ... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10)

SELECT ... FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100

SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1)

GROUP BY和HAVING子句

在通過了WHERE過濾器之后,生成的輸入表可以使用GROUP BY子句進(jìn)行分組配紫,然后用HAVING子句刪除一些分組行径密。

SELECT select_list FROM ... [WHERE ...] GROUP BY ... HAVING boolean_expression

ORDER BY子句

對(duì)查詢結(jié)果進(jìn)行排序操作。

SELECT ... FROM table_name
ORDER BY ...

LIMIT和OFFSET

限制查詢返回的行數(shù)躺孝。

SELECT ...FROM table_name
[ LIMIT { number | ALL } ] [ OFFSET number ]

DISTINCT

去除重復(fù)項(xiàng)享扔。

SELECT DISTINCT column_name FROM table_name

WITH查詢

將查詢語句定義為臨時(shí)表。

WITH table_name AS (select ...)

4植袍、數(shù)據(jù)IO及增刪改

除了對(duì)數(shù)據(jù)進(jìn)行查詢外惧眠,你還需要學(xué)會(huì)如何插入數(shù)據(jù)、導(dǎo)出數(shù)據(jù)于个、更新數(shù)據(jù)氛魁、刪除數(shù)據(jù)。

這些都屬于數(shù)據(jù)的操作和定義范疇厅篓,對(duì)數(shù)據(jù)管理員非常有用秀存。

插入數(shù)據(jù)(使用INSERT語句)

INSERT INTO tableau_name VALUES (1, 'Cheese', 9.99);

更新數(shù)據(jù)(使用UPDATE語句)

UPDATE table_name SET price = 10 WHERE price = 5;

刪除數(shù)據(jù)(使用DELETE語句)

刪除表

DELETE FROM table_name

刪除指定行

DELETE FROM table_name WHERE price = 10;

增加列(使用ALTER語句)

ALTER TABLE table_name ADD COLUMN description text;

移除列(使用ALTER DROP語句)

ALTER TABLE table_name DROP COLUMN description;

增加約束(使用ALTER...語句)

ALTER TABLE table_name ADD CHECK (name <> '');
ALTER TABLE table_name ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE table_name ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

修改列的數(shù)據(jù)類型(ALTER TYPE語句)

ALTER TABLE table_name ALTER COLUMN price TYPE numeric(10,2);

重命名列(ALTER COLUMN語句)

ALTER TABLE table_name RENAME COLUMN product_no TO product_number;

重命名表(ALTER RENAME)

ALTER TABLE old_table_name RENAME TO new_table_name;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羽氮,隨后出現(xiàn)的幾起案子或链,更是在濱河造成了極大的恐慌,老刑警劉巖档押,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澳盐,死亡現(xiàn)場(chǎng)離奇詭異尤筐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洞就,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掀淘,“玉大人旬蟋,你說我怎么就攤上這事「锫Γ” “怎么了倾贰?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拦惋。 經(jīng)常有香客問我匆浙,道長(zhǎng),這世上最難降的妖魔是什么厕妖? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任首尼,我火速辦了婚禮,結(jié)果婚禮上言秸,老公的妹妹穿的比我還像新娘软能。我一直安慰自己,他們只是感情好举畸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布查排。 她就那樣靜靜地躺著,像睡著了一般抄沮。 火紅的嫁衣襯著肌膚如雪跋核。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天叛买,我揣著相機(jī)與錄音砂代,去河邊找鬼。 笑死率挣,一個(gè)胖子當(dāng)著我的面吹牛泊藕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播难礼,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娃圆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蛾茉?” 一聲冷哼從身側(cè)響起讼呢,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谦炬,沒想到半個(gè)月后悦屏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體节沦,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年础爬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甫贯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡看蚜,死狀恐怖叫搁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情供炎,我是刑警寧澤渴逻,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站音诫,受9級(jí)特大地震影響惨奕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竭钝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一梨撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧香罐,春花似錦聋袋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至港令,卻和暖如春啥容,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顷霹。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工咪惠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淋淀。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓遥昧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親朵纷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炭臭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容