MySQL查询核心指令
学习资料出处:数据库原理与应用——MySQL从入门到实战
单表查询(一)
基本查询语句
查询数据表中指定字段的内容
MySQL
从数据表中获取数据的基本语句是SELECT
语句。
SELECT
语句包含较多可选参数,我们从最基础的开始,逐步深入探究SELECT
语句的运用。
SELECT
语句的基本语法格式为: SELECT 列名 FROM 表名;
。
示例说明 假设我们现在有一张名为Mall_products
的表,其内容如下:

若要查询该表中所有商品的名称,应如何书写查询代码呢?
查询代码如下:
SELECT prod_name FROM Mall_products;
结果展示:

查询过程图示:

分析:在该示例中,我们运用SELECT
语句从Mall_products
表中获取prod_name
字段下的所有产品名称,字段名称需紧跟在SELECT
关键字之后。
实际上,我们查询数据时,常常需要同时获取多个字段的内容。此时,只需在字段之间添加逗号,
即可。
语法格式为: SELECT 列名1, 列名2 FROM 表名;
。
示例说明 依旧以表Mall_products
为例,若要查询该表中所有商品的名称和价格,查询代码应如何编写?
查询代码如下:
SELECT prod_name, prod_price
FROM Mall_products;
结果展示:

小提示:MySQL中SQL语句对关键字的大小写不敏感,SELECT和select效果相同。不过许多开发者倾向于将关键字大写,表名和字段名使用小写,养成这样的习惯,日后编写的脚本更便于阅读和维护。
查询数据表中的所有内容
若忘记字段名称,还可查看整张表的内容。此时,只需用星号*
替代字段名称,便可获取整张表的内容。
语法格式为: SELECT * FROM 表名;
示例说明 假设我们现在有一张表Mall_products
,起初不清楚表内有哪些内容,想要查看整张数据表的内容,查询代码该怎么写?
查询代码如下:
SELECT * FROM Mall_products;
结果展示:

小提示:虽然使用星号*
看似便捷,但建议在无需获取整张表内容时,还是使用字段名进行查询,因为这会降低查询效率。
带IN
关键字的查询
IN
关键字用在WHERE
子句之后,用于筛选出需要查询的内容。形象地说,IN
关键字的使用就如同点名,点到的内容会被筛选出来。

语法格式为: SELECT 列名 FROM 表名 WHERE 列名 IN (n1,n2,n3,...);
。其中,括号内的数字需为INT
格式。被“点到名”的这些数字对应的内容会被筛选出来展示。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

我们将使用IN
关键字检索出所有国家代码为1
、87
和39
的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IN (1,87,39);
结果展示:

查询过程图示:

哦豁!刚才输入了三个数字,为何只查询到国家代码为1
和39
的数据呢,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);
结果展示:

带BETWEEN AND
关键字的查询
我们已经学会用IN
关键字精确查询数据表内容,但很多时候仅想知晓某一范围内符合条件的数据数量,这就需要用到关键字BETWEEN AND
。
BETWEEN AND
需要两个参数支持,一个是范围的起始值,另一个是结束值。若字段值满足指定范围的查询条件,就返回这些符合条件的数据内容。
语法格式为: SELECT 列名 FROM 表名 WHERE 列名 BETWEEN n1 AND n2;
。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

我们将使用BETWEEN AND
关键字检索出所有国家代码为1~50
的商品的信息。
查询代码如下:
SELECT *
FROM Mall_product
WHERE prod_country BETWEEN 1 AND 50;
结果展示:

查询过程图示:

可以看到,返回结果包含了国家代码从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;
结果展示:

由结果可知,返回的结果只有大于国家代码50
的内容。
单表查询(二)
带 LIKE 的字符匹配查询
使用通配符%
模糊匹配数据内容
百分号通配符%
能够匹配任意长度的字符,包括长度为零的情况。
语法格式为: SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符%';
。其中%的位置可根据需求在字符间变化。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

我们将使用LIKE
关键字和通配符%
检索出所有商品名称带ir
的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';
结果展示:

分析:该语句查询的结果返回所有商品的名字中间带ir
字符的所有信息。通配符%
告知MySQL
,返回字符串中间带ir
字符的记录,无论ir
前面和后面分别有多少字符。
通配符%
可放在不同位置以满足查询需求,试想若要查找商品名称以B
开头的所有记录,%
应放在哪里?
查询过程图示:

使用通配符_
模糊匹配数据内容
下划线通配符_
与百分号通配符%
类似,也用于模糊匹配。但区别在于下划线通配符_
只能模糊匹配1个
字符。若想用下划线通配符_
匹配多个字符,只能多用几个_
。
语法格式为: SELECT 列名 FROM 表名 WHERE 列名 LIKE '字符_';
。其中_
的位置可根据需求在字符间变化。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

我们将使用LIKE
关键字和通配符_
检索出所有商品名称以r
结尾,且前边有9个字母的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE '_________r';
结果展示:

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

查询空值与去除重复结果
查询空值
在数据表创建时,创建者可设定某个字段是否为null值。需注意,这里的NULL
既不代表0
,也不代表空字符,而是代表一种未知状态,比如不适用或待将来添加合适数据。
语法格式为: SELECT 列名 FROM 表名 WHERE 列名 IS NULL;
。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

我们将使用IS NULL
关键字检索出所有prod_country
字段为NULL
的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IS NULL;
结果展示:

查询过程图示:

可以看到,结果成功显示了prod_country
字段为NULL
的商品信息。与关键字IS NULL
查询结果相反的是关键字IS NOT NULL
,来看实际操作效果。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_country IS NOT NULL;
结果展示:

查询过程图示:

可以看到,查出来了prod_country
字段的非NULL
记录。
去除重复结果
有时,基于数据分析需求,需消除数据表中重复的数据,此时可使用SQL
语句中的关键字DISTINCT
来消除重复数据。
语法格式为: SELECT DISTINCT 列名 FROM 表名;
。
示例说明 假设我们现在有一张表Mall_products
,内容如下:

从表中可看到,除了字段ID
无重复项外,其余字段均有重复项。
我们将使用DISTINCT
关键字去除prod_name
字段中的重复数据。
查询代码如下:
SELECT DISTINCT prod_name, prod_country, prod_price
FROM Mall_products;
结果展示:

查询过程图示:

可以看到,使用了关键字DISTINCT
后,返回的记录不再有重复值。
带 AND 与 OR 的多条件查询
带AND
关键字的多条件查询
在前两章使用WHERE
关键字限定查询内容时,使用的都是单一条件查询。若需要综合多个条件进行检索,比如既想要成熟苹果中直径大于5cm
的苹果品种,又想要成熟苹果果色为黄色的苹果品种,就需要用到AND
操作符。MySQL
在WHERE
子句中使用AND
操作