4.1 基础查询
MySQL从数据表中查询数据的基础语句是select语句,select语句返回在一个数据库中查询的结果,该结果被看作记录的集合。在select语句中,用户可以根据不同的需求使用不同的查询条件。
1. 创建数据表和表结构的说明
建了三个表
2. 查询所有字段
查询所有字段就是查询表中的所有数据,在MySQL中使用select语句查询表中的数据,具体语法格式如下:select 字段名1,字段名2,...,字段名n from 表名;
在以上语法中,字段名表示表中的字段名,表名表示查询数据的表名称。
在MySQL中,提供了通配符“ * ”,该通配符可以代替所有的字段名,便于书写SQL语句,具体语法格式如下。select * from 表名;
3. 查询指定字段
select 字段名1,字段名2,... from 表名;
4.2 条件查询
1. 带有关系运算符的查询
在select语句中可以使用where子句指定查询条件,从而查询出筛选后的数据,语法格式如下。select 字段名1,字段名2,... from 表名 where 条件表达式;
需要注意的是,"!="和 "<>"都表示不等于,有个别数据库不支持"!=",因此建议使用"<>"。
2. 带有AND关键字的查询
在使用select查询数据时,有时不是简单的一个查询条件,而是多个查询条件才可以过滤查询到正确的数据,在MySQL中可以使用AND关键字连接查询条件,具体语法格式如下:select 字段名1,字段名2,... from 表名 where 条件表达式1 and 条件表达式2 ...;
3. 带or关键字的查询
select 字段名1,字段名2,... from 表名
where 条件表达式1 or 条件表达式2 ...;
4. 带in或not in关键字的查询
MySQL提供了in 或 not in 来判断某个字段是否在指定集合中,如果不满足条件,则数据会被过滤掉,具体语法格式如下:select 字段名1,字段名2,... from 表名 where 字段名 [not] in(元素1,元素2,...) ...;
在以上语法格式中,字段名1,字段名2等表示需要查询的字段名称,where子句中的字段名表示需要过滤的字段,not是可选的,表示不在集合范围内,元素1、元素2等是集合中的元素。
5. 带is null 或 is not null关键字的查询
在数据表中可能存在空值,空值与0不同,也不同于空字符串。在MySQL中使用is null 或 is not null关键字判断是否为空值,具体语法格式如下。select 字段名1,字段名2,... from 表名 where 字段名 is [not] null;
6. 带between and关键字的查询
between and 关键字用于判断某个字段的值是否在指定范围内,若不在指定范围内,则会被过滤掉,具体语法格式如下。select 字段名1,字段名2,... from 表名 where 字段名 [not] between 值1 and 值2;
7. 带like关键字的查询
在某些情况下可能需要进行模糊查询,select 字段名1,字段名2,... from 表名 where 字段名 [not] like '匹配字符串';
“匹配字符串”用来指定要匹配的字符串,这个字符串可以是一个普通字符串,也可以是包含百分号(%)和下划线(_)的通配符字符串,其中百分号表示任意0~n个字符,下划线表示任意一个字符。
8. 带distinct关键字的查询
MySQL提供了distinct关键字用于去除重复数据,具体语法格式如下,select distinct 字段名 from 表名;
4.3 高级查询
1. 排序查询
为了方便用户自定义结果集中数据的顺序,MySQL提供了order by 用于对查询结果进行排序。select 字段名1,字段名2,... from 表名 order by 字段名1 [ASC|DESC], 字段名2[ASC|DESC]...;
在以上语法格式中,字段名1,字段名2等表示需要查询的字段名称,order by关键字后的字段名表示指定排序的手段,ASC和DESC参数是可选的,其中ASC表示按升序排序,DESC代表按降序排序,如果不写该参数,则默认按升序排序。
2. 聚合函数
在查询出数据之后,可能需要对数据进行统计,MySQL提供了一系列函数实现数据统计,也称为聚合函数,具体如下表所示。
|函数名称|作用|
|-:-|-:-|
|count()|返回某列的行数|
|sum()|返回某列值的和|
|avg()|返回某列的平均值|
|max()|返回某列的最大值|
|min()|返回某列的最小值|
count()函数
count()函数的语法格式如下,
select count(*|1|列名) from 表名;
在以上语法格式中,count()函数有3个可选参数,其中count()是返回行数,包含NULL;count(列名)是返回特定列的值具有行数,不包含NULL;还有一种是count(1),它与count()返回的结果是一样的,如果数据表没有主键,则count(1)的执行效率会高一些。
另外,查询出的结果集列名可以起别名,只需要在count()后面加上“as 别名”即可。sum()函数
sum()函数用于计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0,具体语法格式如下。
select sum(字段名) from 表名;
avg()函数
avg()函数用于计算指定列的平均值,如果指定列的类型不是数值类型,那么计算结果为0,具体语法格式如下。
select avg(字段名) from 表名;
max()函数
max()函数用于计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算,具体语法格式如下。
select max(字段名) from 表名;
min()函数
min()函数用于计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算,具体语法格式如下。
select min(字段名) from 表名;
3. 分组查询
在MySQL中可以使用group by关键字进行分组查询,语法格式如下。select 字段名1,字段名2,... from 表名 group by 字段名1,字段名2,...;
在以上语法格式中,group by后面的字段名是对查询结果分组的依据。
group by通常与聚合函数一起使用。
4. Having子句
MySQL提供了having子句,用于在分组后对数据进行过滤,在它后面可以使用聚合函数,而where子句是在分组前对数据进行过滤,在它后面不可以使用聚合函数。Having子句的语法表达式如下。select 字段名1,字段名2,... from 表名 group by 字段名1,字段名2,...[having 条件表达式];
5. LIMIT分页
在查询数据时一般会返回几条、几十条甚至更多的数据,但用户可能只需要其中的某几条,而且这种查询方式明显会影响程序的性能,为了解决这一问题,MySQL提供了limit关键字用于限制查询结果的数量。limit语法格式如下。select 字段名1,字段名2,... from 表名 limit [m,] n;
在以上语法格式中,第一个参数m是可选的,代表起始索引,若不指定,则使用默认值为0,代表第一条记录;第二个参数n是必选的,代表从第m+1条记录开始取n条记录。