1. 程式人生 > 資料庫 >《MySQL必知必會》總結

《MySQL必知必會》總結

1、瞭解

資料庫

MySQL是資料庫管理系統(DBMS),而不是資料庫,資料庫是DBMS建立的容器,使用DBMS可以訪問資料庫

主鍵

唯一標識一個行,沒有主鍵的時候更新和刪除表中的特定的行就不能實現。作為主鍵要保證唯一性和非空

主鍵選取的應該是不經常更改的列

 

2、條件查詢

(1)注意點

AND的優先順序要高於OR,當AND與OR一起使用的時候可以用新增括號的方式來表示

(2)萬用字元(%和_)的使用

不能過多地使用萬用字元,因為帶有萬用字元的搜尋效能較低

不要把萬用字元放到搜尋條件的開始位置

 

3、正則表示式

(1)OR匹配

SELECT *
FROM student
WHERE classno REGEXP '090501|090502'
studentno   sname      sex                       birthday  classno   point        phone  email         
----------  ---------  ------  --------------------------  -------  ------  -----------  --------------
0922210009  許海冰        男       1989-09-08 00:00:00.000000  090501      789  13623456778  [email protected]   
0922221324  何影         女       1990-10-07 00:00:00.000000  090501      879  13178978999  [email protected]  
0925121107  樑欣         女       1989-07-07 00:00:00.000000  090502      777  13145678921  [email protected]  
0935222201  夏文斐        女       1990-08-09 00:00:00.000000  090502      867  15978945645  [email protected]  

(2)匹配幾個字元之一

SELECT *
FROM student
WHERE birthday REGEXP '[1989-|1990-]08-09'

中括號中的內容只要滿足一個即可

(3)匹配範圍

[1-9]範圍是1到9,[a,z]的範圍是a到z

(4)匹配特殊字元

需要使用//,例如:匹配 . 的時候使用//.

(5)字元表

 

 

 

4、建立計算欄位

(1)拼接欄位

SELECT studentno,CONCAT(classno,sname) classnoSname
FROM student
studentno   classnoSname     
----------  -----------------
0822111208  080601韓吟秋  
0823210007  080501宿致遠  
0824113307  080601崔巖堅  
0922210009  090501許海冰  
0922221324  090501何影     
0925111109  090801敬秉辰  
0925121107  090502樑欣     
0935222201  090502夏文斐  
0937221508  090802平靖     

(2)算術運算

SELECT classno,POINT,classno*POINT chengji
FROM student
classno   point   chengji  
-------  ------  ----------
080601      666    53680266
080501      658    52969658
080601      787    63432987
090501      789    71405289
090501      879    79550379
090801      789    71641989
090502      777    70320054
090502      867    78465234
090802      789    71642778

 

5、函式

(1)文字處理函式

SELECT studentno,UPPER(email)
FROM student
studentno   Upper(email)   
----------  ---------------
0822111208  [email protected]    
0823210007  [email protected]   
0824113307  [email protected]    
0922210009  [email protected]    
0922221324  [email protected]   
0925111109  [email protected]  
0925121107  [email protected]   
0935222201  [email protected]   
0937221508  (NULL)         

 

 

 (2)日期處理函式

 

 

 (3)數值處理函式

 

 

 (4)聚集函式(彙總資料)

AVG、COUNT、SUM、MAX、MIN

 

6、資料分組

(1)建立分組,count計算的是每一組的資料的個數

SELECT sex,COUNT(sex)
FROM student 
GROUP BY sex 

(2)過濾分組

SELECT sex,COUNT(sex)
FROM student 
GROUP BY sex 
HAVING COUNT(*)>=5

(3)where與having的混合使用

SELECT sex,COUNT(sex)
FROM student 
WHERE POINT>=700
GROUP BY sex 
HAVING COUNT(*)>=2

where的過濾是在分組前進行的,having的過濾作用是在分組後進行的

(4)分組排序

SELECT classno,COUNT(1) num
FROM student 
WHERE POINT>=700
GROUP BY classno 
HAVING COUNT(*)>=1
ORDER BY classno

select子句的順序是:select、from 、where、group by、having、order by、limit

 

7、聯結

(1)內部聯結

SELECT student.studentno,sname,final 
FROM student,score
WHERE student.studentno=score.studentno
SELECT student.studentno,sname,final 
FROM student INNER JOIN score
ON student.studentno=score.studentno

(2)外聯結

SELECT *
FROM student LEFT JOIN score
ON student.studentno=score.studentno
SELECT *
FROM student RIGHT JOIN score
ON student.studentno=score.studentno

左外聯結是保留所有的student,即:即使學生沒有匹配到分數,依舊會有該學生的資訊;右外連線是保留所有的分數資訊

 

8、組合查詢

SELECT *
FROM student
WHERE sex='女'
UNION
SELECT *
FROM student
WHERE classno='080601'

UNION會自動取出重複行,UNION ALL不會去掉重複行

 

9、檢視

  檢視為虛擬的表。它們包含的不是資料而是根據需要檢索資料的查詢。檢視提供了一種MySQL的SELECT語句層次的封裝,可用來簡化資料處理(重用sql語句,不用知道具體的實現細節)以及重新格式化基礎資料或保護基礎資料。

10、儲存過程

(1)好處

效能更好

便於後期維護

(2)缺點

編寫過程複雜

 

11、遊標

(1)好處

能夠對返回的結果集前進或後退一行或多行,遊標是一個數據庫查詢而不是一條select語句,他是select語句檢索出來的結果集