数据库之表单数据记录查询

目录

一、基本查询方式

二、简单数据记录查询

1.查询所有字段

2.查询指定字段

3.查询指定记录

4.多条件查询

5.查询空值

6.查询结果不重复

7.范围查询

8.字符匹配查询

9.排序查询

10.限制查询结果的数量

三、聚合函数和分组数据记录查询

1.使用聚合函数查询

2.分组查询


一、基本查询方式

在MySQL中查询数据的基本语句是SELECT语句,其基本语句格式如下:

SELECT

        {*|<字段列表>}

        [

                FROM<表1>,<表2>...

                [WHERE<表达式>]

                [GROUP BY<group by definition>]

                [HAVING<expression>[{<operator><expression>}...]]

                [ORDER BY<order by definition>]

                [LIMIT[<offset>,]<row count>]

        ];

上述各条子句的含义如下:

{*|<字段列表>}:使用星号通配符或者字段列表表示要查询的字段,其中字段列表至少要包含一个字段名称,如果要查询多个字段,字段之间用逗号隔开,最后一个字段后不加逗号。

FROM<表1>,<表2>...:表1和表2表示查询数据的来源,可以是单个或者多个。

[WHERE<表达式>]:可选,用于限定查询行必须满足的查询条件。

GROUP BY<group by definition>:该子句表示按照指定的字段对查询出来的数据进行分组。

ORDER BY<order by definition>:该子句表示按照什么样的顺序显示查询出来的数据,有两种情况:升序(ASC)和降序(DESC)。

LIMIT[<offset>,]<row count>:表示每次显示的查询出来的数据条数。


二、简单数据记录查询

1.查询所有字段

查询所有字段数据,是指从一张表中检索出所有记录,查询方式有两种,一种是使用通配符“*”,另一种是列出所有字段名。

语法形式如下:

SELECT {*|col_list} FROM table_name;

上述语句中,col_list表示数据表中的字段列表,如果表中字段有多个,字段之间需要使用逗号隔开,最后一个字段不加逗号。

语句中的通配符“*”或“col_list”指明了需要查询的是数据表中的所有字段,而表明指明了查询位置。


2.查询指定字段

语法形式如下:

SELECT col_name1[,col_name2,......,col_namen] FROM table_name;

上述语句可以查询单个字段,也可以查询多个字段。当查询多个字段时,各个字段之间使用英文格式的逗号隔开,最后一个字段不加逗号;查询一个字段时也不需要加逗号。


3.查询指定记录

当用户需要查询数据库中符合一定条件的数据时,可以使用WHERE子句对表中的记录进行筛选。

语法形式如下:

SELECT {*|col_list} FROM table_name WHERE condition;

WHERE子句中可以使用多种条件判断符:

条件判断符

说明

=

相等

<

小于

>

大于

<>(!=)

不相等

<=

小于或者等于

>=

大于或者等于


4.多条件查询

1.使用AND关键字查询

如果多条件查询的条件之间使用AND关键字连接,那么只有符合所有条件的记录才会被返回。

2.使用OR关键字查询

如果多条件查询的条件之间使用OR关键字连接,表示只需要符合所有条件中的一个条件,此记录就会被返回。

3.使用IN关键字查询

使用IN关键字可以查询字段值等于指定集合中任意一个值得记录。

语法形式如下:

SELECT {*|col_list} FROM table_name

WHERE col_name IN(value1,value2,......,valuen);

上述语句中,指定集合包含在括号中,值之间使用逗号隔开。

注:AND关键字可以使用符号“&&”代替;OR关键字可以使用符号“||”代替。

OR关键字和IN关键字可以实现相同的功能,但IN关键字可以使用查询语句更加简洁,并且IN关键字的执行速度比OR关键字快。

IN关键字还可以与NOT关键字配合使用,作用是查询字段值不在指定集合中的记录。


5.查询空值

MySQL提供使用IS NULL关键字,用于查询字段值为NULL的记录。

语法形式如下:

SELECT {*|col_list} FROM table_name WHERE col_name IS NULL;

