简述: 本篇是数据库的学习笔记,仅供自己学习使用。
本文初发于 “曾晨de小站” zengchen233.cn,同步转载于此。
数据库和表的基本操作(三)
带 LIKE 的字符匹配查询
在前面的检所操作中,我们讲述了如何进行比较查询或者是范围查询,但如果我们想查找所有包含字符ir
的内容该么办呢?用之前的方法好像行不通了。在这里,我们需要用通配符进行匹配查找。而执行匹配查找的关键字就是LIKE
。 SQL
语句支持很多种通配符,其中可以和LIKE
一起搭配使用的就是通配符%
和_
了。
使用通配符%
模糊匹配数据内容
百分号通配符%
可以匹配任意长度的字符,甚至包括零字符。
语法规则为:
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%'; //其中 % 的位置可以根据需要在字符间变化
我们将使用LIKE
关键字和通配符%
检索出所有商品名称带ir
的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';
分析:
该语句查询的结果返回所有商品的名字中间带ir
字符的所有信息。通配符%
告诉MySQL
,返回字符串中间带ir
字符的记录,不管ir
前面和后面分别有多少字符。通配符%
可以放在不同的位置以满足你查询的需要.
使用通配符_
模糊匹配数据内容
下划线通配符_
与百分号通配符%
类似,也用于模糊匹配。但是区别在于下划线通配符_
只能模糊匹配1个
字符。如果你执意想用下划线通配符_
匹配多个字符,那只能多用几个_
咯!
语法规则为:
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_'; //其中`_`的位置可以根据需要在字符间变化
举个例子 假设我们现在有一张表Mall_products
,内容如下:
我们将使用LIKE
关键字和通配符_
检索出所有商品名称以r
结尾,且前边有9个字母的商品信息。
查询代码如下:
SELECT *
FROM Mall_products
WHERE prod_name LIKE '_________r';
查询空值
在数据表创建之初,创建者可以指定某个字段是否为空值NULL
。注意了,这个NULL
既不代表0
,也不代表空字符,而是代表一种未知的状态,比如不适用或者放着等将来有合适数据了再添加进去。
语法规则为:
SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;
去除重复结果
有的时候,出于对数据分析的要求,分析人员需要消除数据表中重复的数据,那么如何消除呢?别担心,SQL
语句也贴心的为你准备好了消除重复数据的关键字DISTINCT
。
语法规则为:
SELECT DISTINCT 字段名 FROM 表名;
带AND
关键字的多条件查询
大家在前两章使用WHERE
关键字限定查询内容的时候,有没有注意到我们使用的都是单一条件查询。有没有同学曾经在检索的时候觉得力不从心:“我需要的结果只用单一条件查询是得不到的呀!”
比如,我既想要成熟苹果中直径大于5cm
的苹果的品种,又想要成熟苹果果色为黄色的苹果的品种。这两个条件如何综合在一起进行检索呢?
MySQL
在WHERE
子句中使用AND
操作符限制只有满足所有条件的查询才会被返回。可以使用AND
连接两个甚至更多个查询条件,多个条件表达式之间用AND
分开。
语法规则为:
SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2;
带OR
关键字的多条件查询
与AND
相反,在WHERE
声明中使用OR
关键字表示只需满足两个条件中的其中一个条件即可返回结果。
语法规则为:
SELECT 字段名 FROM 表名 WHERE 表达式1 OR 表达式2;
小提示: OR 可以和 AND 一起使用。但是 AND 的优先级要高于 OR 的优先级!
对查询结果排序
我们知道在MySQL
中从数据表中读取数据都是使用SELECT
语句。 如果我们需要对读取的语句进行排序,我们就可以使用Order By
子句来设定你想要按照的字段进行排序并返回结果。
语法:
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
你还可以根据自己的需求添加WHERE
、LIKE
子句来设置条件,再对结果过进行排序显示。
指定排序方向
从上面的查询语句中我们并未看到有任何表示排序方向的关键字,在默认情况下,它是按升序排列的。
ASC
升序关键字DESC
降序关键字
分组查询的单独使用
分组查询的关键字是Group By
,查询的是每个分组中 首次出现的一条记录。
语法:
SELECT 字段名 FROM 表名 GROUP BY 字段名;
一般情况下,GROUP BY
都和聚合函数一起使用。
LIMIT
的使用
在我们查询大量数据结果时,会返回很多条数据,有需要的记录可能就其中的一条或者几条。比如,实现分页功能,若每页显示10
条记录,每次查询就只需要10
条记录。 在MySQL
中,提供了LIMIT
关键字,用来限制查询结果的数量。
语法:
SELECT 字段名 FROM 表名 LIMIT [OFFSET,] 记录数;
子查询
子查询是指出现在其他SQL
语句内的SELECT
子句。
例如:
SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2);
子查询指嵌套在查询内部,且必须始终出现在圆括号内,子查询可以分为四类:
- 标量子查询:返回单一值的标量,最简单的形式;
- 列子查询:返回的结果集是
N
行一列; - 行子查询:返回的结果集是一行
N
列; - 表子查询:返回的结果集是
N
行N
列。
关键字子查询
相关知识
由于列子查询返回的结果集是 N
行一列,因此不能直接使用 =
、>
、<
、>=
、<=
、<>
这些比较标量结果的操作符。在列子查询中可以使用 ALL
、ANY
、SOME
和 IN
关键字操作符。
为了完成本关任务,你需要掌握:如何在子查询中使用关键字进行查询。
ALL
关键字
ALL
必须接在一个比较运算符的后面,表示与子查询返回的所有值比较都为 TRUE
则返回TRUE
。
ANY
和SOME
关键字
ANY
与比较操作符联合使用,表示与子查询返回的任何值比较为TRUE
,则返回TRUE
。 SOME
是ANY
的别名,一般用的比较少。
IN
关键字
IN
的意思就是指定的一个值是否在这个集合中,如果在就返回TRUE
;否则就返回FALSE
了,同IN
(项1
,项2
,…);IN
是= ANY
的别名,二者相同,但NOT IN
的别名却不是<> ANY
而是<> SOME
。