MySQL學(xué)習(xí)筆記---基礎(chǔ)概念和一些基礎(chǔ)SQL語句(一)

MySQL學(xué)習(xí)筆記---基礎(chǔ)概念和一些基礎(chǔ)SQL語句(一)

作者:zhangjunqiang

MySQL學(xué)習(xí)筆記,以防遺忘

數(shù)據(jù)庫基本概念

數(shù)據(jù)庫:保存有組織的數(shù)據(jù)的容器(通常是一個文件或一組文件)。

表:某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單,數(shù)據(jù)庫中的表都有一個唯一的名字用來標(biāo)識自己。

模式:關(guān)于數(shù)據(jù)庫和表的布局及特性的信息。

列:表中的一個字段。所有表都是由一個或多個列組成,每個列都有對應(yīng)的數(shù)據(jù)類型。

行:表中的一個記錄。

主鍵:一列(或一組列),其值能夠唯一區(qū)分表中每個行(每條記錄)。

任意兩行都不具有相同的主鍵值,每個行都必須具有一個主鍵值(主鍵值列不允許NULL值)。

SQL:一種專門用來與數(shù)據(jù)庫通信的語言,SQL不依賴DBMS的存在而存在。

MySQL命令

mysql -user(u) username -password(p) password or none ?MySQL登錄

USE databasename; 使用數(shù)據(jù)庫

SHOW

SHOW DATABASES;(;可用\g代替):顯示當(dāng)前安裝的數(shù)據(jù)庫

SHOW TABLES; 查看當(dāng)前數(shù)據(jù)庫中的可用表的列表

SHOW COLUMNS FROM tablename; 查看某個表中的內(nèi)容,它對每個字段返回一行,行中包含字段名、數(shù)據(jù)類型、是否允許NULL、鍵信息、默認(rèn)值以及其他信息

DESCRIBE tablename; 和 SHOW COLUMNS FROM tablename; 具有相同的功能,前者是后者的縮寫版。

SHOW STATUS; 用來顯示廣泛的服務(wù)器狀態(tài)信息。

SHOW CREATE DATABASE databasename; 用來顯示創(chuàng)建特定數(shù)據(jù)庫的MySQL語句。

SHOW CREATE TABLE tablename; 用來顯示創(chuàng)建特定表的MySQL語句。

SHOW GRANTS; 用來顯示授權(quán)用戶(所有用戶或特定用戶)的安全權(quán)限。

SHOW ERRORS; 用來顯示服務(wù)器錯誤

SHOW WARNINGS; 用來顯示服務(wù)器的警告消息

SELECT

SELECT columnname FROM tablename; 用來檢索數(shù)據(jù)表中的coulumnname列中的內(nèi)容

SELECT row1,row2... FROM tablename; 用來檢索數(shù)據(jù)表中的row1,row2...行的內(nèi)容

SELECT * FROM tablename; *為通配符,用來檢索表中的所有列

SELECT DISTINCT key FROM tablename; 用來檢索表中不同值key的行

SELECT key FROM tablename LIMIT num; 返回key的前num行數(shù)據(jù)

SELECT key FROM tablename LIMIT num1,num2; 返回表中key的以num1為起點后num2行

SELECT tablename.colunname FROM tablename; 用來檢索數(shù)據(jù)表中的coulumnname列中的內(nèi)容,但是同時列出了表明和列名(完全限定)

SELECT coulumname FROM tablename ORDER BY key; 以key為導(dǎo)向排序(升序ASC,可省略)

SELECT coulumname FROM tablename ORDER BY key DESC; 以key為導(dǎo)向排序(降序,注:當(dāng)有多個key時DESC只作用于直接位于其前面的key)

SELECT coulumname FROM tablename WHERE condition; 按照條件condition從表中檢索指定列中的數(shù)據(jù)(WHERE子句在FROM子句后給出)

SELECT coulumname FROM tablename WHERE key BETWEEN c1 AND c2; 從表中檢索指定列中在條件c1和c2之間的數(shù)據(jù)(c1 <= c2)

SELECT coulumname FROM tablename WHERE key IS NULL; 從表中檢索key中為NULL的數(shù)據(jù)

