单表查询
Posted 232124jxp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单表查询相关的知识,希望对你有一定的参考价值。
简单查询
- SELECT语句
- 在SELECT语句中查询所有字段
在SELECT语句中列出所有字段名来查询表中的数据,其语法格式:
SELECT 字段名1,字段名2,…FROM 表名;
/*字段名表示查询的字段名,这里需要列出表中所有的字段名*/
从查询结果可以看出,SELECT语句成功地查出了表中所有字段的数据。
需要注意的是,在SELECT语句的查询字段列表中,字段的顺序是可以改变的,无需按照其表中定义的顺序进行排列。执行结果如下:
2.在SELECT语句中使用星号("*")通配符代替所有字段
语法格式:SELECT*FROM 表名;
/*注意的是,一般情况下,除非需要使用表中所有字段的数据,否则最好不要使用星号通配符,使用通配符虽然可以节省输入查询语句的时间,但由于获取的数据过多会降低查询的效率*/
3.查询指定字段
基本格式:SELECT字段名1,字段名2,…FROM表名;
/*字段名表示表中的字段名称,这里只需指定表中部分的字段名称*/,执行结果如下:
如果在SELECT语句中改变查询字段的顺序,查询结果中字段显示的顺序也会做相应改变。
?
按条件查询
1.关系运算符查询
语法格式:SELECT 字段名1,字段名2,…FROM 表名WHERE条件表达式;执行结果如下:
2.带IN关键字查询
IN关键字用于判断某个字段的值是否在指定集合中,如果字段的值在集合中,则满足条件,该字段所在的记录将被查询出来。
语法格式:SELECT*|字段名1,字段名2,…FROM 表名WHERE字段名[NOT]IN(元素1,元素2,…);
/*元素表示集合中的元素,即指定的条件范围,NOT是可选参数,使用NOT表示查询不在IN关键字指定集合范围中的记录*/,执行结果如下:
3.带BETWEEN AND关键字的查询
BETWEEN AND用于判断某个字段的值是否在指定的范围之内,如果字段的值在指定范围内,则满足条件,该字段所在的记录将被查询出来,反之则不会被查询出来。
语法格式如下所示:SELECT*|字段名1,字段名2,…FROM 表名WHERE字段名 [NOT] BETWEEN值1 AND 值2;
/*值1表示范围条件的起始值,值2表示范围条件的结束值。NOT是可选参数,使用NOT表示查询指定范围之外的记录,通常情况下"值1"小于"值2",否则查询不到任何结果*/
执行结果如下:
4.空值查询
在数据表中,某些列的值可能为空值(NULL),空值不同于0,也不同于空字符串。在mysql中,使用IS NULL关键字来判断字段的值是否为空值。
语法格式:SELECT*|字段名1,字段名2,… FROM 表名 WHERE 字段名 IS [NOT] NULL;
/*NOT是可选参数,使用NOT关键字用于判断字段不是空值*/,执行结果如下:
5.带DISTINCT关键字查询
在SELECT语句中,可以使用DISTINCT关键字来去掉查询记录中重复的值。
语法格式:SELECT DISTINCT 字段名 FROM 表名;
6.DISTINCT关键字作用多个字段
语法格式:SELECT DISTINCT 字段名1,字段名2,… FROM 表名;
/*只有DISTINCT关键字后指定的多个字段值都相同,才会被认作是重复记录*/执行结果如下:
从查询结果看出,仍出现重复的值,只有两个字段的值都相同才被认为是重复记录。所以向表中添加一条新记录,并用SELECT语句查询所有记录,结果如下:
接下来再次查询gender和name字段,并使用distinct作用这两个字段,执行结果如下所示:
从查询结果看出,DISTINCT去除了重复的记录。
7.带LIKE关键字的查询
MySQL中提供了LIKE关键字,用于对字符串进行模糊查询。
语法格式:SELECT *|字段名1,字段名2,… FROM 表名WHERE 字段名[NOT] LIKE "匹配字符串";/* NOT是可选参数,使用NOT表示查询与指定字符串不匹配的记录。匹配字符串指定用来匹配的字符串*/
通配符
(1)百分号(%)通配符
可以匹配任意长度的字符串,包括空字符串。执行结果如下:
?
在通配字符串中可以出现多个百分号通配符。
LIKE之前可以使用NOT关键字,用来查询与指定通配字符串不匹配的记录。执行结果如下:
(2)下划线(_)通配符
可以匹配任意长度的字符串,包括空字符串。执行结果如下:
从查询结果可以看到,在通配字符串中使用了4个下划线通配符。
8.使用百分号和下划线通配符进行查询操作
如果要匹配字符串中的百分号和下划线,就需要在通配字符串中使用右斜线("")对百分号和下划线进行转义,例如:\\%匹配百分号字面值,\\_匹配下划线字面值。
在查询之前,首先向表中添加一条记录,执行结果如下:
从查询结果可以看到,查出了name字段值为"sum%er"的新记录。
9.带AND关键字的多条件查询
使用AND关键字可以连接两个或者多个查询条件,只有满足所有条件的记录才会被返回。在WHERE关键字后面跟了多个条件表达式,每两个条件表达式之间用AND关键字分隔。
语法格式如下所示:
SELECT *|字段名1,字段名2,…FROM 表名WHERE 条件表达式1 AND 条件表达式2 […AND 条件表达式n];执行结果如下:
10.带OR关键字的多条件查询
在使用SELECT语句查询数据时,也可以使用OR关键字连接多个查询条件,只要记录满足任意一个条件就会被查询出来。
语法格式:SELECT *|字段名1,字段名2,…FROM 表名 WHERE 条件表达式1 OR 条件表达式2[…OR 条件表达式n];执行结果如下:
只要记录满足OR关键字连接的任意一个条件就会被查询出来,执行结果如下:
11.OR和AND关键字一起使用的情况
AND的优先级高于OR,因此当两者在一起使用时,应该先运算AND两边的条件表达式,再运算OR两边的条件表达式,执行结果如下:
?
高级查询
一、聚合函数
1.COUNT()函数
用来统计记录的条数,语法格式:SELECT COUNT(*) FROM 表名;
- SUM()函数
SUM()是求和函数,用于求出表中某个字段所有值的总和,语法格式:SELECT SUM(字段名) FROM 表名;
- AVG()函数
AVG()函数用于求出某个字段所有值的平均值,语法格式如下所示:
SELECT AVG(字段名) FROM student;执行结果如下:
- MAX()函数
MAX()函数是求最大值的函数,用于求出某个字段的最大值,执行结果如下所示:
5、MIN()函数
MIN()函数是求最小值的函数,用于求出某个字段的最小值,执行结果如下所示:
二、对查询结果排序
语法格式:SELECT字段名1,字段名2,…FROM 表名ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC]…/*ASC表示按照升序进行排序,DESC表示按照降序进行排序*/
从查询结果可以看到,返回的记录按照ORDER BY指定的字段grade进行排序,并且默认是按升序排列
从查询结果可以看到,在ORDER BY中使用了DESC关键字,返回的记录按照grade字段的降序进行排列。
三、分组查询
语法格式:SELECT 字段名1,字段名2,…FROM 表名 GROUP BY 字段名1,字段名2,…[HAVING 条件表达式];
/* HAVING关键字指定条件表达式对分组后的内容进行过滤,注意的是,GROUP BY一般和聚合函数一起使用*/
1.单独使用GROUP BY分组
单独使用group by关键字,查询的是每个分组中的一条记录。执行结果如下:
2、GROUP BY和聚合函数一起使用
3、GROUP BY和HAVING关键字一起使用
HAVING关键字和WHERE关键字的作用相同,都用于设置条件表达式对查询结果进行过滤。
HAVING关键字后可以跟聚合函数,而WHERE关键字不能。通常情况下HAVING关键字都和GROUP BY一起使用,用于对分组后的结果进行过滤。
四、使用LIMIT限制查询结果的数量
语法格式:SELECT 字段名1,字段名2,…FROM 表名LIMIT [OFFSET,],执行结果如下:
五、函数(列表)
执行结果如下:
从查询结果看,将将各个字段值使用下划线"_"连接起来。
从查询来看,如果gender字段的值为"男"则返回1,如果不为"男"则返回0。
为表和字段取别名
为表取别名
在查询操作时,如果表名很长使用起来就不太方便,这时可以为表取一个别名,用这个别名来代替表的名称。语法格式:SELECT * FROM 表名 [AS] 别名;/* AS关键字用于指定表名的别名,它可以省略不写*/执行结果如下:
MySQL中为字段起别名的格式如下所示:SELECT 字段名 [AS] 别名[,字段名 [AS] 别名,……] FROM 表名;执行结果如下:
以上是关于单表查询的主要内容,如果未能解决你的问题,请参考以下文章