《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  qwe@163.com   
0922221324  何影         女       1990-10-07 00:00:00.000000  090501      879  13178978999  [email protected]  
0925121107  梁欣         女       1989-07-07 00:00:00.000000  090502      777  13145678921  bing@126.com  
0935222201  夏文斐        女       1990-08-09 00:00:00.000000  090502      867  15978945645  tang@163.com  

(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  HAN@163.COM    
0823210007  SU12@164.COM   
0824113307  CUI@126.COM    
0922210009  QWE@163.COM    
0922221324  [email protected]   
0925111109  [email protected]  
0925121107  BING@126.COM   
0935222201  TANG@163.COM   
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語句檢索出來的結果集

如果我們相對查詢到的結果一行行地操作,就要使用遊標

   
  DELIMITER $
  CREATE PROCEDURE cursorTest()
   BEGIN 
     DECLARE num INT DEFAULT NULL;
     DECLARE yy INT DEFAULT 0;
     DECLARE test CURSOR FOR SELECT studentno FROM student;
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET yy=1;
     OPEN test;
     REPEAT
     FETCH test INTO num;
     SELECT num;
     UNTIL yy=1
     END REPEAT;
     CLOSE test;
   END$

 一行一行地讀取數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章