MySQL 第四章、第五章、第六章、第七章 如何基本操作数据
第四章 检索数据
本章将介绍如何使用SELECT语句从表中检索一个或多个数据列。
SELECT语句
正如第1章所述,SQL语句是由简单的英语单词构成的。这些单词称 为关键字,每个SQL语句都是由一个或多个关键字构成的。大概,最经常使用的SQL语句就是SELECT语句了。它的用途是从一个或多个表中检索 信息。
为了使用SELECT检索表数据,必须至少给出两条信息——想选择什 么,以及从什么地方选择。
检索单个列
检索多个列
要想从一个表中检索多个列,使用相同的SELECT语句。唯一的不同
是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。
检索所有列
检索不同的行
正如所见,SELECT返回所有匹配的行。但是,如果你不想要每个值 每次都出现,怎么办?例如,假如你想得出products表中产品的所有供 应商ID:
不能部分使用DISTINCT DISTINCT关键字应用于所有列而 不仅是前置它的列。如果给出SELECT DISTINCT vend_id, prod_price,除非指定的两个列都不同,否则所有行都将被 检索出来
限制结果
使用完全限定的表名
小结
本章学习了如何使用SQL的SELECT语句来检索单个表列、多个表列
以及所有表列。下一章将讲授如何排序检索出来的数据。
第五章 排序检索数据
本章将讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检 索出的数据。
排序数据
正如前一章所述,下面的SQL语句返回某个数据库表的单个列。但请
看其输出,并没有特定的顺序。
其实,检索出的数据并不是以纯粹的随机顺序显示的。如果不排 序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此,如果不明确控 制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。
子句(clause) SQL语句由子句构成,有些子句是必需的,而
有的是可选的。一个子句通常由一个关键字和所提供的数据组 成。子句的例子有SELECT语句的FROM子句,我们在前一章看到过这个子句。
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。 ORDER BY子句取一个或多个列的名字,据此对输出进行排序。请看下面 的例子:
按多个列排序
经常需要按不止一个列进行数据排序。例如,如果要显示雇员清单, 可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。 如果多个雇员具有相同的姓,这样做很有用。
为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就 像选择多个列时所做的那样)。
下面的代码检索3个列,并按其中两个列对结果进行排序——首先按 价格,然后再按名称排序。
重要的是理解在按多个列排序时,排序完全按所规定的顺序进行。 换句话说,对于上述例子中的输出,仅在多个行具有相同的prod_price 值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
指定排序方向
数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可 以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序, 必须指定DESC关键字。
下面的例子按价格以降序排序产品(最贵的排在最前面):
第六章 过滤数据
本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件。
过滤数据
数据库表一般包含大量的数据,很少需要检索表中所有行。通常只 会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要 指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。 WHERE子句在表名(FROM子句)之后给出,如下所示:
WHERE 字句操作符
检查单个值
我们已经看到了测试相等的例子。再来看一个类似的例子:
现在来看几个使用其他操作符的例子。
第一个例子是列出价格小于10美元的所有产品:
不匹配检查
以下例子列出不是由供应商1003制造的所有产品:
范围值检查
为了检查某个范围的值,可使用BETWEEN操作符。其语法与其他WHERE
子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。 例如,BETWEEN操作符可用来检索价格在5美元和10美元之间或日期在指 定的开始日期和结束日期之间的所有产品。
下面的例子说明如何使用BETWEEN操作符,它检索价格在5美元和10 美元之间的所有产品:
空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在
一个列不包含值时,称其为包含空值NULL。
第七章 数据过滤
本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。 我们还将学习如何使用NOT和IN操作符。
组合WHERE字句
第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的条 件。为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子 句可以两种方式使用:以AND子句的方式或OR子句的方式使用。
操作符(operator) 用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符(logical operator)。
AND操作符
为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加
条件。下面的代码给出了一个例子:
OR操作符
OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。
OR WHERE子句中使用的关键字,用来表示检索匹配任一给定
条件的行。
计算次序
WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂
和高级的过滤。
但是,组合AND和OR带来了一个有趣的问题。为了说明这个问题,来 看一个例子。假如需要列出价格为10美元(含)以上且由1002或1003制 造的所有产品。下面的SELECT语句使用AND和OR操作符的组合建立了一个 WHERE子句:
IN操作符
NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所 跟的任何条件。
NOT WHERE子句中用来否定后跟条件的关键字。