数据查询是指从数据库中获取所需要的数据。数据查询是数据库操作中最常用,也是最重要的操作。通过不同的查询方式可以获得不同的数据。用户可以根据自己对数据的需求使用不同的查询方式。
1.单表查询
单表查询是指从一张表中查询所需要的数据。
1.1 查询所有字段
语法:select * from 数据表名;
1.2 查询指定字段
语法:select 字段名 from 数据表名;
如果是查询多个字段,可以使用“,”对字段进行分隔。
例如:查询tb_one中的name和score字段
1.3 查询指定数据
如果要从很多记录中查询出指定的记录,那么就需要一个查询的条件。设置查询条件应用的是where子句。
语法:select 字段 from 数据表名 where 条件;
例如:向tb_one表中查询name=小明的数据
1.4 带关键字in的查询
关键字in可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,该记录将被查询出来;如果不在集合中,则不满足查询条件。
语法:select 字段 from 数据表名 where 条件 [not] in(元素1,元素2…);
其中[not]是可选项,加上not表示不在集合内满足条件
例如:查询tb_one表中name为小明和张三的记录
例如:使用not查询tb_one表中name不是小明和张三的记录
1.5 带关键字between…and的范围查询
关键字between…and可以判断某个字段的值是否在指定的范围内。如果字段的值在指定范围内,则满足查询条件,该记录将被查询出来;如果不在指定范围内,则不满足指定条件。
语法:select * from 数据表名 where 条件 [not] between 取值1 and 取值2;
其中[not]是可选项,跟关键字in里的用法一样;取值1和取值2分别代表范围的起始值和终止值。
例如:查询tb_one表中id在2~5之间的数据
1.6 带like的字符匹配查询
like属于较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:“%”和下划线“—”。
(1)“%”可以匹配一个或多个字符,可以代表任意长度的字符串。例如“a%b”表示以a开头b结尾的任意长度字符串。
(2)下划线“—“只匹配一个字符。
语法:select * from 数据表名 where 字段 like ‘条件’;
例如:查询tb_one中name包含哥字符的数据
1.7 用关键子is null查询空值
语法:select * from 数据表名 where 字段 is [not] null;
例如:查询tb_one表中name字段的值为空的记录
上图说明name字段的值都不为空。
1.8 带关键字and的多条件查询
关键字and可以用来联合多个条件进行查询。使用关键字and时,只有同时满足所有查询条件的记录会被查询出来。
语法:select * from 数据表名 where 条件1 and 条件2[and 条件3…];
例如:查询tb_one表中id>3且score<60的数据
1.9 带关键字or的多条件查询
关键字or也可以联合多条件进行查询,但与and关键字不同的是,关键字or只需要满足查询条件中的一个就行。
语法:select * from 数据表名 where 条件1 or 条件2[or 条件3…];
例如:查询tb_one表中score为100或90的数据
1.10 用关键字distinct去除结果中的重复行
使用distinct可以去除查询结果中的重复记录。
语法:select distinct 字段 from 数据表名;
1.11 用关键字order by对查询结果排序
使用关键字order by 可以对查询的结果进行升序(asc)和降序(desc),在默认情况下,order by按升序输出结果。
语法:select * from 数据表名 order by 字段 [asc|desc];
例如:对tb_one表中score字段按降序排列
1.12 用关键字limit限制查询结果的数量
查询数据时,可能会查询出很多数据,而用户需要记录的数据可能只是很少的一部分,这样就需要来限制查询结果的数量。关键字limit可以对查询结果的记录进行限定,控制它输出的行数。
例如:对tb_one表中score字段进行降序排列,显示前三行记录
2.聚合函数查询
聚合函数最大的特点是它们根据一组数据求出一个值。聚合函数的结果值只根据选定行中非null的值进行计算,null值被忽略。
2.1 count()函数
count()函数,对于除“*”以外的任何参数,返回选择集合中非null值的行的数目;对于参数星号,返回选择集合中所有行的数目,包含null值的行。
语法:select count(字段) from tb_one;
例如:统计tb_one表中的记录数
这里采用的参数是“*”,包含了null值的行。
2.2 sum()函数
sum()函数可以求出表中某个字段取值的总和。
语法:select sum(字段) from 数据表名;
例如:统计tb_one表中score字段的总和
2.3 avg()函数
avg()函数可以求出表中某个字段取值的平均值。
语法:select avg(字段) from 数据表名;
例如:求出tb_one表中score字段值的平均值
2.4 min()函数和max()函数
min()函数可以求出某个字段取值的最小值。
max()函数可以求出某个字段取值的最大值。
语法:select min(字段)|max(字段) from 数据表名;
3.连接查询
连接查询是关系数据库中最主要的查询,主要包括内连接,外连接等,通过连接运算符可以实现多个表查询。
3.1 内连接查询(inner join/join)
内连接查询是最普遍的连接类型,而且是最匀称的,因为它们要求构成连接的每一部分的每个表的匹配,不匹配的行将被排除。
例如:下面有两个表tb_book1和tb_book2,先查看各表的数据。
tb_book1:
tb_book2:
从上面的查询结果可以看出,两个表存在一个连接——id字段,它在两个表中是等同的,tb_book1表的id字段与tb_book2表的id字段相等,因此可以创建两个表的一个连接。查询语句如下:
select name1,user1,name2,user2 from tb_book1,tb_book2 where
tb_book1.id=tb_book2.id;
查询结果:
3.2 外连接查询
外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表),右表(右外连接时的表)或两边连接表(全外连接时的表)中的所有数据行。
语法:select 字段 from 数据表名1 left|right join 数据表名2 on 数据表名1.字段=数据表名2.属性名2;
外连接分为左外连接(left join),右外连接(right join)和全外连接(full join)三种。
(1)左外连接:是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应列中添加null值。
(2)右外连接:是指将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括右表中不符合条件的数据,并在左表的相应列中添加null值。
3.3 复合条件连接查询
在连接查询时,也可以增加其他的限制条件。
例如:下面使用内连接查询tb_book1和tb_book2,限制只显示1行记录。
3.4 交叉连接(cross join)
笛卡尔效应,即不加任何条件,达到M*N的结果集。
4.合并查询结果
合并查询结果是将多个select语句的查询结果合并到一起。合并查询结果使用关键字union和union all。
其中union是将所有的查询结果合并到一起,然后去除相同的记录;而union all则只是简单地把结果合并到一起。
4.1 union
例如:将tb_book1和tb_book2中的id字段用union关键字合并查询结果。两个表中的id都为1~5。
结果显示,合并后将所有结果合并到了一起,并去除了重复值。
4.2 union all
例如:查询tb_book1和tb_book2中的id字段,使用关键字union all合并,限制显示前7行。
结果显示,使用union all并不会去除重复值。
5.使用正则表达式查询
正则表达式是用某种模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配字符的查询能力更加强大,而且更加灵活。
语法:字段 regexp ‘匹配方式’
(1)字段:表示需要查询的字段名称。
(2)匹配方式:表示以哪种方式来进行匹配查询。
正则表达式的模式字符
5.1 匹配指定字符中的任意一个
例如:从tb_book1中的name1字段中查询包含”完美长生“四个字中任意一个字的记录。
5.2 匹配以指定字符开头和结束的记录
例如:在tb_book1中查找name1字段以‘深’开头‘岸’结尾,中间包含两个字符的记录。
6.case when语句
case when语句,用于计算条件列表并返回多个可能结果表达式之一。支持else参数。
例如:将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量
或者: