数据查询
基础SELECT 语句
SQL提供了SELECT语句进行数据库的查询,SELECT语句是最简单也是使用最频繁的查询语句。
SELECT [ALL | DISTINCT] select_list
[INTO new_table]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC]]
SELECT基本语句
查询全部列有两种方法:一种是在SELECT关键字后列出基本表中所有的列名;另一种是如果列的显式顺序与基本表中的顺序相同,则可以利用*指代所有列名。
但在很多情况下,我们只需要查询表中的某些属性列,此时可以通过如下语句来实现:
SELECT column_name [,...n]
[FROM table_name]
取消重复元组
SELECT DISTINCT column_name [,..n]
FROM table_name
通过在SELECT语句中加入DISTINCT关键字,可以取消重复值。
DISTINCT在处理NULL值时,当作相等值处理。
查询前N行记录TOP
SELECT TOP n column_name [,...]
FROM table_name
查询表中的前n行记录。
查询计算列
在数据查询过程中,SELECT子句后的select-list列也可以是一个表达式,表达式是经过对某些列的计算而得到的结果数据。
当查询计算列时,计算列没有被指定列名,所以通过AS关键字为计算列指定别名。
使用别名查询
查询中有时候为了方便识别列名,需要将默认的列名命名为别的名字。
SQL中有三种方式进行别名查询。
- 列名后直接添加别名
SELECT column_name 'column_another_name' [,...n]
FROM table_name
- 等号方式添加列名
SELECT column_another_name = column_name [,...n]
FROM table_name
- AS关键字添加列名
SELECT column_name AS column_another_name [,...n]
FROM table_name
限定查询条件
在对数据库查询时,有时候我们并不需要查询所有的数据,而只需要查询满足特定条件的数据,此时需要在SELECT语句中加入WHERE子句进行查询。
SELECT column_name [,...n]
FROM table_name
WHERE condition_expression
在WHERE子句中通常会用到如下几种运算符。
比较运算符
比较运算符主要有=,<,>,<=,>=,<>和!=,分别表示等于,小于,大于,小于等于,大于等于和不等于的含义。
值得注意的是比较运算符两边的参数,数据类型必须一致。
范围运算符
范围运算符包括BETWEEN 和NOT BETWEEN,主要用于查询是否在指定范围内的数据。
WHERE expression [NOT] BETWEEN value1 AND value2
查询在或不在value1和value2之间的数据。
逻辑运算符
当查询的数据需要满足多个条件时,需要使用逻辑运算符将多个条件串联起来。
逻辑运算符有:NOT 非,AND 与和OR 或这三种。
AND表示同时满足条件;OR表示满足其中任一条件;NOT表示不满足条件
模糊查询
有时候我们无法精确的记得查询条件时,可以根据已知的条件,进行模糊查询。在进行模糊查询时,需要使用字符通配符:
_表示任意单个字符;%表示任意长度的字符串
同时在进行模糊查询时,需要使用[NOT ] LIKE关键字。
列表运算符
当检查查询的属性是否在指定的集合中时,我们需要用到[NOT] IN关键字。
列表有两种方式表示:
一种圆括号括起所有列表的值,列表值之间利用逗号隔开。
另一种通过SELECT语句产生列表。
未知值
有时候我们需要通过检查属性值是否为空来查询数据,此时需要通过IS [NOT] NULL关键字。
规范化查询
规范化查询是指,针对SELECT查询结果集进行,一定的处理,让查询结果更利于观察和分析。例如对结果集进行排序,分组查询等。
排序查询
当希望查询结果按照某个或某些属性进行排列时,可以通过ORDER BY关键字实现。
SELECT column_name [,...n]
FROM table_name
WHERE condition_expression
ORDER BY column_name [ASC | DESC] [,...n]
其中ASC表示升序排列,DESC表示降序排列。
当ORDER BY的列中包含NULL值时,NULL值默认为最大值。
分组查询
当对结果集进行分类汇总时,通过GROUP BY 关键字实现。
而对分组结果有进一步限制要求时,可以通过HAVING关键字实现。
SELECT column_name_order_by[,aggr_fun]
FROM table_name
WHERE condition_expression
ORDER BY column_name
HAVING having_condition
当进行分组查询时,SELECT 后的列名只能是GROUP BY后的列名,或者聚合函数。
HAVING函数只限于对统计组的查询。