Mysql入門到入土之Mysql介紹和Sql基本語法(基礎(chǔ)講解篇)

聲明:這套系列旨在幫助我記錄和分享Mysql的能力提升,任何人不得用于刪改,抄襲,我已申請原創(chuàng)保護,如想交流與轉(zhuǎn)載,請聯(lián)系作者,認(rèn)準(zhǔn)本人,天宇不看海,生活不易,且行且珍惜.

    文章內(nèi)容我會分成兩個部分來概括,第一部分的知識梳理和第二部分的實戰(zhàn)操作,學(xué)習(xí)實際用法.文章會分兩篇更新.(第一,理論,第二實際使用)

本文是Mysql入門到入土系列的第一篇,旨在于幫助我回顧和總結(jié)Mysql的基礎(chǔ)知識和Sql的入門語法,幫助我們在后來的學(xué)習(xí)過程中打下基礎(chǔ).如下為文章內(nèi)容概括:

Mysql的用途,簡單介紹
Sql基礎(chǔ)語法
Sql簡單查詢,限定查詢,最后的查詢排序
以及一些重點的知識總結(jié).

一.基本概念:

  • 數(shù)據(jù)庫:存放信息的倉庫,構(gòu)造簡單,遵守規(guī)則.
  • 關(guān)系型數(shù)據(jù)庫: 關(guān)系型數(shù)據(jù)庫的專長就是把分別放在兩個數(shù)據(jù)表中的數(shù)據(jù)聯(lián)系(相互匹配)起來,這種聯(lián)系是通過查找兩個數(shù)據(jù)表的共同元素來實現(xiàn)的
注意其中的數(shù)據(jù)聯(lián)系
     衍生命題 關(guān)系數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的對比。
  • 表:數(shù)據(jù)庫里的數(shù)據(jù)都放在數(shù)據(jù)表(table)中. 由 行(row)和列(column)構(gòu)成.

      注意:一個數(shù)據(jù)行就是數(shù)據(jù)庫表中的一條記錄,平時所接觸的40萬數(shù)據(jù),過百萬數(shù)據(jù)都是以此為算的.
    
  • Mysql不是數(shù)據(jù)庫,它是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)

  • Sql是結(jié)構(gòu)化查詢語言,是用來進行數(shù)據(jù)庫管理的語言,也就是說,我們用sql操縱數(shù)據(jù)庫.

二.sql基礎(chǔ)語法

SQL語句語法沒有這么復(fù)雜,只要掌握好關(guān)鍵字的使用方法就好(閱讀即可,重點是掌握實際用法):

SELECT 、 FROM 、WHERE 、 GROUP BY、HAVING 、ORDER BY、INSERT 、UPDATE 、DELETE、CREATE、DROP、ALTER、GRANT、REVOKE

嚴(yán)格來講,sql會分成三種類型:

? DML(數(shù)據(jù)操作語言,開發(fā)中使用的部分):主要指的是數(shù)據(jù)庫的查詢與更新操作. 查詢操作是整個sql語法中最麻煩的部分,也是筆試中最為常用的操作部分. CURD

? DDL(數(shù)據(jù)定義語言,開發(fā)前的設(shè)計):主要指的是數(shù)據(jù)對象的創(chuàng)建(表,用戶),例如:CREATE、DROP,這一部分的操作需要到相關(guān)的設(shè)計范式。

? DCL(數(shù)據(jù)庫控制語言,系統(tǒng)人員工作):主要是進行 權(quán)限的管理操作,(需要結(jié)合用戶來觀察),此部分由DBA負(fù)責(zé).

? TPL 事務(wù)處理語言,它的語句能確保被DML語句影響的表的所有行及時得以更新。這個模塊會在之后的內(nèi)容中講到,此處留個印象就好.

約定俗成的概念

1.在sql語句中,SQL關(guān)鍵字和函數(shù)名都要用大寫英文字母,而數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)列的名稱全部用小寫字母。
2.在語法描述時,【】方括號表示語法可選,可選內(nèi)容以| 分隔 {}花括號表示必須出現(xiàn),必須從其中選擇一個數(shù)據(jù)項.
【】方括號表示里面參數(shù)可選. | 豎線分割參數(shù)
{} 花括號內(nèi)的內(nèi)容是指必不可少的,
3.【①】是指執(zhí)行順序.

三.sql簡單查詢

整個SQL結(jié)構(gòu)就是由若干個關(guān)鍵字所組成,所以掌握簡單查詢,也是關(guān)鍵字的使用.