IS NULL也可以和NOT关键字配合使用,用于查询字段值不为NULL的记录。

语法形式如下:

SELECT {*|col_list} FROM table_name WHERE col_name IS NOT NULL;

注意:如果某些字段值为NULL,在将这些字段与其他值进行比较时,就会返回不准确的数据。在MySQL中,值为NULL就表示该字段还没有进行任何的赋值操作,它的值是未知的,所以无法与其他类型的值进行比较。


6.查询结果不重复

MySQL提供了DISTINCT关键字,使查询结果不重复。

其语法形式如下:

SELECT DISTINCT col_list FROM table_name;


7.范围查询

MySQL提供BETWEEN AND 关键字,用于查询某个字段值在某个范围内的记录。

语法形式为:

SELECT {*|col_list} FROM table_name

WHERE col_namea BETWEEN value1 AND value2;

上述语句中,col_namea为要限定值范围的字段,value1为开始值,value2为结束值。

BETWEEN AND关键字可以配合NOT关键字,用于查询字段值不在某个范围内的记录。

语法形式为:

SELECT {*|col_list} FROM table_name

WHERE col_namea NOT BETWEEN value1 AND value2;

注:使用BETWEEN AND关键字进行查询,查询结果包括范围内的所有值,也包括开始值和结束值。使用BETWEEN AND关键字和NOT关键字进行查询,查询结果不包括开始值和结束值。


8.字符匹配查询

使用LIKE关键字的查询又称为模糊查询,通常用于查询字段值包含某些字符的记录。

语法形式如下:

SELECT {*|col_list} FROM table_name

WHERE col_namea LIKE valueb;

上述语句中,valueb表示要匹配的字符。LIKE关键字一般与通配符“%”或者“_”配合使用,如果字段col_namea中的值包括valueb,此条记录就会被返回。通配符可以放在字符前,也可以放在字符后,还可以同时放在字符前后。


1.通配符“%”

通配符“%”可以匹配任意长度的字符,可以是0个,也可以是1个或多个。

以”valuea”开头的记录:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE ‘valuea%’;

以”valuea”结尾的记录:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE ‘%valuea’;

包含”valuea”的记录:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE ‘%valuea%’;

以”valuea”开头,以”valueb”结尾的记录:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE ‘valuea%valueb’;


2.通配符“_”

通配符“_”的使用方法与通配符“%”类似,都可以出现在匹配字符的任意位置,但通配符“_”只能匹配一个字符。

也就是说要查询valuea后有两个字符的记录,使用的SQL语句为:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE ‘valuea__’;


9.排序查询

使用前面的方法查询到的结果是按照记录在表中的默认顺序进行排列的。如果需要将查询结果按照指定的顺序排列,可以使用ORDER BY关键字。

语法形式如下:

SELECT {*|col_list} FROM table_name

ORDER BY col_namea [ASC|DESC];

上述语句的意义是,按照字段col_namea对查询记录进行排序,col_namea可以为一个或多个字段,当有多个字段时,各字段之间使用英文逗号隔开。字段后的参数ASC代表按照升序进行排序,DESC代表按照降序进行排序,如果没有ASC或者DESC,默认按照升序排序。


1.单字段排序

在排序之前最好将有空值的记录补充完整,否则,空记录将会被排在最前面。

2.多字段排序

在使用多个字段作为排序条件对查询结果进行排序中,会先使用第一个条件进行排序,当出现相等的情况时,会按照第二个条件进行排序,以此类推。

3.降序排序

如果需要对查询结果进行降序排序,可以使用DESC关键字。

如果需要按照多个字段进行降序排序,必须在每个字段后加上DESC关键字。


10.限制查询结果的数量

实际应用中,数据库中的数据量通常是很大的,一般不会一次性将所有数据查询出来,此时就需要使用LIMIT关键字来限制查询结果的数量。

语法形式如下:

SELECT {*|col_list} FROM table_name

LIMIT [offset_start,]row_count;

