本文是Mysql入門到入土系列的第一篇,旨在于幫助我回顧和總結(jié)Mysql的基礎(chǔ)知識(shí)和Sql的入門語法,幫助我們?cè)诤髞淼膶W(xué)習(xí)過程中打下基礎(chǔ).如下為文章內(nèi)容概括:
一.基本概念:
表與表信息的關(guān)聯(lián) 衍生命題 關(guān)系數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的對(duì)比,。
注意:一個(gè)數(shù)據(jù)行就是數(shù)據(jù)庫表中的一條記錄,平時(shí)所接觸的40萬數(shù)據(jù),過百萬數(shù)據(jù)都是以此為算的.
二.sql基礎(chǔ)語法SQL語句語法沒有這么復(fù)雜,只要掌握好關(guān)鍵字的使用方法就好(閱讀即可,重點(diǎn)是掌握實(shí)際用法): SELECT ,、 FROM ,、WHERE ,、 GROUP BY,、HAVING ,、ORDER BY、INSERT ,、UPDATE ,、DELETE、CREATE,、DROP,、ALTER、GRANT,、REVOKE 嚴(yán)格來講,sql會(huì)分成三種類型: ? DML(數(shù)據(jù)操作語言,開發(fā)中使用的部分):主要指的是數(shù)據(jù)庫的查詢與更新操作. 查詢操作是整個(gè)sql語法中最麻煩的部分,也是筆試中最為常用的操作部分. CURD ? DDL(數(shù)據(jù)定義語言,開發(fā)前的設(shè)計(jì)):主要指的是數(shù)據(jù)對(duì)象的創(chuàng)建(表,用戶),例如:CREATE,、DROP,這一部分的操作需要到相關(guān)的設(shè)計(jì)范式,。 ? DCL(數(shù)據(jù)庫控制語言,系統(tǒng)人員工作):主要是進(jìn)行 權(quán)限的管理操作,(需要結(jié)合用戶來觀察),此部分由DBA負(fù)責(zé). ? TPL 事務(wù)處理語言,它的語句能確保被DML語句影響的表的所有行及時(shí)得以更新,。這個(gè)模塊會(huì)在之后的內(nèi)容中講到,此處留個(gè)印象就好. 約定俗成的概念 1.在sql語句中,SQL關(guān)鍵字和函數(shù)名都要用大寫英文字母,,而數(shù)據(jù)庫,,數(shù)據(jù)表,數(shù)據(jù)列的名稱全部用小寫字母,。 2.在語法描述時(shí),,【】方括號(hào)表示語法可選,可選內(nèi)容以| 分隔 {}花括號(hào)表示必須出現(xiàn),,必須從其中選擇一個(gè)數(shù)據(jù)項(xiàng). 【】方括號(hào)表示里面參數(shù)可選. | 豎線分割參數(shù) {} 花括號(hào)內(nèi)的內(nèi)容是指必不可少的, 3.【①】是指執(zhí)行順序. 三.sql簡(jiǎn)單查詢整個(gè)SQL結(jié)構(gòu)就是由若干個(gè)關(guān)鍵字所組成,所以掌握簡(jiǎn)單查詢,也是關(guān)鍵字的使用. 所謂的簡(jiǎn)單查詢就是指查詢一張數(shù)據(jù)表中所有數(shù)據(jù)行的內(nèi)容.
大概是這種樣子的 在以上的結(jié)構(gòu)之中,首先執(zhí)行的是FROM子句,因?yàn)楸仨毻ㄟ^FROM子句確定數(shù)據(jù)的來源.而后要針對(duì)對(duì)于數(shù)據(jù)的篩選操作,那么就通過SELECT 子句完成.(很重要,數(shù)據(jù)來源) 如果是全部記錄指的就是所有的行和列的數(shù)據(jù),簡(jiǎn)單查詢是不能控制數(shù)據(jù)行的,只能夠在SELECT子句里面控制列,如果是全部的查詢咧,那么就使用通配符(星號(hào))”*” 完成;
只想查詢幾個(gè)固定的列,所以在SELECT 子句之后要寫上具體的列名稱
四.去重(重復(fù))關(guān)鍵字 DISTINCT - distinct如果要想要去除掉所有的重復(fù)信息,那么可以使用’DISTINCT’,此選項(xiàng)只能夠出現(xiàn)在SELECT 子句的后面(重點(diǎn)1). 如果查詢的數(shù)據(jù)是多個(gè)列,那么只有在這多個(gè)列的數(shù)據(jù)都相同的時(shí)候才可以消除.(重點(diǎn)2)
五.別名通過使用 SQL,可以為表名稱或列名稱指定別名。 基本上,,創(chuàng)建別名是為了讓列名稱的可讀性更強(qiáng)(長(zhǎng)名變短名,或者有意義的),。 或者是為了為通過查詢出來的復(fù)雜數(shù)據(jù)命名,使之可操作性更強(qiáng) - 表和列都可以起別名
六.限定查詢(條件查詢)很多時(shí)候并不需要查詢所有數(shù)據(jù)行內(nèi)容,此時(shí)就可以通過WHERE子句來針對(duì)于要顯示的數(shù)據(jù)行進(jìn)行篩選,而此時(shí)我們可以使用SQL語法結(jié)構(gòu)變?yōu)槿缦率褂酶袷? 【③控制要顯示的數(shù)據(jù)列】SELECT [DISTINCT] * | 列名稱 [別名],列名稱 [別名]... 【① 確定數(shù)據(jù)來源】FROM 表名稱 [別名] 【② 確定滿足條件的數(shù)據(jù)行】[WHERE 過濾條件(s);] 如果要想實(shí)現(xiàn)限定查詢,那么需要掌握一系列的限定查詢的符號(hào),有如下幾種: ? 關(guān)系運(yùn)算符: >、 <,、>=,、 <=、>=,、><>(!=) ; ? 邏輯運(yùn)算符:AND ,、OR、NOT; ? 范圍運(yùn)算符:BETWEEN...AND; ? 謂詞范圍: IN ,、 NOT IN: ? 空判斷: IS NULL,、IS NOT NULL ? 模糊查詢:LIKE. 6.1 關(guān)系運(yùn)算符 關(guān)系運(yùn)算符主要進(jìn)行大小關(guān)系比較操作使用的。
要求查詢出所有基本工資高于1500的雇員信息 所有的過濾都是采用條件的形式進(jìn)行過濾. 6.2 邏輯運(yùn)算符 如果說現(xiàn)在有多個(gè)條件要進(jìn)行連接,那么就需要根據(jù)要求選擇是與連接還是或連接; ? **與連接**:所有的判斷條件都要滿足 AND 關(guān)鍵字 ? **或連接**:若干個(gè)條件有一個(gè)滿足即可 OR 關(guān)鍵字 查詢出工資范圍在1500-3000之間的雇員信息 ? 條件一: sal>=1500; ? 條件二:sal<> ? 關(guān)系:兩個(gè)條件必須同時(shí)滿足才可以顯示內(nèi)容,所以使用 AND 連接.
在邏輯運(yùn)算之中除了與和或的邏輯之外還會(huì)存在有非的邏輯, 非的邏輯是,如果條件的結(jié)果為真,那么非之后就是假, 反之,如果原始條件判斷的結(jié)果為假,那么結(jié)果就是真. 6.3 范圍查詢 在進(jìn)行查詢條件過濾的時(shí)候可以針對(duì)與某一個(gè)范圍的數(shù)據(jù)進(jìn)行過濾,使用的是BETWEEN...AND,語法: BETWEEN 最小值(數(shù)字,日期) AND 最大值 在此處最小值(包含最小值)與最大值(包含最大值)之間的內(nèi)容都滿足條件. 查詢工資在1500-2000之間的雇員,包含(1500,2000)
第一個(gè)查詢需要匹配兩個(gè)條件,而第二個(gè)查詢只需要匹配一個(gè)條件. 注意:在進(jìn)行日期判斷時(shí),我們不用BETWEEN .. AND 而用 > < 大與小于符號(hào)加="" 00:00:00=""> 6.4 空判斷 空在數(shù)據(jù)庫上解釋為不確定的內(nèi)容,但是需要注意的是:如果在數(shù)字列上使用null,那么絕對(duì)不表示0. 對(duì)于null的判斷不能夠使用關(guān)系運(yùn)算符完成. 空的操作只能夠使用IS NULL 或者是IS NOT NULL(NOT IS NULL)表示. 查詢所有領(lǐng)取傭金的雇員(傭金存在,不為空)
任何的數(shù)據(jù)庫,空的操作只能夠使用以上的兩個(gè)標(biāo)記來判斷. 6.5 IN 操作符 和 NOT IN操作符 IN 操作符類似于BETWEEN....AND, 但是BETWEEN...AND是給了一個(gè)大的范圍,而IN給出的是一個(gè)**指定的可選范圍**. 要求查詢出雇員編號(hào)是7369,7566,7788,,9999的雇員信息. ? 如果不使用IN操作可以使用或操作:
? 使用IN操作實(shí)現(xiàn):
在指定值查詢的過程之中,IN的操作是最簡(jiǎn)短的. 既然在指定的范圍里面使用IN,,那么如果不在指定的范圍之中,可以使用NOT IN 操作. 查詢出雇員編號(hào)不是7369,7566,7788,,9999的雇員信息.
注意:關(guān)于NOT IN和NULL的問題 正在使用NOT IN 進(jìn)行范圍判斷的時(shí)候,如果范圍里面包含有NULL,那么不會(huì)有任何的結(jié)果返回.(好好研究以下邏輯) 使用IN操作中包含有NULL.
實(shí)際上使用where最大的用處在于控制顯示的數(shù)據(jù)行, 再簡(jiǎn)單一點(diǎn):別顯示全部數(shù)據(jù)行(因?yàn)槿绻@示全部的數(shù)據(jù)行,幾乎是宣判了一個(gè)程序的死刑). 使用NOT IN的目的是為了查詢部分?jǐn)?shù)據(jù)行 但是如果有了NULL(某些數(shù)據(jù)永遠(yuǎn)不可能為空),就變成了查詢?nèi)苛? 6.6 模糊查詢:LIKE 用兩個(gè)通配符. ? “_” : 匹配任意的一位字符; ? “%” : 匹配任意的零位,一位或多位字符.
說明一:LIKE可以應(yīng)用在各種數(shù)據(jù)類型上,不一定非要是字符串; 說明二:在使用LIKE模糊查詢的時(shí)候,如果不設(shè)置查詢關(guān)鍵字,那么表示查詢?nèi)?
雖然以上的代碼可以查詢?nèi)繑?shù)據(jù),但是與不使用where子句相比,不使用where子句的查詢性能一定更好. 七.查詢排序之前的查詢里面只使用了SELECT,、FROM,、WHERE, 但是如果需要針對(duì)于查詢后的結(jié)果按照指定的數(shù)據(jù)列進(jìn)行排序操作,就必須使用ORDER BY 子句. 當(dāng)使用查詢操作的時(shí)候,默認(rèn)情況下他會(huì)按照數(shù)據(jù)的插入順序進(jìn)行數(shù)據(jù)排序顯示. 如果要針對(duì)于指定的列內(nèi)容實(shí)現(xiàn)排序,就必須使用 ORDER BY子句完成. 【③控制要顯示的數(shù)據(jù)列】SELECT [DISTINCT] * | 列名稱 [別名],列名稱 [別名]... 【①確定數(shù)據(jù)來源】FROM 表名稱 [別名] 【②確定滿足條件的數(shù)據(jù)行】[WHERE 過濾條件(s);] 【④針對(duì)查詢結(jié)果進(jìn)行排序】[ORDER BY 字段 [ASC | DESC], 字段 [ASC | DESC], ... ] ORDER BY 子句是在SELECT 子句之后執(zhí)行,而ORDER BY子句可以使用SELECT 子句定義的別名,
1、 使用ORDER BY查詢的時(shí)候,排序是在最后完成的; 2,、 ORDER BY子句是最后一個(gè)執(zhí)行的子句; 3,、 在ORDER BY之中可以設(shè)置多個(gè)排序的字段. 4、 ORDER BY 有兩種排序模式:ASC,、DESC; 5,、 ORDER BY 是唯一一個(gè)可以使用SELECT子句定義別名的子句. 八.總結(jié)1. 簡(jiǎn)單查詢是將一張表中所有數(shù)據(jù)行的內(nèi)容都顯示出來; 2. 在查詢語句之中先執(zhí)行FROM 子句確定數(shù)據(jù)來源(此時(shí)實(shí)際上是所有的行和列的數(shù)據(jù)), 而后利用SELECT子句可以控制要顯示的數(shù)據(jù)列; 3. 如果出現(xiàn)數(shù)據(jù)的重復(fù),可以使用DISTINCT 來消除重復(fù)的數(shù)據(jù)行顯示. --------------------------------------------------------------------- 1 where子句一般都寫在from子句之后,但是是緊跟著from子句之后執(zhí)行的 2 where 子句控制顯示的數(shù)據(jù)行的操作,select子句控制著顯示數(shù)據(jù)列的操作. ? select子要落后于where 子句執(zhí)行,所以在select子句之中定義的別名,無法在where子句里面使用; 3 要求完整的掌握給出的各個(gè)限定查詢符號(hào). ? 關(guān)系運(yùn)算符: >、 <,、>=,、 <=、>=,、><>(!=) ; ? 邏輯運(yùn)算符:AND ,、OR、NOT; ? 范圍運(yùn)算符:BETWEEN...AND; ? 謂詞范圍: IN ,、 NOT IN: ? 空判斷: IS NULL,、IS NOT NULL ? 模糊查詢:LIKE. 4 使用LIKE實(shí)現(xiàn)模糊查詢的時(shí)候,如果不設(shè)置關(guān)鍵字(%%)表示查詢?nèi)? 5使用NOT IN 查詢時(shí),查詢范圍里面不允許出現(xiàn)NULL,否則不會(huì)有任何查詢結(jié)果. ------------------------------------------------------ 小結(jié):> 1. 清楚學(xué)習(xí)過的每一個(gè)子句的作用: SELECT,FROM ,WHERE,ORDER BY ; > 2. 多個(gè)條件判斷的時(shí)候一定要使用邏輯連接,而且盡量使用”()”,做一個(gè)區(qū)分 >3. 遇到問題慢慢分析,別著急; 9.結(jié)尾這是本人關(guān)于sql基礎(chǔ)的一些總結(jié)和概括,當(dāng)然還缺一些內(nèi)容, 比如mysql的一些使用方法 Mysql的常用功能 Mysql有別于其他數(shù)據(jù)庫系統(tǒng)的特色功能 如果你有任何意見或建議,請(qǐng)與本人聯(lián)系,我會(huì)非常感謝你指出的不足, 最后,希望我們都好好學(xué)習(xí). author:天宇不看海,2018/12/9/ 17.30 于深圳 、>,、> |
|