No.1 入門篇——複雜度分析
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.com0922221324 何影 女 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語句檢索出來的結果集