单表查询Ⅱ
单表查询Ⅱ
先把该铺垫的铺垫好
建表--插入数据--查询数据
接上一篇~~~~
4、在SELECT语句中,最常见的是使用WHERE子句指定查询条件对数据进行过滤
格式:SELECT 字段名1,...,字段名n FROM 表名 WHERE 条件表达式;
常见的关系运算符:
①查询表中id为4的学生姓名
②查看表中成绩大于90的数据
5、带IN关键字的查询
IN关键字用于判断某个字段的值是否在指定集合中
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名[NOT] IN(字段名1,...,字段名n)
如上两图所示,很容易看出两者间的区别
译1:id为1、2、3的记录
译2:id不为1、2、3的记录
注意:在上面的语法格式中,“元素1、元素2…”表示集合中的元素,即指定的条件范围。NOT是可选参数,使用NOT表示查询不在IN关 键字指定集合范围中的记录。
6、带BETWEEN AND关键字的查询
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名[NOT] BETWEEN 值1 ADD 值2
注意:“值1”表示范围条件的起始值,“值2”表示范围条件的结束值
通常情况下“值1”小于“值2”,否则查询不到任何结果。
如上两图所示,很容易看出两者间的区别
译1:id为2-5之间的记录
译2:id不为2-5之间的记录
7、空值查询
使用IS NULL关键字来判断字段的值是否为空值
格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE
字段名 IS [NOT] NULL
如上两图所示,很容易看出两者间的区别
译1:gender为空的记录
译2:gender不为空的记录
8、带DISTINCT关键字的查询
使用DISTINCT关键字来去掉查询记录中重复的值。
① 格式:SELECT DISTINCT 字段名 FROM 表名;
从查询记录可以看到,这次查询只返回了3条记录的gender值,分别为“男”、“女”和“NULL”,不再有重复值。
②DISTINCT关键字作用多个字段
格式:SELECT DISTINCT 字段名1,字段名2,……FROM 表名;
注意:只有多个字段的值都相同才会被认为是重复的
(查询表中的gender和name字段)
附:为了下面的操作,重新在表中增加了值
9、带LIKE关键字的查询
LIKE关键字用于对字符串进行模糊查询
SELECT *或字段名1,字段名2,……
FROM 表名WHERE 字段名【NOT】LIKE “匹配字符串”
“匹配字符串”指定用来匹配的字符串,其值可以是一个普通字符串,也可以是包含%和_的通配字符串。
①使用百分号通配符查询
百分号通配符:一个百分号可以匹配任意多的字符,包括空字符
A、格式:SELECT id,name FROM student WHERE name LIKE "s%";
翻译:查找表中name字段值以字符“s”开头的学生id;
B、格式:SELECT id,name FROM student_td WHERE name LIKE "w%g";
翻译:查询表中name字段值以字符“w”开始,以字符“g”结束的学生id
C、格式:SELECT id,name FROM student_td WHERE name LIKE "%y%";
翻译:查询表中name字段值包含字符“y”的学生id
D、LIKE之前可以使用NOT关键字,用来查询与指定通配字符串不匹配的记录。
格式:SELECT id,name FROM student_td WHERE name NOT LIKE "%y%";
翻译:查询表中name字段值不包含字符“y”的学生id
②下划线通配符:一个下划线匹配一个字符,包括空字符
一个”—”可以匹配一个字符,包括空字符串
多个”—”可以匹配任意多的字符,包括空字符串
翻译:查询student表中name字段值以字符串“wu”开始,以字符串“ong”结束,并且两个字符串之间只有一个字符的记录
翻译:查询表中name字段值包含7个字符,并且以字符串“ing”结束的记录
注意:(图中现象)
因为在-ing前有四个字母,所以在通配字符串中要使用了4个下划线通配符,它匹配name字段值中“ing”前面的4个字符,如果不匹配,就是空值。
③使用百分号和下划线通配符进行查询操作
注意:百分号和下划线是通配符,它们在通配字符串中有特殊含义,因此,如果要匹配字符串中的百分号和下划线,就需要在通配字 符串中使用右斜线(“\”)对百分号和下划线进行转义
在查询之前先添加一条记录
从上面的执行语句中可以看到,添加的新记录其name字段值为“sun%er”,包含一个百分号字面值
翻译:查询结果可以看到,查出了name字段值为“sun%er”的新记录
10、带AND关键字的多条件查询
使用AND关键字可以连接两个或者多个查询条件,只有满足所有条件的记录才会被返回
格式:SELECT *|{字段名1,字段名2,……}
FROM 表名
WHERE 条件表达式1 AND 条件表达式2 […… AND 条件表达式n];
注:在WHERE关键字后面跟了多个条件表达式,每两个条件表达式之间用AND关键字分隔。
①查询一个
翻译:查询表中id字段值小于5,并且gender字段值为“女”的学生姓名
②查询多个
用两个AND关键字连接了三个条件表达式
翻译:查询表中id字段值在7、8、9、10之中,name字段值以字符串“ng”结束,并且grade字段值小于80的记录
11、带OR关键字的多条件查询
在使用SELECT语句查询数据时,也可以使用OR关键字连接多个查询条件,只要记
录满足任意一个条件就会被查询出来。
格式:SELECT *|{字段名1,字段名2,……}
FROM 表名
WHERE 条件表达式1 OR 条件表达式2 […… OR条件表达式n];
①查询一个
翻译:查询表中id字段值小于3或者gender字段值为“女”的学生姓名
②查询多个
翻译:查询表中满足条件name字段值以字符“h”开始,或者gender字段值为“女”,或者grade字段值为100的记录
12、OR和AND关键字一起使用的情况
注意:AND的优先级高于OR,因此当两者在一起使用时,应该先运算AND两边的条件表达式,再运算OR两边的条件表达式。
翻译:查询表中gender字段值为“女”或者gender字段值为“男”,并且grade字段值为100的学生姓名
------------------------------------------------------------------------------------------------------------------
高级查询
13、聚合函数
注意:表中的函数用于对一组值进行统计,并返回唯一值,这些函数被称为聚合函数。
①COUNT()函数
COUNT()函数用来统计记录的条数
格式:SELECT COUNT(*) FROM 表名;
翻译:查询表中一共有多少条记录,从查询结果可以看出,表中一共有16条记录
②SUM()函数
SUM()是求和函数,用于求出表中某个字段所有值的总和
格式:SELECT SUM(字段名) FROM 表名;
翻译:求出表中grade字段的总和,所有学生grade字段的总和为1273
③AVG()函数
AVG()函数用于求出某个字段所有值的平均值
格式:SELECT AVG(字段名) FROM 表名;
翻译:求出表中grade字段的平均值,所有学生grade字段的平均值为79.5625
④MAX()函数
MAX()函数是求最大值的函数,用于求出某个字段的最大值
格式:SELECT MAX(字段名) FROM 表名;
翻译:求出表中所有学生grade字段的最大值,所有学生grade字段的最大值为100。
⑤MIN()函数
MIN()函数是求最小值的函数,用于求出某个字段的最小值
格式:SELECT MIN(字段名) FROM 表名;
翻译:求出表中grade字段的最小值,所有学生grade字段的最小值为40。
14、对查询结果排序
①为了使查询结果满足用户的要求,可以使用ORDER BY对查询结果进行排序。
格式:SELECT 字段名1,字段名2,……
FROM 表名
ORDER BY 字段名1 [ASC | DESC],字段名2 [ASC | DESC]……
注意:参数ASC表示按照升序进行排序,DESC表示按照降序进行排序。默认情况下,按照ASC方式进行排序。
翻译:查出表中的所有记录,并按照grade字段进行排序,从查询结果可以看到,返回的记录按照ORDER BY指定的字段grade进行排序,并且默认是按升序排列。
②利用ASC升序排序
翻译:查出表中的所有记录,使用参数ASC按照grade字段升序方式排列
从查询结果可以看到,在ORDER BY中使用了ASC关键字,返回结果和①查询的结果一致。
③使用DESC降序排序
翻译:查出表中的所有记录,使用参数DESC按照grade字段降序方式排列
从查询结果可以看到,在ORDER BY中使用了DESC关键字,返回的记录按照grade字段的降序进行排列。
④一个字段升序一个字段降序
翻译:查询表中的所有记录,按照gender字段的升序和grade字段的降序进行排列
15、分组查询
可以使用GROUP BY按某个字段或者多个字段中的值进行分组,字段中值相同的为一组。
格式:SELECT 字段1,字段2 ...
FROM 表名
GROUP BY 字段1,字段2 ...[HAVING 条件表达式];
指定的字段名1、字段名2等是对查询结果分组的依据。HAVING关键字指定条件表达式对分组后的内容进行过滤。需要特别注意的是,GROUP BY一般和聚合函数一起使用,如果查询的字段出现在GROUP BY后,却没有没有包含在聚合函数中,该字段显示的是分组后的第一条记录的值,这样有可能会导致查询结果不符合我们的预期。
HAVING是用来对分组后的数据再次进行筛选
①单独使用GROUP BY分组
单独使用group by关键字,查询的是每个分组中的一条记录。
翻译:查询表中的记录,按照gender字段值进行分组
②GROUP BY和聚合函数一起使用
GROUP BY和聚合函数一起使用,可以统计出某个或者某些字段在一个分组中的最大值、最小值、平均值等等。
翻译:将表按照gender字段值进行分组查询,计算出每个分组中各有多少名学生
③GROUP BY和HAVING关键字一起使用
HAVING关键字和WHERE关键字的作用相同,都用于设置条件表达式对查询结果进行过滤。
HAVING关键字和WHERE关键字的区别在于,HAVING关键字后可以跟聚合函数,而WHERE关键字不能。通常情况下HAVING关键字都和GROUP BY一起使用,用于对分组后的结果进行过滤。
翻译:将表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组
16、使用LIMIT限制查询结果的数量
关键字LIMIT可以指定查询结果从哪一条记录开始以及一共查询多少条信息。
格式:SELECT 字段名1,字段名2,……
FROM 表名
LIMIT [OFFSET,] 记录数
①无偏移量
翻译:查询表中的前4条记录
注意:从查询结果可以看到,执行语句中没有指定返回记录的偏移量,只指定了查询记录的条数4,因此返回结果从第一条记录开始,一共返回4条记录。
②存在偏移量
翻译:查询student表中grade字段值从第5位到第8位的学生(从高到低)
17、函数(列表)
①CONCAT(s1,s2,……)
翻译:查询表中的所有记录,将各个字段值使用下划线“_”连接起来
②IF(expr,v1,v2)
翻译:查询表中的id和gender字段值,如果gender字段的值为“男”则返回1,如果不为“男”则返回0
18、为表取别名
①格式:SELECT * FROM 表名 [AS] 别名;
注意:AS关键字用于指定表名的别名,它可以省略不写
翻译:为表起一个别名s,并查询student表中gender字段值为“女”的记录
②格式:SELECT 字段名 [AS] 别名[,字段名 [AS] 别名,……] FROM 表名;
翻译:查询表中的所有记录的name和gender字段值,并为这两个字段其别名stu_name和stu_gender