所謂的簡單查詢就是指查詢一張數(shù)據(jù)表中所有數(shù)據(jù)行的內(nèi)容.

【②】 SELECT [DISTINCT] * 列名稱 [別名],列名稱[別名],...
【①】FROM 表名稱 [別名];
在以上的結(jié)構(gòu)之中,首先執(zhí)行的是FROM子句,因為必須通過FROM子句確定數(shù)據(jù)的來源.而后要針對對于數(shù)據(jù)的篩選操作,那么就通過SELECT 子句完成.(很重要,數(shù)據(jù)來源)

  • 如果是全部記錄指的就是所有的行和列的數(shù)據(jù),簡單查詢是不能控制數(shù)據(jù)行的,只能夠在SELECT子句里面控制列,如果是全部的查詢咧,那么就使用通配符(星號)”*” 完成;

     SELECT * FROM EMP(表名);   查詢emp表中的全部記錄.
    
    大概數(shù)據(jù)樣子是這種的
  • 只想查詢幾個固定的列,所以在SELECT 子句之后要寫上具體的列名稱

     SELECT empno,job,ename,sal FROM emp;  查詢每個雇員的編號,姓名,職位,工資
    

四.去重(重復(fù))關(guān)鍵字 DISTINCT - distinct

如果要想要去除掉所有的重復(fù)信息,那么可以使用’DISTINCT’,此選項只能夠出現(xiàn)在SELECT 子句的后面(重點1).

如果查詢的數(shù)據(jù)是多個列,那么只有在這多個列的數(shù)據(jù)都相同的時候才可以消除.(重點2)

     select  distinct job from emp; 去除掉重復(fù)的內(nèi)容(job列)

五.別名

通過使用 SQL,可以為表名稱或列名稱指定別名。

基本上,創(chuàng)建別名是為了讓列名稱的可讀性更強(長名變短名,或者有意義的)。

或者是為了為通過查詢出來的復(fù)雜數(shù)據(jù)命名,使之可操作性更強

  • 表和列都可以起別名

      SELECT column_name AS alias_name FROM table_name;  as關(guān)鍵字之后的就是列的別名(是單列,不是所有列)
    
      SELECT column_name(s) FROM table_name AS alias_name  表別名-此用法開發(fā)中很少看到;
    

六.限定查詢(條件查詢)

很多時候并不需要查詢所有數(shù)據(jù)行內(nèi)容,此時就可以通過WHERE子句來針對于要顯示的數(shù)據(jù)行進行篩選,而此時我們可以使用SQL語法結(jié)構(gòu)變?yōu)槿缦率褂酶袷?

【③控制要顯示的數(shù)據(jù)列】SELECT [DISTINCT] * | 列名稱 [別名],列名稱 [別名]...
【① 確定數(shù)據(jù)來源】FROM 表名稱 [別名]
【② 確定滿足條件的數(shù)據(jù)行】[WHERE 過濾條件(s);]
如果要想實現(xiàn)限定查詢,那么需要掌握一系列的限定查詢的符號,有如下幾種:
? 關(guān)系運算符: >、 <、 >=、 <=、 <>(!=) ;
? 邏輯運算符:AND 、OR、NOT;
? 范圍運算符:BETWEEN...AND;
? 謂詞范圍: IN 、 NOT IN:
? 空判斷: IS NULL、IS NOT NULL
? 模糊查詢:LIKE.

6.1 關(guān)系運算符

關(guān)系運算符主要進行大小關(guān)系比較操作使用的。

    select *
    FROM EMP
    WHERE SAL>1500;
    要求查詢出所有基本工資高于1500的雇員信息

所有的過濾都是采用條件的形式進行過濾.

6.2 邏輯運算符

如果說現(xiàn)在有多個條件要進行連接,那么就需要根據(jù)要求選擇是與連接還是或連接;
? 與連接:所有的判斷條件都要滿足 AND 關(guān)鍵字
? 或連接:若干個條件有一個滿足即可 OR 關(guān)鍵字

查詢出工資范圍在1500-3000之間的雇員信息
? 條件一: sal>=1500;
? 條件二:sal<=3000;
? 關(guān)系:兩個條件必須同時滿足才可以顯示內(nèi)容,所以使用 AND 連接.

    SELECT *
    FROM emp 
    WHERE sal>=1500 AND sal<=3000;

在邏輯運算之中除了與和或的邏輯之外還會存在有非的邏輯,
非的邏輯是,如果條件的結(jié)果為真,那么非之后就是假,
反之,如果原始條件判斷的結(jié)果為假,那么結(jié)果就是真.

6.3 范圍查詢

