1.虽然 SQL 是不区分大小写的,但是表名、 列名和值可能有所不同(这有赖于具体的 DBMS 及其如何配置)。
2.1使用通配符有一个大优点。由于不明确指定列名(因为星号检索每一 列),所以能检索出名字未知的列。(SELECT * FROM product)
2.2使用 DISTINCT 关键字,指示数据库只返回不同 的值。如果使用 DISTINCT 关 键字,它必须直接放在列名的前面。
2.3DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列。例 如,你指定 SELECT DISTINCT vend_id, prod_price,除非指定的 两列完全相同,否则所有的行都会被检索出来。
2.4SELECT * FROM product limit 1,2;第一个参数指定返回的第一条记录行的偏移量,第二个参数指定返回的最大记录行数。
2.5ORDER BY(在指定一条 ORDER BY 子句时,应该保证它是 SELECT 语句中最后一 条子句。如果它不是最后的子句,将会出现错误消息。)
3.1ORDER BY (通常,ORDER BY 子句中使用的列将是为显示而选择的列。但是,实 际上并不一定要这样,用非检索的列排序数据是完全合法的。)
3.2按多个列排序 SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;仅在多个行具有相同的 prod_price 值时 才对产品按 prod_name 进行排序。如果 prod_price 列中所有的值都是 唯一的,则不会按 prod_name 排序。
3.3按列位置排序,除了能用列名指出排序顺序外,ORDER BY 还支持按相对列位置进行排序。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3;
这一技术的主要好处在于不用重新输入列名。但它也有缺点。首先,不明 确给出列名有可能造成错用列名排序。其次,在对 SELECT 清单进行更改 时容易错误地对数据进行排序(忘记对 ORDER BY 子句做相应的改动)。 最后,如果进行排序的列不在 SELECT 清单中,显然不能使用这项技术。
3.4指定排序方向
数据排序不限于升序排序(从 A 到 Z),这只是默认的排序顺序。还可以 使用 ORDER BY 子句进行降序(从 Z 到 A)排序。为了进行降序排序, 必须指定 DESC 关键字。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;在上例中,只对prod_price 列指定 DESC,对 prod_name 列不指定。因此,prod_price 列以降序排 序,而 prod_name 列(在每个价格内)仍然按标准的升序排序。
4.1过滤数据 WHERE关键字
在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则将会产生错误。
4.2WHERE 子句操作符
4.2.1
何时使用引号
如果仔细观察上述 WHERE 子句中的条件,会看到有的值括在单引号内, 而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的 列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。
4.2.2范围值检查
BETWEEN AND
4.2.3空值检查
确定值是否为 NULL,不能简单地检查是否= NULL。SELECT 语句有一个 特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就 是 IS NULL 子句。
通过过滤选择不包含指定值的所有行时,你可能希望返回含 NULL 值 的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库 不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返 回这些结果。 过滤数据时,一定要验证被过滤列中含 NULL 的行确实出现在返回的 数据中。