《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$

 一行一行地读取数据

 

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