數(shù)據(jù)產(chǎn)品經(jīng)理技能必備:MySQL入門
作為一枚數(shù)據(jù)產(chǎn)品經(jīng)理,需要掌握基本的SQL查詢語句技能,之后才能進(jìn)一步了解與搭建數(shù)據(jù)倉庫、元數(shù)據(jù)、指標(biāo)字典體系。本文首先介紹MySQL基本知識。
一、了解數(shù)據(jù)庫
- 模式:關(guān)于數(shù)據(jù)庫和表的布局及特性的信息;
- 行是表中的記錄,列是字段;
- 主鍵列中的值不能修改,且不能重用;
- 數(shù)據(jù)庫中包含表及其它相關(guān)sql結(jié)構(gòu)。
二、檢索數(shù)據(jù)
2.1 select語句
檢索所有列:select * from products
2.2 排序檢索數(shù)據(jù)
order by:select prod_name from products order by prod_name。
注意:order by的子句必須是select語句的最后一個(gè)子句。
按多個(gè)列排序:select prod_id,prod_name,prod_price from products order by prod_price,prod_name。那么輸出結(jié)果先按prod_price排序,然后再將排序后的結(jié)果按prod_name排序。
按列位置排序:select prod_id,prod_name,prod_price from products order by 2,3。語句與上一句結(jié)果相同。
降序排序(系統(tǒng)默認(rèn)升序):order by prod_price DSC,prod_name。則結(jié)果先按prod_price降序排序,再按price_name升序排序。
三、過濾數(shù)據(jù)
(1)使用where子句(在from之后)
- 范圍值檢查:between and:where prod_price between 5 and 10。
- 空值檢查:where prod_price is NULL。語句返回沒有價(jià)格的所有產(chǎn)品(空字段,不是價(jià)格為0)
(2)使用組合where子句
- AND操作符:where vend AND prod_price<=4 #檢索由供應(yīng)商DLL01制造且產(chǎn)品價(jià)格低于4美元的所有產(chǎn)品注意AND用在where子句中的關(guān)鍵字,用來指示檢索滿足所給定條件的行。
- OR操作符:where OR OR用在where子句中的關(guān)鍵字,用來表示檢索匹配任一給定條件的行。
- AND,OR相結(jié)合(AND優(yōu)先級比OR高):所以注意使用圓括號,where (vend or vend) and prod_price>=10。
- IN操作符:where vend_id in(‘DLL01′,’BRS01’),其功能與where or相當(dāng)。
- NOT:否定跟在它之后的任何條件(mysql不支持此操作符), where NOT vend #檢索除DLL01之外所有供應(yīng)商的產(chǎn)品(此句等價(jià)于where vend_id <> ‘DLL01’) #NOT一定要緊跟在where后。
(3)用通配符進(jìn)行過濾(通配符:用來匹配值的一部分的特殊字符,用于“字符串”),使用LIKE+通配符
- 百分號(%):where prod_name like ‘Fish%’ #檢索任意以Fish起頭的詞(匹配單個(gè)或多個(gè)字符)。
- 下劃線(_ ) : where prod_name like ‘Fish__’ #檢索出的字符必須為Fish+兩個(gè)字符 (與%能匹配0個(gè)字符不一樣,_必須匹配一個(gè)字符,不能多也不能少)。
- 方括號([]):where contact like [JM]% #[JM]匹配任何以J,M開頭的人名,但它也只能匹配單個(gè)字符,為此在[]后加%,則可匹配多個(gè)字符。(若改為[^JM],則為檢索不以J,M起頭的任意聯(lián)系人名,等價(jià)于:where NOT contact like [JM]%)。
四、創(chuàng)建計(jì)算字段
(1)拼接字段(將值聯(lián)結(jié)到一起構(gòu)成單個(gè)值)
- concat函數(shù)(mysql用):select concat(vend_id,’ (‘,vend_country,’)’) #select語句聯(lián)結(jié)以上4個(gè)元素。
- ‘+’號(Access,SQL Server,Sybase使用):select vend_id + ‘ (‘ + vend_country + ‘)’。
- ‘||’號(DB2,Oracle使用):select vend_id || ‘ (‘ || vend_country || ‘)’。
- TRIM函數(shù):RTRIM()去掉值右邊所有空格,LTRIM()去掉值左邊所有空格,TRIM()去掉值兩邊所有空格。
- AS關(guān)鍵字:給聯(lián)結(jié)字段取別名。
- 完整聯(lián)結(jié)字段語句:?select RTRIM(vend_id) + ‘ (‘ + TRIRM(vend_country) + ‘)’ AS vendor_title FROM Vendors ORDER BY vend_name。
(2)執(zhí)行算數(shù)計(jì)算
五、使用視圖
視圖是虛擬的表,視圖本身不包含數(shù)據(jù),因此它們返回的數(shù)據(jù)是從其他表中檢索出來的,在更改這些表中的數(shù)據(jù)時(shí),視圖將返回改變過后的數(shù)據(jù)。
(1)視圖的規(guī)則和限制
- 視圖可以嵌套;
- 禁止在視圖查詢時(shí)使用ORDER BY語句。
(2)創(chuàng)建視圖(creat view)
- 利用視圖簡化復(fù)雜的聯(lián)結(jié);
- 用視圖重新格式化檢索出的數(shù)據(jù);
- 用視圖過濾不想要的數(shù)據(jù)(where子句);
- 使用視圖與計(jì)算字段。
六、使用存儲(chǔ)過程
為以后的使用而存儲(chǔ)一條或多條SQL語句的集合。
七、管理事務(wù)處理
(1)什么是事務(wù)處理
事務(wù)管理用來管理必須成批執(zhí)行的SQL操作,以保證數(shù)據(jù)庫不包含不完整的操作結(jié)果。利用事務(wù)處理,可以保證一組數(shù)據(jù)不會(huì)中途停止,它們或者作為整體執(zhí)行,或者完全不執(zhí)行(除非明確指示)。
如果沒有錯(cuò)誤發(fā)生,則整組語句寫到數(shù)據(jù)庫表,如果發(fā)生錯(cuò)誤,則進(jìn)行回退(撤銷)以恢復(fù)數(shù)據(jù)庫到某個(gè)已知且安全的狀態(tài)。
(2)幾個(gè)術(shù)語
- 事務(wù)(transction):一組SQL語句;
- 回退(rollback):指撤銷指定SQL語句的過程;
- 提交(commit):指將未存儲(chǔ)的SQL語句結(jié)果寫入數(shù)據(jù)庫表;
- 保留點(diǎn)(savepoint):指事務(wù)處理中設(shè)置的臨時(shí)占位符,你可以對它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)。
(3)可以回退哪些語句
可管理INSERT,UPDATE,DELETE語句,不能回退SELECT語句也不能回退CREATE,DROP操作。事務(wù)處理中可以使用這些語句,但回退時(shí)它們不被撤銷。
(4)控制事務(wù)處理
創(chuàng)建占位符:
- mysql:savepoint delete1;
- sql server:save trasaction delete1; #delete1為此占位符的名字。
rollback:#撤銷整個(gè)事務(wù)處理
- rollback to delete1;
- rollback transaction delete1;#回退到保留點(diǎn)delete1;
八、使用游標(biāo)(cursor)
游標(biāo)不是一條select語句,而是被該語句檢索出來的結(jié)果集,在存儲(chǔ)了游標(biāo)之后,應(yīng)用程序可以根據(jù)需要滾動(dòng)或?yàn)g覽其中的數(shù)據(jù)。游標(biāo)主要用于交互式應(yīng)用,其中用戶需要滾動(dòng)屏幕上的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行瀏覽或更改。
- 聲明:declare
- 打開:open cursor
- 檢索:fetch… into…
- 關(guān)閉:close
九、了解高級SQL特性
約束:管理如何插入或處理數(shù)據(jù)庫數(shù)據(jù)的規(guī)則
主鍵:一種特殊約束
外鍵:可幫助防止意外刪除,唯一約束:與主鍵類似但區(qū)別于主鍵
本文由 @兩人一杯奶茶 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
您好,想申請轉(zhuǎn)載您的這篇文章到公眾號
大家期待已久的《數(shù)據(jù)產(chǎn)品經(jīng)理實(shí)戰(zhàn)訓(xùn)練營》終于在起點(diǎn)學(xué)院(人人都是產(chǎn)品經(jīng)理旗下教育機(jī)構(gòu))上線啦!
本課程非常適合新手?jǐn)?shù)據(jù)產(chǎn)品經(jīng)理,或者想要轉(zhuǎn)崗的產(chǎn)品經(jīng)理、數(shù)據(jù)分析師、研發(fā)、產(chǎn)品運(yùn)營等人群。
課程會(huì)從基礎(chǔ)概念,到核心技能,再通過典型數(shù)據(jù)分析平臺(tái)的實(shí)戰(zhàn),幫助大家構(gòu)建完整的知識體系,掌握數(shù)據(jù)產(chǎn)品經(jīng)理的基本功。
學(xué)完后你會(huì)掌握怎么建指標(biāo)體系、指標(biāo)字典,如何設(shè)計(jì)數(shù)據(jù)埋點(diǎn)、保證數(shù)據(jù)質(zhì)量,規(guī)劃大數(shù)據(jù)分析平臺(tái)等實(shí)際工作技能~
現(xiàn)在就添加空空老師(微信id:anne012520),咨詢課程詳情并領(lǐng)取福利優(yōu)惠吧!
哈哈哈
怎么入門數(shù)據(jù)產(chǎn)品經(jīng)理
受教 ??
占位符的作用是什么呢
新手學(xué)習(xí)中,還沒太弄懂,有一個(gè)疑問,什么時(shí)候用in和and or類似,那什么情況下用in,什么情況下用and or呢?
不知道是不是可以這樣理解,where column_name in表明如果查詢的數(shù)據(jù)再同一列用in,而數(shù)據(jù)在多個(gè)列時(shí)用and or更方便,謝謝解答。
我的理解是where in簡化了對同一個(gè)字段的where or,比如,where id=1 or id=2,這時(shí)就可以寫where id in (1,2)
條件多的時(shí)候用IN,查詢效率快,IN語句會(huì)查詢每行同時(shí)滿足后面條件的數(shù)據(jù),OR逐個(gè)條件查。
請問where NOT contact like [JM]%中是否應(yīng)該加單引號寫為 ‘[JM]%’