1.表查询数据
1> 查询数据表中所有数据
语法:select * from 表名;
2> 查询指定字段的显示
语法:select 字段1,字段2,… from 表名;
3> as 别名
在查询时,默认结果显示的字段和表中字段名相同,可以通过别名来修改显示的样式.
语法:select 字段1 as 别名,字段2 别名,… from 表名;
4> 消除重复数据
在查询数据时,查询结果可能会有很多重复的数据,如果不想重复,可以使用 distinct 来实现去重.
语法:select distinct 字段名 from 表名;
5> 带条件查询 where 子句
查询数据时,需要根据不同的需求设置条件。 通过 where 子句来设置查询条件.
语法:select distinct 字段名 from 表名 where 条件;
* where 条件可以使用运算符操作:
(1)比较运算符
- 等于: =
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- 不等于: != 或 <>
(2)逻辑运算符
- and
- or
- not
(3)模糊查询 like
- % 表示任意多个任意字符
- _ 表示一个任意字符
(4)范围查询
- in 表示在一个非连续的范围内 , 可以使用 or 实现
- between … and … 表示在一个连续的范围内,可以使用 and 实现 “`
(5)空判断 null
在数据库中,允许在数据添加是没有数据,使用空值来表示。 空值不等于0,也不等于‘’,需要使用特殊的判断方式.
- 判断空值 is null
- 判断非空值is not null
(6)查询结果排序
排序使用 order by 子句 asc(默认) 升序 / desc 降序
语法:select * from 表名 order by 列1 asc/desc [,列2 asc/desc,…]
多字段排序 可以对多个字段进行排序,只需将字段的排序方式依次写在 order by 后面即可,字段间使用逗号分隔
(7)分页查询
查询数据库时,由于数据较多,在显示过程中不可能将数据全部显示。 可以使用分页查询,只显示指定的一部分数据.
语法:select from 表名 limit start=0,count *
- 从start开始,获取count条数据
- start默认值为0
- 需要获取数据的前n条的时候可以直接写 limit n
- 查询第 N 页 M 条数据,可以通过公式算出:(N - 1) * M
(8)聚合函数
在MySQL中提供了一些定义好的函数,利用这些函数提供对数据的统计功能。
常用的聚合函数:
- sun() 作用类型:数字 描述:对指定列中的所有非空值求总和;
- avg() 作用类型:数字 描述:对指定列中的所有非空值求平均值;
- min() 作用类型:数字、字符、datatime 描述:返回指定列中的最小数字、最早的日期或者最小的字符串;
- max() 作用类型:数字、字符、datatime 描述:返回指定列中的最大数字、最近的日期或者最大的字符串;
- count() 作用类型:任意基于行的数据类型 描述:统计结果集合中全部记录行的数量
(9) 分组
分组就是将相同数据放到一起进行处理。 单纯的分组是没有意义的,需要配合聚合函数一起使用。
语法: select 分组的字段名,聚合函数… from 表名 group by 分组字段名 having 分组后的条件
- 多字段分组
可以对多个字段进行分组,需要注意的是多字段时,只有对应字段完全相同,才能分为同一组- group_concat(字段名)
作用:根据分组结果,使用group_concat()来获取分组中指定字段的集合- having条件子句
having 作用和 where 类似,用来去分组数据进行筛选- 分组汇总with rollup
作用:会在分组下方,加一行,显示汇总
2.多表查询数据
在数据库操作中,数据往往不是存在一张表中的,同一个项目中,根据设计范式,数据可能分散在不同的多张表中,这时查询数据时,就需要多表查询。
1> 普通多表查询(无意义)
作用:直接将表放在from后面,进行读取
语法:select 表名.字段 … from 表名1,表名2…
2>多表查询连接条件
在多表个表进行查询时,表与表之间应该是有有关系的,一般会以外键的形式来建立表间的关系。
语法:select 表名1.查询字段名,表名2.查询字段名 from 表名1,表名2 where 表名1.字段名 = 表名2.字段名;
3> 表别名
在多表操作时,由于表的名字比较长,在写SQL语句时非常不方便。可以在查询时,给表起个别名,代替表名来操作
语法: select 别名.字段名… from 表1 as 表1别名,表2 表2别名… [条件]
4> 内连接查询
作用:查询的结果为两个表匹配到的数据
语法: select * from 表1 inner join 表2 on 表1.列 运算符 表2.列;
注意:数据库默认的连接方式就是内连接查询, inner join 可以不显示的写出来。 连接条件使用 on 进行指定。尽量不要使用 where,where在其它连接方式时,指定的连接条件无效。
5>左连接查询
作用:查询的结果为根据左表中的数据进行连接,如果右表中没有满足条件的记录,则连接空值。
语法: select * from 表1 left join 表2 on 表1.列 运算符 表2.列;
<在实际工作中,右连接使用的非常少,因为左连接完全可以替代右连接,在连接过程中,只需要调整表的顺序即可。>
6> 子查询
作用:作用:在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
语法: select * from 表1 where 条件 运算符 (select 查询);
标量子查询
作用:子查询返回的结果是一个数据(一行一列)
语法:主查询 where 条件 比较运算符 (列子查询)列级子查询
作用:子查询返回的结果是一列(一列多行)
语法:主查询 where 条件 in (列子查询)行级子查询
作用:子查询返回的结果是一行(一行多列)
语法:主查询 where (字段1,2,…) = (行子查询)
7> 自动连接查询
作用:在查询数据时,只有一张表,查询时使用自己连接自己。
语法: select * from 表1 inner join 表1 on 表1.列 运算符 表1.列 where 条件