1.普通查询
SELECT * FROM student;
SELECT是关键字,表示将要执行一个查询,*表示“所有列”,FROM表示将要从哪个表查询。
注意:查询结果也是一个二维表,它包含列名和每一行的数据
select语句并不是一定要包含from字句。例如
select 100+200;
2.条件查询
查询班级号为 20201001 的学生
SELECT * FROM student where class_num = '20201001';
查询班级号为 20201001 的学生姓名和性别,当需要查询多列的时,可以使用 ',' 来进行分割。
SELECT name,sex FROM student where class_num = '20201001';
'or'和'and'可以在条件语句中表示子条件的或者与并且。
SELECT name FROM student where class_num = '20201001' or sex = '男';
SELECT name,sex FROM student where class_num = '20201001' and sex = '男';
'not'表示之后一个子条件的否定
SELECT name FROM student where not class_num = '20201001' ;
IN 操作符允许在 WHERE 子句中规定多个值。
查询出用户id为1和3的用户记录
select * from student where id in (1,3)
3.去重查询
SELECT DISTINCT sex from student
4.模糊查询
模糊查询 like 通配符(% 任意多个字符 _单个字符)
查询出所有姓王的同学
SELECT * FROM student WHERE name like '王%';
查询姓王且名字只有两个字的学生
SELECT * FROM student WHERE name like '王_';
查询出所有含有花字的同学的名称
SELECT * FROM student WHERE name like '%花%';
5.排序
我们使用SELECT查询时,细心的读者可能注意到,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。例如按照年龄从低到高进行排序:
SELECT * FROM student ORDER BY age;
如果要反过来,按照年龄从高到底排序,我们可以加上DESC表示降序:
SELECT * FROM student ORDER BY age DESC;
按照年龄降序,学号升序
SELECT * FROM student ORDER BY age DESC,sno;
默认的排序规则是ASC:“升序”,即从小到大。ASC可以省略,即ORDER BY score ASC和ORDER BY score效果一样。
6.分页查询(限制查询)
使用SELECT查询时,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条。
分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT OFFSET 子句实现。我们先把所有学生按照成绩从高到低进行排序:
现在,我们把结果集分页,每页3条记录。要获取第1页的记录,可以使用:
SELECT * FROM student LIMIT 3 OFFSET 0;
上述查询LIMIT 3 OFFSET 0表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。
如果要查询第2页,那么我们只需要“跳过”头3条记录,也就是对结果集从3号记录开始查询,把OFFSET设定为3:
SELECT * FROM student LIMIT 3 OFFSET 3;
可见,分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize(这里是3),然后根据当前页的索引pageIndex(从1开始),确定LIMIT和OFFSET应该设定的值:
- LIMIT总是设定为pageSize;
- OFFSET计算公式为pageSize * (pageIndex - 1)。
可以使用另外一种形式表示第三页的查询:
SELECT * FROM student limit 6,3;
limit之后第一个数表示开始截取的记录的索引,第二个数表示pageSize。