单表查询Ⅱ

单表查询

先把该铺垫的铺垫好

建表--插入数据--查询数据

接上一篇~~~~

4、在SELECT语句中,最常见的是使用WHERE子句指定查询条件对数据进行过滤

     格式:SELECT 字段名1,...,字段名n FROM 表名 WHERE 条件表达式;

常见的关系运算符

①查询表中id4的学生姓名

 

 ②查看表中成绩大于90的数据

 

 5、带IN关键字的查询

  IN关键字用于判断某个字段的值是否在指定集合中

  格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

       字段名[NOT] IN(字段名1,...,字段名n)

                             如上两图所示,很容易看出两者间的区别

                    译1id123的记录

                    译2id不为123的记录

注意:在上面的语法格式中,“元素1、元素2…”表示集合中的元素,即指定的条件范围。NOT是可选参数,使用NOT表示查询不在IN关       键字指定集合范围中的记录。

6、带BETWEEN  AND关键字的查询

   格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

        字段名[NOT] BETWEEN 值1 ADD 值2

   注意:“值1”表示范围条件的起始值,“值2”表示范围条件的结束值

            通常情况下“值1”小于“值2”,否则查询不到任何结果。

 

                                    如上两图所示,很容易看出两者间的区别

                             译1id2-5之间的记录

                             译2id不为2-5之间的记录

7、空值查询

使用IS NULL关键字来判断字段的值是否为空值

  格式:SELECT *|字段名1,...,字段名n FROM 表名 WHERE

       字段名 IS [NOT] NULL

 

                        如上两图所示,很容易看出两者间的区别

                      译1gender为空的记录

                      译2gender不为空的记录

8、DISTINCT关键字的查询

   使用DISTINCT关键字来去掉查询记录中重复的值。

 ①  格式:SELECT DISTINCT 字段名 FROM 表名;

 

从查询记录可以看到,这次查询只返回了3条记录的gender值,分别为“NULL”,不再有重复值。

②DISTINCT关键字作用多个字段

格式:SELECT DISTINCT 字段名1,字段名2……FROM 表名;

注意:只有多个字段的值都相同才会被认为是重复的

      (查询表中的gendername字段)

 

附:为了下面的操作,重新在表中增加了值

9、带LIKE关键字的查询

LIKE关键字用于对字符串进行模糊查询

SELECT *或字段名1,字段名2……

FROM 表名WHERE 字段名【NOTLIKE “匹配字符串

匹配字符串指定用来匹配的字符串,其值可以是一个普通字符串,也可以是包含%_的通配字符串。

使用百分号通配符查询

百分号通配符:一个百分号可以匹配任意多的字符,包括空字符

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字段值在78910之中,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 BYHAVING关键字一起使用

 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)

 

翻译:查询表中的idgender字段值,如果gender字段的值为“男”则返回1,如果不为“男”则返回0

18、为表取别名

格式:SELECT * FROM 表名 [AS] 别名;

注意:AS关键字用于指定表名的别名,它可以省略不写

 

 翻译:为表起一个别名s,并查询student表中gender字段值为“女”的记录

格式:SELECT 字段名 [AS] 别名[,字段名 [AS] 别名,……] FROM 表名;

 

翻译:查询表中的所有记录的namegender字段值,并为这两个字段其别名stu_namestu_gender

猜你喜欢

转载自www.cnblogs.com/CcCyRrR/p/11935268.html
今日推荐