在進行查詢條件過濾的時候可以針對與某一個范圍的數(shù)據(jù)進行過濾,使用的是BETWEEN...AND,語法:

BETWEEN 最小值(數(shù)字,日期) AND 最大值

在此處最小值(包含最小值)與最大值(包含最大值)之間的內(nèi)容都滿足條件.

查詢工資在1500-2000之間的雇員,包含(1500,2000)

    SELECT *FROM emp WHERE sal>=1500 AND sal<=2000;
    
    SELECT *FROM emp WHERE sal BETWEEN 1500 AND 2000;

第一個查詢需要匹配兩個條件,而第二個查詢只需要匹配一個條件.

注意:在進行日期判斷時,我們不用BETWEEN .. AND 而用 > < 大與小于符號加 00:00:00 23:59:59秒判斷.(之后實例查詢演示)

6.4 空判斷

空在數(shù)據(jù)庫上解釋為不確定的內(nèi)容,但是需要注意的是:如果在數(shù)字列上使用null,那么絕對不表示0. 對于null的判斷不能夠使用關(guān)系運算符完成.
空的操作只能夠使用IS NULL 或者是IS NOT NULL(NOT IS NULL)表示.

查詢所有領(lǐng)取傭金的雇員(傭金存在,不為空)

    SELECT * FROM emp WHERE     comm IS NOT NULL;

    SELECT * FROM emp WHERE     NOT comm IS NULL;

任何的數(shù)據(jù)庫,空的操作只能夠使用以上的兩個標(biāo)記來判斷.

6.5 IN 操作符 和 NOT IN操作符

IN 操作符類似于BETWEEN....AND,

但是BETWEEN...AND是給了一個大的范圍,而IN給出的是一個指定的可選范圍.

要求查詢出雇員編號是7369,7566,7788,,9999的雇員信息.
? 如果不使用IN操作可以使用或操作:

    SELECT * FROM EMP
    WHERE   EMPNO=7369 OR EMPNO=7566 OR EMPNO=7788 
    OR EMPNO=9999;

? 使用IN操作實現(xiàn):

    SELECT * FROM EMP
    WHERE   EMPNO in(7369,7566,7788,9999);

在指定值查詢的過程之中,IN的操作是最簡短的.

既然在指定的范圍里面使用IN,,那么如果不在指定的范圍之中,可以使用NOT IN 操作.

查詢出雇員編號不是7369,7566,7788,,9999的雇員信息.

    SELECT * FROM EMP

    WHERE EMPNO NOT in(7369,7566,7788,9999);

注意:關(guān)于NOT IN和NULL的問題

正在使用NOT IN 進行范圍判斷的時候,如果范圍里面包含有NULL,那么不會有任何的結(jié)果返回.(好好研究以下邏輯)

使用IN操作中包含有NULL.

    SELECT * FROM EMP
  
    WHERE   EMPNO in(7369,7566,7788,null);

---含有null對結(jié)果沒有任何影響

實際上使用where最大的用處在于控制顯示的數(shù)據(jù)行,

再簡單一點:別顯示全部數(shù)據(jù)行(因為如果要顯示全部的數(shù)據(jù)行,幾乎是宣判了一個程序的死刑).

使用NOT IN的目的是為了查詢部分?jǐn)?shù)據(jù)行

但是如果有了NULL(某些數(shù)據(jù)永遠(yuǎn)不可能為空),就變成了查詢?nèi)苛?

6.6 模糊查詢:LIKE

用兩個通配符.
? “_” : 匹配任意的一位字符;
? “%” : 匹配任意的零位,一位或多位字符.

    SELECT * FROM EMP WHERE   ENAME LIKE 'A%'; 查詢姓名是以字母A開頭的雇員信息
  • 注意:關(guān)于LIKE的兩點說明:
    • 說明一:LIKE可以應(yīng)用在各種數(shù)據(jù)類型上,不一定非要是字符串;

    • 說明二:在使用LIKE模糊查詢的時候,如果不設(shè)置查詢關(guān)鍵字,那么表示查詢?nèi)?

      SELECT * FROM EMP WHERE   sal LIKE '%%';
      

雖然以上的代碼可以查詢?nèi)繑?shù)據(jù),但是與不使用where子句相比,不使用where子句的查詢性能一定更好.

七.查詢排序

之前的查詢里面只使用了SELECT、FROM、WHERE,

但是如果需要針對于查詢后的結(jié)果按照指定的數(shù)據(jù)列進行排序操作,就必須使用ORDER BY 子句.