操作符

用來聯(lián)結(jié)或改變WHERE子句中的子句的關(guān)鍵字。

AND操作符:

用在WHERE子句中的關(guān)鍵字,用來指示檢索滿足 所有 給定條件的行。

OR操作符:

用在WHERE子句中的關(guān)鍵字,用來表示檢索匹配 任一 給定條件的行。

IN操作符:

用在WHERE子句中的關(guān)鍵字,用來指定要匹配值的清單的關(guān)鍵字(取合法值的由逗號分割開的清單,全在圓括號中),功能與OR相當(dāng)。

NOT操作符:

用在WHERE子句中的關(guān)鍵字,用來否定它之后所跟的任何條件。

BETWEEN操作符:

用在WHERE子句中的關(guān)鍵字,用來檢查某個范圍的值。

通配符

用來匹配值的一部分的特殊字符。為在搜索子句中使用通配符,必須使用LIKE謂詞。LIKE指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配進(jìn)行比較。

%通配符:

表示任何字符出現(xiàn)的任一次數(shù)。

_通配符:

下劃線通配符 _ 用途與%一樣,但下劃線只匹配單個字符而不是多個字符。

通配符使用技巧

1、不要過度使用通配符。如果其他操作能達(dá)到相同的目的,應(yīng)該使用其他操作符。

2、在確實需要使用通配符時除非絕對有必要,否則不要把它們用在搜索模式的最開始處,因為這樣是最慢的。

3、仔細(xì)注意通配符的位置。如果放錯地方,可能不會返回想要的數(shù)據(jù)。

計算字段

1、Concat拼接字段:

把多個串鏈接起來形成一個較長的串,需要一個或多個指定的串,各個串之間用逗號隔開。

例如:SELECT Concat(vend_name,'(',vend_country,')') FROM vendors ORDER BY vend_name;

2、去掉返回的值中的空格:

(1)、RTrim()去掉右側(cè)多余的空格來整理數(shù)據(jù)。

(2)、LTrim()去掉左側(cè)多余的空格來整理數(shù)據(jù)。

(3)、Trim()去掉左右兩邊多余的空格來整理數(shù)據(jù)。

3、執(zhí)行算數(shù)運算(MySQL支持 加減乘除運算和圓括號改變運算優(yōu)先級):

計算字段另一個用途就是對檢索出的數(shù)據(jù)進(jìn)行算術(shù)計算。

例如:SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num = 20005;

事件處理函數(shù)

函數(shù)一般是在數(shù)據(jù)上執(zhí)行的,它給數(shù)據(jù)的轉(zhuǎn)換和處理提供了方便。大多數(shù)SQL實現(xiàn)支持用于處理文本串的函數(shù)、用于在數(shù)值數(shù)據(jù)上進(jìn)行算術(shù)運算操作的函數(shù)、用于處理日期和時間并提取特定成分的日期和時間函數(shù)、返回DBMS正使用的特殊信息的函數(shù)

1、常見的文本處理函數(shù):

(1)、Upper(str):將文本str轉(zhuǎn)換為大寫。

例:SELECT Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

(2)、Left(str, len):返回串str左邊的len個字符。

例:SELECT Left(vend_name, 3) AS vend_name_upcase FROM vendors ORDER BY vend_name;

(3)、Length(str):返回串str的長度。

