第一到三章:了解SQL、MySQL简介、使用MySQL
- 数据库: DB
- 表
- 模式 -> 什么是模式?
- 列
- 数据类型
- 行
- 主键
- 数据库管理系统: DBMS(比如MySql)
- SQL: 一种与数据库通信的结构化查询语言
- MySQL: 一个数据库软件
- MySQL工具: MySQL命令行实用程序、 MySQL Administrator、 MySQL Query Browser
- 连接和登录数据库
- 主机名(本地localhost)
- 端口(默认3306)
- 合法的用户名
- 密码
- 选择数据库
- 查看表
- 查看列
- desc table; 或者 show column from table;
- 其他show 语句: help show;
- show status; //获取服务器状态信息
- show create database; show create table; //显示创建数据库或者表的mysql语句
- show grants; //显示授予用户的安全权限
- show errors; show warnings; //显示服务器错误或者警告消息
- infomation_schema: 获得和过滤模式信息
第四章:检索数据
-
SELECT
- 想选择什么?
- 想从什么地方选择?
-
检索一个列
- SELECT name FROM tb_student;
-
检索多个列
- SELECT name, age FROM tb_student;
-
检索所有列
- SELECT * FROM tb_student;
-
检索不同的行(去重)
- DISTINCT
- SELECT address FROM student;
- SELECT address, department FROM student;(每行都不同才算重复)
-
限制结果
- LIMIT 5 :表示返回不超过5条数据
- LIMIT 5, 3 :表示返回从第3行开始的5条数据
- SELECT * FROM student LIMIT 5, 3;
-
完全限定的表名
- 可以使用 表名.列名 和 数据库名.表名 限定
- SELECT student.name FROM crashcource.student;
第五章:排序检索数据
- ORDER BY 字句 (order by 对文本的排序取决于数据库设置)
- SELECT* FROM student ORDER BY birth; //把检索出来的结果按birth排序
- 按多个列排序
- SELECT * FROM student ORDER BY address, birth; //先按address排序,再按birth排序
- ORDER BY 默认是升序(从A到Z),指定 DESC 关键字是降序。
- SELECT * FROM student ORDER BY birth DESC;
- 多列降序排序
- SELECT * FROM student ORDER BY birth DESC, address; //先按birth降序排列,birth一样的再按address排列
- ORDER BY 和 LIMIT 的组合
- SELECT birth FROM student ORDER BY birth DESC LIMIT 1; //找出年纪最小的出生年份
第六章:过滤数据(WHERE字句)
-
WHERE字句操作符
=
!=
<
>
>=
<=
- <> 不等于
- BETWEEN AND 在指定的两个值间
- SELECR * FROM student WHERE name='小明';
- SELECR * FROM student WHERE birth BETWEEN 1990 AND 1999;
操作符后面是数值不需要单引号,如果是字符,就需要单引号
- 检查空值
- SELECR * FROM student WHERE birth IS NULL; //检索出生日期是空的学生
第七章:数据过滤(高级搜索条件)
- 逻辑操作符
- AND 与 (优先级更高)
- OR 或
- WHERE 可以包含任意条 AND 或者 OR 操作符,不过要注意优先级,加上小括号消除歧义
- IN 指定范围的匹配,跟 OR 功能一致,不过检索效率比 OR 更高
- SELECR * FROM student WHERE id IN (1,2,3); //查询id=1、2、3的记录
- NOT 取反
- 否定后面的条件
- SELECR * FROM student WHERE id NOT IN (1,2,3); //查询id=1、2、3以外的记录
第八章:通配符
- LIKE 操作符
- % 通配符:任何字符出现任意次数(可以区分大小写,怎么区分?)
- SELECT * FROM student WHERE name LIKE '谢%'; //检索出名字以'谢'开头的所有人
- _ 通配符:只能匹配单个字符
- 注意事项:
- 不要过度使用通配符,能用其他操作符代替就使用其他操作符
- 除非必须,不要把通配符放在搜索模式的开始处,效率最低
第九章:正则表达式
需要学习正则表达式的语法和规则
-
REGEXP 操作符
- SELECT * FROM student WHERE name REGEXP '.岳';
-
区分大小写
- 默认是不区分的
- 要区分的话需要加上 BINARY 关键字
- SELECT * FROM student WHERE name REGEXP BINARY '.yue';
-
OR 匹配
- REGEXP '1000 | 2000'
-
匹配几个字符之一
- REGEXP '[123]' 相当于 '1|2|3'
-
匹配范围
- [0123456789] 相当于 [0-9]
-
匹配特殊字符(转义)
- 正则表达式里面有一些特殊字符,要匹配这些特殊字符的时候,需要加上双反斜杠
\\
在前面转义-
\\.
\\-
\\|
\\[
\\]
\\\
-
-
\\f
换页 -
\\n
换行 -
\\r
回车 -
\\t
制表 -
\\v
纵向制表
- 正则表达式里面有一些特殊字符,要匹配这些特殊字符的时候,需要加上双反斜杠
-
匹配字符类
- 常见的一些组合的匹配
- [:alnum:] 任意字母和数字,同[a-zA-Z0-9]
- [:alpha:] 任意字母,同[a-zA-Z]
- [:blank:] 空格和制表,同[\t]
- [:cntrl:] ASCII控制字符(ASCII 0到31和127)
- [:digit:] 任意数字,同[0-9]
- [:graph:] 任意可打印字符,除了空格
- [:lower:] 任意小写字母,同[a-z]
- [:print:] 任意可打印字符
- [:punct:] 既不在 [:alnum:] 也不在 [:cntrl:] 中的任意字符
- [:space:] 包括空格在内的任意空白字符,同
[\\f\\n\\r\\t\\v]
- [:upper:] 任意大写字母,同[A-Z]
- [:xdigit:] 任意十六进制数字,同[a-fA-F0-9]
-
重复元字符
- * 任意个
- + 1个或者多个,同 {1,}
- ? 0个或者1个,同 {0,1}
- {n} 指定数目的匹配
- {n,} 不少于指定数目的匹配
- {n,m} 匹配数目的范围(m不超过255)
-
定位符
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
-
[[:>:]] 词的结尾
- REGEXP '^[0-9\.]' 匹配任意数字或者.开头的记录