當(dāng)使用查詢操作的時候,默認(rèn)情況下他會按照數(shù)據(jù)的插入順序進行數(shù)據(jù)排序顯示.

如果要針對于指定的列內(nèi)容實現(xiàn)排序,就必須使用 ORDER BY子句完成.

【③控制要顯示的數(shù)據(jù)列】SELECT [DISTINCT] * | 列名稱 [別名],列名稱 [別名]...
【①確定數(shù)據(jù)來源】FROM 表名稱 [別名]
【②確定滿足條件的數(shù)據(jù)行】[WHERE 過濾條件(s);]
【④針對查詢結(jié)果進行排序】[ORDER BY 字段 [ASC | DESC], 字段 [ASC | DESC], ... ]

ORDER BY 子句是在SELECT 子句之后執(zhí)行,而ORDER BY子句可以使用SELECT 子句定義的別名,

  • ASC (默認(rèn),不寫也是ASC):按照升序的方式排列

  • DESC:按照降序的方式排列

  • 查詢所有的雇員信息,要求按照工資由高到低排序.

      SELECT * FROM emp ORDER BY sal DESC;
    
  • 以上只是針對于一個字段的排序,那么也可以同時設(shè)置多個字段.

  • ORDER BY 子句既然在SELECT子句之后執(zhí)行,那么就可以使用SELECT 子句里面定義的別名.

  • 此時的程序就可以正常的調(diào)用SELECT定義的別名.在整個SQL查詢結(jié)構(gòu)之中,只有ORDER BY子句可以調(diào)用SELECT子句里面定義的別名. (一定要注意sql的執(zhí)行順序)

1、 使用ORDER BY查詢的時候,排序是在最后完成的;
2、 ORDER BY子句是最后一個執(zhí)行的子句;
3、 在ORDER BY之中可以設(shè)置多個排序的字段.
4、 ORDER BY 有兩種排序模式:ASC、DESC;
5、 ORDER BY 是唯一一個可以使用SELECT子句定義別名的子句.

.八.總結(jié)

  1. 簡單查詢是將一張表中所有數(shù)據(jù)行的內(nèi)容都顯示出來;
  2. 在查詢語句之中先執(zhí)行FROM 子句確定數(shù)據(jù)來源(此時實際上是所有的行和列的數(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 要求完整的掌握給出的各個限定查詢符號.
? 關(guān)系運算符: >、 <、 >=、 <=、 <>(!=) ;
? 邏輯運算符:AND 、OR、NOT;
? 范圍運算符:BETWEEN...AND;
? 謂詞范圍: IN 、 NOT IN:
? 空判斷: IS NULL、IS NOT NULL
? 模糊查詢:LIKE.

4 使用LIKE實現(xiàn)模糊查詢的時候,如果不設(shè)置關(guān)鍵字(%%)表示查詢?nèi)?

5使用NOT IN 查詢時,查詢范圍里面不允許出現(xiàn)NULL,否則不會有任何查詢結(jié)果.


小結(jié):

  1. 清楚學(xué)習(xí)過的每一個子句的作用: SELECT,FROM ,WHERE,ORDER BY ;
  2. 多個條件判斷的時候一定要使用邏輯連接,而且盡量使用”()”,做一個區(qū)分
  3. 遇到問題慢慢分析,別著急;

9.結(jié)尾

這是本人關(guān)于sql基礎(chǔ)的一些總結(jié)和概括,當(dāng)然還缺一些內(nèi)容,
比如mysql的一些使用方法
Mysql的常用功能
Mysql有別于其他數(shù)據(jù)庫系統(tǒng)的特色功能

如果你有任何意見或建議,請與本人聯(lián)系,我會非常感謝你指出的不足,

最后,希望我們都好好學(xué)習(xí).
author:天宇不看海,2018/12/9/ 17.30 于深圳

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,067評論 5 115
  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,140評論 0 44
  • 寬敞的勞斯萊斯車內(nèi)。 韓少坐姿筆挺,雙手?jǐn)R在膝蓋上,一副生人勿近的模樣。光是身上散發(fā)出來的強大氣場就可以壓死人。瞟...
    幽蘭馨雨閱讀 417評論 0 0
  • 做壽司 豆沫湯圓 炒年糕
    鹿阿潞閱讀 445評論 0 0
  • 如果頭上沒有頭發(fā), 長著糖果會怎樣呢? 一下就能看見, 大家的秘密信息。 頭上有咖啡糖的人, 應(yīng)該是個小偷。 頭上...
    湯圓小俠閱讀 509評論 2 4

友情鏈接更多精彩內(nèi)容