例:SELECT Length(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

(4)、Locate(substr, str):返回串str的一個substr子串的第一個字符出現(xiàn)的位置,如果substr不再str中則返回0。該函數(shù)的另一個版本是Locate(substr,str,pos),表示從pos位置開始在str中尋找substr。

例:SELECT Locate('ACM', vend_name) FROM vendors ORDER BY vend_name;

注意:

1、ORDER BY子句必須位于FROM子句之后。

2、當(dāng)ORDER BY 子句和LIMIT子句同時使用時LIMIT子句必須位于ORDER BY子句之后。

3、同時使用WHERE子句和ORDER BY子句時應(yīng)將ORDER BY子句置于WHERE子句之后。

4、WHERE子句支持 =、>、<、!=、<>(不等于)、>=、<=、BETWEEN(指定的兩個值之間)過濾操作。

5、AND和OR操作符混合使用時要注意AND操作符的計算次序比OR操作符號的計算次序要高(操作符優(yōu)先級高),所以一般有多個操作符時要加上圓括號消除歧義(即使不這樣做也是正確的)

6、MySQL支持使用NOT對IN、BETWEEN和EXISTS子句取反(其他DBMS允許使用NOT對各種條件取反)。

7、尾空格可能會干擾通配符匹配,例如:'%anvil'如果anvil后有一個空格則不會被匹配出來??墒褂?%anvil%'或者使用函數(shù)解決此問題。

8、%通配符不會匹配到NULL。

9、SELECT語句的拼接完成的列是沒有名字的,它只是一個值,這種是無法在客戶機(jī)中直接使用的,所以可以用AS關(guān)鍵字賦予一個別名(也稱為導(dǎo)出列)。

例如:SELECT Concat(vend_name,'(',vend_country,')') AS vend_title FROM vendors ORDER BY vend_name;

聚集函數(shù):

運行在行組上,計算和返回單個值的函數(shù)(需要匯總數(shù)據(jù)而不需要檢索出來)

ACG(column):返回某列的平均值。

COUNT(column):返回某列的行數(shù)。COUNT(*):返回所有列的和。

MIN(column):返回某列的最小值。

MAX(column):返回某列的最大值。

SUM(column):返回某列的和。

DISTINCT:只包含不同值

分組:

分組允許把數(shù)據(jù)分為多個邏輯組,以便能對每個組進(jìn)行聚集計算。

創(chuàng)建分組:GROUP BY子句,GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY子句之前。

WITH ROLLUP:可以得到每個分組匯總級別的值(和ORDER BY子句互斥)。

HAVING:HAVING過濾分組,WHERE過濾列,HAVING位于GROUP BY子句之前,HAVING位于GROUP BY子句之后。(WHERE在分組前進(jìn)行過濾,HAVING在分組后進(jìn)行過濾)

GROUP BY和ORDER BY子句的區(qū)別:

1、OEDER BY是排序后的輸出而GROUP BY是分組的順序(不一定是期望輸出的順序)

2、ORDER BY任意列都可以使用,而GROUP BY只可能使用選擇列或表達(dá)式列,而且必須使用每個選擇列表達(dá)式。

3、ORDER BY不是必須出現(xiàn)在SQL語句中,但是如果與聚集函數(shù)一起使用列(或表達(dá)式)GROUP BY子句必須存在于SQL語句中。

SELECT 子句順序:

子查詢:

嵌套在其他查詢中的查詢。如:

SELECT cust_name

FROM customers

WHERE cust_id IN

(

SELECT cust_id

FROM orders

WHERE order_num IN

(

SELECT order_num

FROM orderitems

WHERE prod_id = 'TNT2'

)

);

一些概念

完全限定:表名.列名

相關(guān)子查詢:涉及外部查詢的子查詢

關(guān)系表:將不同數(shù)據(jù)分別存儲在不同數(shù)據(jù)表中,用相應(yīng)的關(guān)系進(jìn)行連接。

主鍵:每個表都有一個唯一的標(biāo)識。

外鍵:某個表的一列,包含另一個表的主鍵值。

最后編輯于
?著作權(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)容

  • 關(guān)系型數(shù)據(jù)庫和SQL SQL語言的三個部分DML:Data Manipulation Language,數(shù)據(jù)操縱語...
    Awey閱讀 2,047評論 0 13
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,334評論 0 7
  • 1.簡介 數(shù)據(jù)存儲有哪些方式?電子表格,紙質(zhì)文件,數(shù)據(jù)庫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 2,012評論 0 2
  • 經(jīng)典MSSQL語句大全和常用SQL語句命令的作用 下列語句部分是Mssql語句,不可以在access中使用。 SQ...
    Keropok閱讀 2,452評論 0 30
  • 2017.10.9 #199 日月雜交記 14:35pm-11:20am 今天奉節(jié)天氣晴好,穿著短袖很是涼爽,這會...
    少年阿段閱讀 227評論 0 0

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