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 aaa@sina.com 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 AAA@SINA.COM 0925111109 JING@SINA.COM 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语句检索出来的结果集