关键字
SELECT语句
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
语法:
SELECT column_name,column_name FROM table_name;
SELECT * FROM table_name;
1. DISTINCT 关键字
在表中,一个列可能会包含多个重复值,DISTINCT 关键词用于返回唯一不同的值
语法:
SELECT DISTINCT column_name,column_name FROM table_name;
注:DISTINCT 关键字应用于所有列而不仅是前置它的列
2. LIMIT 子句
为了返回第一行或前几行,可使用 LIMIT 子句
两种用法:
LIMIT m; 返回不超过 m 行
LIMIT m, n; 从第 m 行开始,反回 n 行数据,等价于 LIMIT n OFFSET m;
3. ORDER BY 子句
ORDER BY 子句取一个或多个列的名字,据此对输出进行排序。默认按照字母顺序排列和数字升序排列。
可指定排列顺序:
降序排列使用关键字DESC,升序排列使用关键字ASC
注:DESC只应用在位于其前面的列上,其他列(非重复数值)仍按照标准升序排列
4. WHERE 子句
- WHERE 子句在表名( FROM 子句)之后给出
- 在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则将会产生错误
WHERE 子句操作符
= 等于:可用于检查单个值
<= 小于等于:同上
> 大于:同上
>= 大于等于:同上
< 小于:同上
<> 不等于:可用于不匹配检查
!= 不等于:同上
BETWEEN 在指定的两个值之间(闭区间)
空值检验
SELECT 语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个WHERE 子句就是 IS NULL 子句
5. GROUP BY 关键字
为了把数据分为多个逻辑组,以便能对每个组进行聚集计算。SELECT 语句的 GROUP BY 子句可以创建分组。
例:
输入
SELECT vend_id, count(*) AS num_prods
FROM products
GROUP BY vend_id;
输出
vend_id num_prods
------- ---------
1001 3
1002 2
1003 7
1005 2
解释:num_prods 为计算字段(用 COUNT(*) 函数建立)。 GROUP BY 子句指示MySQL按 vend_id 排序并分组数据,vend_id 为要分组的列。这只会对每个 vend_id 计算而不是整个表计算 num_prods 一次
注:
1.GROUP BY 子句可以包含任意数目的列
2.在建立分组时,指定的所有列都一起计算
3.GROUP BY 子句中的列必须是要分组的列或表达式(不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同的表达式。不能使用别名
4.除聚集计算语句外, SELECT 语句中的每个列都必须在 GROUP BY 子句中给出
5.如果分组列中具有 NULL 值,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组
6.GROUP BY 子句必须出现在 WHERE 子句之后, ORDER BY 子句之前
6. HAVING
HAVING 可以过滤分组。包括哪些分组,排除哪些分组
HAVING 和 WHERE 的异同:
- 区别:唯一的差别是 WHERE 过滤行,而 HAVING 过滤分组(这里有另一种理解方法, WHERE 在数据分组前进行过滤, HAVING 在数据分组后进行过滤)
- 相同:所学过的有关 WHERE 的所有这些技术和选项(包括通配符条件和带多个操作符的子
句)都适用于HAVING
7. AND OR IN NOT 操作符
-
AND
为了通过不止一个列进行过滤,可使用 AND 操作符连接 WHERE 子句的多个条件 -
OR
OR 操作符,它让MySQL检索匹配任一条件的行,OR 连接多个条件
注:当 AND 和 OR 同时使用在 WHERE 子句中时,可进行复杂过滤。此时应先进行 AND 计算,再进行 OR 计算,因为 AND 优先级更高,可用圆括号()更改计算顺序
-
IN
IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。 IN 取合法值的由逗号分隔的清单,全都括在圆括号中
注:IN 操作符完成与 OR 相同的功能
IN 操作符优点:
a. IN 操作符的语法更清楚且更直观。
b. 计算的次序更容易管理。
c. IN 一般比 OR 执行更快。
d. IN 可以包含其他 SELECT 语句,能够更动态地建立 WHERE 子句
-
NOT
WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
注:MySQL支持使用 NOT 对 IN 、 BETWEEN 和EXISTS子句取反,这与多数其他 DBMS允许使用 NOT 对各种条件取反有很大的差别
SELECT 完全语法:
SELECT [ALL|DISTINCT|DISTINCTROW|TOP]
{|talbe.|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
执行步骤:
1.先从 FROM 字句一个表或多个表创建工作表
2.将 WHERE 条件应用于 1 的工作表,保留满足条件的行
3.GROUP BY 将 2 的结果分成多个组
4.HAVING 将条件应用于 3 组合的条件过滤,只保留符合要求的组。
5.ORDER BY 对结果进行排序。
网友评论