MySQL查询操作的关键指令

2个月前发布 gsjqwyl
10 0 0

MySQL查询核心指令

学习资料出处:数据库原理与应用——MySQL从入门到实战

单表查询(一)

基本查询语句

查询数据表中指定字段的内容

MySQL从数据表中获取数据的基本语句是SELECT语句。

SELECT语句包含较多可选参数,我们从最基础的开始,逐步深入探究SELECT语句的运用。

SELECT语句的基本语法格式为: SELECT 列名 FROM 表名;

示例说明 假设我们现在有一张名为Mall_products的表,其内容如下:

image-20250524003637748

若要查询该表中所有商品的名称,应如何书写查询代码呢?

查询代码如下:

SELECT prod_name FROM Mall_products;

结果展示:

1

查询过程图示:

2

分析:在该示例中,我们运用SELECT语句从Mall_products表中获取prod_name字段下的所有产品名称,字段名称需紧跟在SELECT关键字之后。

实际上,我们查询数据时,常常需要同时获取多个字段的内容。此时,只需在字段之间添加逗号,即可。

语法格式为: SELECT 列名1, 列名2 FROM 表名;

示例说明 依旧以表Mall_products为例,若要查询该表中所有商品的名称和价格,查询代码应如何编写?

查询代码如下:

SELECT prod_name, prod_price
FROM Mall_products;

结果展示:

1

小提示:MySQL中SQL语句对关键字的大小写不敏感,SELECT和select效果相同。不过许多开发者倾向于将关键字大写,表名和字段名使用小写,养成这样的习惯,日后编写的脚本更便于阅读和维护。

查询数据表中的所有内容

若忘记字段名称,还可查看整张表的内容。此时,只需用星号*替代字段名称,便可获取整张表的内容。

语法格式为: SELECT * FROM 表名;

示例说明 假设我们现在有一张表Mall_products,起初不清楚表内有哪些内容,想要查看整张数据表的内容,查询代码该怎么写?

查询代码如下:

SELECT * FROM Mall_products;

结果展示:

1

小提示:虽然使用星号*看似便捷,但建议在无需获取整张表内容时,还是使用字段名进行查询,因为这会降低查询效率。

IN关键字的查询

IN关键字用在WHERE子句之后,用于筛选出需要查询的内容。形象地说,IN关键字的使用就如同点名,点到的内容会被筛选出来。

1

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 IN (n1,n2,n3,...); 。其中,括号内的数字需为INT格式。被“点到名”的这些数字对应的内容会被筛选出来展示。

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

我们将使用IN关键字检索出所有国家代码为18739的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country IN (1,87,39);

结果展示:

img

查询过程图示:

img

哦豁!刚才输入了三个数字,为何只查询到国家代码为139的数据呢,87去哪了?因为国家代号87的内容根本不存在于表Mall_products中,仔细查看表就会发现。

NOT IN关键字的查询

聪明的小伙伴看到NOT就知道是取反。刚才是查询括号中出现的内容,加上NOT取反后,意味着查询除了括号中出现内容之外的所有内容。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 NOT IN (n1,n2,n3,...);

示例说明 仍使用刚才的表Mall_products,现在想要查询除了国家代码为86的所有国家的产品内容,查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country NOT IN (86);

结果展示:

img

BETWEEN AND关键字的查询

我们已经学会用IN关键字精确查询数据表内容,但很多时候仅想知晓某一范围内符合条件的数据数量,这就需要用到关键字BETWEEN AND

BETWEEN AND需要两个参数支持,一个是范围的起始值,另一个是结束值。若字段值满足指定范围的查询条件,就返回这些符合条件的数据内容。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 BETWEEN n1 AND n2;

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

我们将使用BETWEEN AND关键字检索出所有国家代码为1~50的商品的信息。

查询代码如下:

SELECT *
FROM Mall_product
WHERE prod_country BETWEEN 1 AND 50;

结果展示:

img

查询过程图示:

img

可以看到,返回结果包含了国家代码从1~50之间的字段值。尤其需要注意的是,端点值1也包含在返回结果中。

NOT BETWEEN AND关键字的查询

如同上一关介绍的关键字IN一样,我们还可以对关键字BETWEEN AND进行取反,即查询指定范围之外的值。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 NOT BETWEEN n1 AND n2;

示例说明 我们依然使用表Mall_products,现在想要查询除了国家代码为1~50的所有国家的产品内容,查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country NOT BETWEEN 1 AND 50;

结果展示:

img

由结果可知,返回的结果只有大于国家代码50的内容。

单表查询(二)

带 LIKE 的字符匹配查询

使用通配符%模糊匹配数据内容

百分号通配符%能够匹配任意长度的字符,包括长度为零的情况。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符%'; 。其中%的位置可根据需求在字符间变化。

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

我们将使用LIKE关键字和通配符%检索出所有商品名称带ir的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';

结果展示:

img

分析:该语句查询的结果返回所有商品的名字中间带ir字符的所有信息。通配符%告知MySQL,返回字符串中间带ir字符的记录,无论ir前面和后面分别有多少字符。

通配符%可放在不同位置以满足查询需求,试想若要查找商品名称以B开头的所有记录,%应放在哪里?

查询过程图示:

img

使用通配符_模糊匹配数据内容

下划线通配符_与百分号通配符%类似,也用于模糊匹配。但区别在于下划线通配符_只能模糊匹配1个字符。若想用下划线通配符_匹配多个字符,只能多用几个_

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符_'; 。其中_的位置可根据需求在字符间变化。

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

我们将使用LIKE关键字和通配符_检索出所有商品名称以r结尾,且前边有9个字母的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_name LIKE '_________r';

结果展示:

img

看到查询结果中prod_name对应的Teddy bear,大家可能注意到了,我们把空格也当作一个字符来计算。

查询过程图示:

img

查询空值与去除重复结果

查询空值

在数据表创建时,创建者可设定某个字段是否为null值。需注意,这里的NULL既不代表0,也不代表空字符,而是代表一种未知状态,比如不适用或待将来添加合适数据。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 IS NULL;

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

我们将使用IS NULL关键字检索出所有prod_country字段为NULL的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country IS NULL;

结果展示:

img

查询过程图示:

img

可以看到,结果成功显示了prod_country字段为NULL的商品信息。与关键字IS NULL查询结果相反的是关键字IS NOT NULL,来看实际操作效果。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country IS NOT NULL;

结果展示:

img

查询过程图示:

img

可以看到,查出来了prod_country字段的非NULL记录。

去除重复结果

有时,基于数据分析需求,需消除数据表中重复的数据,此时可使用SQL语句中的关键字DISTINCT来消除重复数据。

语法格式为: SELECT DISTINCT 列名 FROM 表名;

示例说明 假设我们现在有一张表Mall_products,内容如下:

img

从表中可看到,除了字段ID无重复项外,其余字段均有重复项。

我们将使用DISTINCT关键字去除prod_name字段中的重复数据。

查询代码如下:

SELECT DISTINCT prod_name, prod_country, prod_price
FROM Mall_products;

结果展示:

img

查询过程图示:

img

可以看到,使用了关键字DISTINCT后,返回的记录不再有重复值。

带 AND 与 OR 的多条件查询

AND关键字的多条件查询

在前两章使用WHERE关键字限定查询内容时,使用的都是单一条件查询。若需要综合多个条件进行检索,比如既想要成熟苹果中直径大于5cm的苹果品种,又想要成熟苹果果色为黄色的苹果品种,就需要用到AND操作符。MySQLWHERE子句中使用AND操作

© 版权声明

相关文章

没有相关内容!

暂无评论

none
暂无评论...