DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where 等

select * from 表名;

语法:select

字段列表

from

表名列表

where

条件列表

group by

分组字段

having

分组之后的条件

order by

排序

limit

分页限定

基础查询

一、多个字段的查询

select 字段名1,字段名2,... from 表名;

注意:如果查询所有字段,可以用 * 来代替字段列表

二、去除重复

distinct

eg: SELECT DISTINCT 列名 FROM 表名;

多列名时,保证每行对应列名处完全一样才可以去除

三、计算列

一般可以使用四则运算计算一些列的值。

eg:SELECT name,math,english,math+english FROM 表名;

math + english即是运算,并且新建别名

IFNULL(表达式1,表达式2):NULL参与的运算,计算结果都为NULL表达式1:哪个字段需要判断为NULL

表达式2:替换为哪个值

SELECT name,math,english,math+ IFNULL(english,0) FROM 表名;

四、起别名

SELECT name,math,english,math+ IFNULL(english,0) AS 总分 FROM 表名;


AS 也可以省略,一定要有空格

条件查询

1.where字句后跟条件

2.运算符、< 、<= 、>= 、= 、<>(不等于)

BETWEEN...AND...

IN( 集合)

LIKE:模糊查询

占位符:_:单个任意字符

%:多个任意字符

IS NULL

and 或 &&

or 或 ||

not 或 !

-- 查询年龄大于20岁SELECT * FROM student WHERE age > 20;

SELECT * FROM student WHERE age >= 20;

-- 查询年龄等于20岁

SELECT * FROM student WHERE age = 20;

-- 查询年龄不等于20岁

SELECT * FROM student WHERE age != 20;

SELECT * FROM student WHERE age <> 20;

-- 查询年龄大于等于20 小于等于30

SELECT * FROM student WHERE age >= 20 && age <=30;

SELECT * FROM student WHERE age >= 20 AND age <=30;

SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查询年龄22岁,18岁,25岁的信息

SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25

SELECT * FROM student WHERE age IN (22,18,25);

-- 查询英语成绩为null

SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断

SELECT * FROM student WHERE english IS NULL;

-- 查询英语成绩不为null

SELECT * FROM student WHERE english IS NOT NULL;

LIKE的模糊查询例子-- 查询姓马的有哪些? like

SELECT * FROM student WHERE NAME LIKE '马%';

-- 查询姓名第二个字是化的人

SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查询姓名是3个字的人

SELECT * FROM student WHERE NAME LIKE '___';

-- 查询姓名中包含德的人

SELECT * FROM student WHERE NAME LIKE '%德%';

一.排序查询语法:order by 字句

order by 排序字段1 排序方式1,排序字段2 排序方式2,..排序字段n 排序方式n;

排序字段:目标列

排序方式:

ASC:升序,默认

DESC:降序

注意:

如果有多个排序条件,则只有前面条件值一样时,才执行后面的条件

二.聚合函数

将一列数据作为一个整体,进行纵向的计算(排除了非空的值)

SELECT 聚合函数(列名) FROM 表名;

如果把null纳入计算,要把null的值替换后再计算

解决方案:①:IFNULL函数

SELECT 聚合函数(IFNULL(列名,替换后的值)) FROM 表名;

②:使用不包含NULL的列进行计算

1、count:计算个数1. 一般选择非空的列:主键

2. count(*):一般不推荐写 * ,一般写主键

2、max:计算最大值

3、min:计算最小值

4、sum:计算和

5、avg:计算平均值

三.分组查询

语法:

group by 分组字段;

注意:1.分组之后查询的字段:分组字段、聚合函数

2.

where 和 having的区别

where:在分组之前限定,如果不满足条件,不参与分组

having:在分组之后限定,如果不满足条件,不会被查询出来(意味着,having有时候在分组后基础上再筛选)

where:后面不可以跟聚合函数

having:后可以进行聚合函数的判断


简化写法,在聚合函数后取一个别名,判断时用别名(一般取英文)进行判断


四.分页查询

语法:limit 开始的索引, 每页的条数;(仅仅在MySQL语句)

公式:开始的索引 = (当前的页码-1)* 每页显示的条数

分页操作时一个MySQL的“方言”