1.排序检索数据
1.1排序数据
## 子句
SQL语句由子句构成,有些子句是必需的,而有的是可选的。
一个子句通常由一个关键字和所提供的数据组成,比如select语句的FROM子句。
## 使用ORDER BY子句可以明确排序所检索的数据
SELECT studentName FROM student ORDER BY studentName; (以字母顺序进行排序)
## 按多个列排序
检索所有列并首先按年龄,最后再按照name排序
SELECT * FROM student ORDER BY age,studentName;
## 指定排序方向
排序分为升序(ASC)和降序(DESC)升序为默认,如果要降序排序,必须使用DESC关键字。
SELECT * FROM student ORDER BY age DESC; (年龄从大到小排列)
## 多个列排序
SELECT * FROM student ORDER BY age DESC,studentName;
注意: DESC关键字只应用到位于其前面的列名,在上例中,只有age指定desc,name不指定还是默认升序
## 在多个列上指定排序
如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
2.过滤数据
2.1使用WHERE子句
## 在select中数据根据WHERE子句中指定的搜索条件进行过滤
检查一个列是否有指定值
SELECT * FROM student WHERE age=17;
## WHERE子句的位置
WHERE子句跟在表名FROM子句后,在同时使用OEDER BY和WHERE子句时,因该让ORDER BY位于WHERE之后。
2.2WHERE子句操作符
## 上述说明了一个列是否包含特定的值,MySQL支持以下列出的所有条件操作符:
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
BETWEEN 在指定的两个值之间
## mysql在执行检索时默认不区分大小写
## 不匹配检查
检索年龄不是17岁的学生
select * from student WHERE age <> 17;
## 范围值检查
检索年龄16~18之间的学生,包括16,18
SELECT * FROM student WHERE BETWEEN 16 AND 18
## 空值检查
在一个列不包含值时,称为空值NULL。
NULL: 无值,它与0 ,空字符串,空格不同。
1.检索家庭住址为NULL的学生
SELECT * FROM student WHERE address IS NULL
2.反之,不为NULL
SELECT * FROM student WHERE address IS NOT NULL
3.数据过滤
3.1组合WHERE子句
## MySQL允许给出多个WHERE子句如: AND OR
## 操作符:用来联结或改变WHERE子句中的子句关键字,也称为逻辑操作符。
3.1.1 AND操作符
## 为了通过不止一个列过滤,可使用AND操作符给WHERE子句添加条件
检索年龄等于17并且姓名是张三的学生信息
SELECT * FROM student WHERE age=17 AND studentName='张三';
3.1.2 OR操作符
## OR操作符匹配任意条件
检索年龄等于17或者性别是张三的学生信息
SELECT * FROM student WHERE age=17 OR studentName='张三';
3.1.3 计算次序
## 示例
SELECT * FROM student where age>17 OR gradeId=1 AND studentName='张三';
上述示例会先过滤AND操作符,所以此时的OR就没有任何意义
计算次序: AND——OR
## 解决方法
SELECT * FROM student where (age>17 OR gradeId=1) AND studentName='张三';
3.2 IN操作符
## IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配
检索学号是10000或者10001的
SELECT * FROM student WHERE studentNo IN(10000,10001);
## IN 操作符和OR 的关系
其实IN操作符和OR实现的功能是一样的,不满足都不匹配,满足一个匹配一个,全部满足全部匹配.
## 那为什么还要使用IN操作符呢
1.IN的语法更清楚更直观
2.在使用IN时,计算的次序比较容易管理
3.IN操作符比OR执行快
4.IN的最大优点是可以包含select语句
3.3 NOT 操作符
## NOT操作符否定之后的任何条件
检索除了学号为10000和10001的学号都显示
SELECT * FROM student WHERE studentNo NOT IN(10000,10001);
4.用通配符进行过滤
4.1 LIKE操作符
## LIKE操作符
要想搜索某个包含指定文本的数据,必须使用通配符,但使用通配符的前提是必须使用LIKE 操作符.
## 通配符
用来匹配值的一部分的特殊字符.
4.1.1 百分号(%) 通配符
## %表示任何字符出现的任意次数
1.将检索任意以张开头的姓名
SELECT * FROM student WHERE studentName LIKE '张%';
2.检索包含任何位置包含三的位置
SELECT * FROM student WHERE studentName LIKE ='%三%';
4.1.2下划线 (_) 通配符
## 下划线的用途与%一样,但它只匹配单个字符而不是任意
检索姓张并且两个字的
SELECT * FROM student WHERE studentName LIke '张_'
4.2使用通配符的技巧
## 不要过度使用通配符
## 仔细注意通配符的位置,如果放错地方可能不会返回想要的数据