上述语句中,“offset_start”表示起始位置,用于指定查询从哪一行开始,如果不指定,默认为0,从表的第一行记录开始查询;row_count表示查询出来的记录条数。


三、聚合函数和分组数据记录查询

在数据库中,通常需要进行一些数据汇总操作,此时就用到了聚合函数。MySQL所支持的聚合函数一共有以下5种:

COUNT()函数:计算表中记录的条数。

SUM()函数:计算字段值的总和。

AVG()函数:计算字段值的平均值。

MAX()函数:查询表中字段值的最大值。

MIN()函数:查询表中字段值的最小值。

实际应用中,聚合函数通常与分组查询一起使用。分组查询就是按照某个字段对数据记录进行分组。


1.使用聚合函数查询

使用聚合函数查询的基本语法形式如下:

SELECT function(*|col_num) FROM table_name WHERE CONDITION

1.COUNT()函数

COUNT()函数用于统计数据记录条数,用于返回表中记录的条数,或者符合特定条件的记录条数。其使用方法有以下两种:

COUNT(*):计算表中总的记录数,不管表字段是否包含NULL值。

COUNT(col_name):计算表中指定字段的记录数,在具体统计时将忽略NULL值。

例:

SELECT COUNT(*) AS goods_num FROM goods;

注:上述语句中使用AS关键字为字段取别名为goods_num,使得查询结果简单明了,AS关键字可省略。使用AS关键字不仅可以为字段取别名,还可以为表取别名,其使用非常灵活。


2.SUM()函数

SUM()函数是一个求总和的函数,用于返回指定字段值的总和,或符合特定条件的指定字段值总和,在具体计算时将忽略NULL值。

其使用方法如下:

SUM(col_name)


3.AVG()函数

AVG()函数通过计算返回的行数和每一行数据的和,得到指定列数据的平均值,在具体计算时将忽略NULL值。AVG()函数与GROUP BY一起使用,可以计算每个分组的平均值。

其实用方式如下:

AVG(col_name)


4.MAX()函数和MIN()函数

MAX()函数和MIN()函数是用于求最大值和最小值的函数,可返回指定字段中的最大值和最小值,或者符合特定条件的指定字段值中的最大值和最小值。

其使用方法如下:

MAX(col_name):该方式可以实现计算指定字段值中的最大值,在具体计算时将忽略NULL值。

MIN(col_name):该方式可以实现计算指定字段值中的最小值,在具体计算时将忽略NULL值。


2.分组查询

分组查询是将查询结果按照某个或多个字段进行分组,MySQL使用GROUP BY语句对数据进行分组。它的工作原理就是按照一定的规则将一个数据集合划分成若干个小的区域,然后针对这些区域的数据进行处理。

语法形式如下:

SELECT {*|col_list} aggregate_func FROM table_name

GROUP BY col_namea [HAVING condition];

上述语句中,aggregate_func表示聚合函数,GROUP BY关键字通常与聚合函数一起使用;col_namea表示按照字段col_namea对数据进行分组。


1.简单分组查询

将GROUP BY关键字与聚合函数COUNT()一起使用,可以查询每组的数量。

如果需要将每种类型中包含的商品名称显示出来,可以使用group_concat()函数。


2.使用HAVING过滤分组后数据

GROUP BY和HAVING一起使用,可以指定显示记录所需满足的条件,只有满足条件的分组才会被显示。

WHERE子句和HAVING子句都具有按照条件筛选数据的功能,两者的区别主要有以下几点:

WHERE子句在进行分组操作之前用来选择记录,而HAVING子句在进行分组操作之后通过过滤来选择分组。

HAVING子句中的每个字段必须被包含在SELECT关键字后的字段列表中。

HAVING子句可以包含聚合函数,但WHERE子句不能。


3.使用多个字段进行分组

使用GROUP BY不止可以按照一个字段进行分组,还可以按多个字段进行分组。分组层次从左到右,即先按第1个字段进行分组,然后对第1个字段值相同的记录,再根据第2个字段进行分组,依此类推。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳阳大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值