一、基本语法
语法结构:
SELECT
[DISTINCT|ALL]
select_list
FROM table_list
[where_clause]
[group_by_clause]
[HAVING condition]
[order_by_clause]
说明:
[DISTINCT|ALL]:是否去除列表中的重复记录
select_list:需要查询的字段列表
FROM:关键字,用于表示数据来源
select_list具体语法:
{
*|
{
[ schema. ]{ table | view } .*
| expr [ [ AS ] c_alias ]
}
}
说明:
schema:模式名称
table | view:表或视图。
Expr:表达式。
C_alias:别名。
二、基础用法
获取指定字段的数据
SELECT a1,b1.c1 FROM table_name;
获取所有字段数据
SELECT * FROM table;
- 此处不建议使用*进行编码,只建议日常操作、测试使用。原因如下:
1.查询明确的列比使用通配符*效率高
2.只返回必要的列的数据可以减少网络消耗
3.使用通配后,表中新增字段程序可能异常
使用别名
SELECT a1 AS 壹,a2 AS贰,a3 叁 FROM table_name;
AS关键字可省略,加空格即可。
使用表达式
SELECT a1,a2,a3 || ‘*’ || 100 || ‘=’ || a3*100 FROM table_name;
||代表连字符,类似JAVA中的 +
使用函数作为查询的字段
SELECT a1,a2,subStr(a3,1,6) AS 截取后的字符串 FROM table_name;
去除重复
SELECT distinct(a1) FROM table_name;
三、结果排序
语法:
ORDER BY
{expr | postion | c_alias}
[ASC | DESC]
[NULLS FIRST | NULLS LAST]
[ , {expr | position | c_alias}
[ASC | DESC]
[NULLS FIRST | NULLS LAST]
]...
说明:
ORDER BY:排序关键字
expr:表达式
position:表中列的位置
c_alias:别名
[NULLS FIRST | NULLS LAST]:空值处理方式
升序或降序
SELECT a1,a2,a3 FROM table_name ORDER BY a1 DESC;
最后加了DESC为降序,加ASC为升序,默认不加为升序
NULL处理
SELECT a1,a2,a3 FROM table_name ORDER BY a1 NULLS FIRST;
NULLS FIRST即为NULL值排在首位,NULLS LAST即为NULL值排在末尾。
使用别名作为排序手段
SELECT a1,a2,a3 排序 FROM table_name ORDER BY 排序;
使用表达式作为排序手段
SELECT a1,a2,a3 FROM table_name ORDER BY a1*a2;
表达式中NULL和其他值相乘结果为NULL
使用字段位置排序
SELECT a1,a2,a3 FROM table_name ORDER BY 3;
即意为按a3排序
使用多个字段排序
SELECT a1,a2,a3 FROM table_name ORDER BY a1 ASC,3 DESC;
当第一个字段内值相同时会按第二个条件排序
四、WHERE子句
WHERE子句用于定义查询条件
操作符:
- 关系操作符<、<=、>、>=、=、!=、<>
- 比较操作符:IS NULL:如果操作数为NULL则返回true
- 比较操作符:LIKE:模糊比较字符串
- 比较操作符:BETWEEN..AND…:验证值是否在范围内
- 比较操作符:IN:验证操作数是否属于设定的集合
- 逻辑操作符:AND
- 逻辑操作符:OR
- 逻辑操作符:NOT
五、GROUP BY子句
格式:
GROUP BY
{ expr
| { ROLLUP | CUBE } {{expr [, expr ]...}}
}
说明:
Expr:通常为列名
ROLLUP | CUBE:可以返回小计和总计
b)GROUP BY不许出现在WHERE中,但是可以出现在WHERE后面,来处理WHERE过滤后的数据。
六、HAVING子句
通常与GROUP BY一起使用,限制搜索条件。
SELECT a1,a2,a3,AVG(a4) FROM table_name GROUP BY a1 HAVING AVG(a4)>1000
七、子查询
此处略去子查询的基本使用方式,仅说明量化比较关键字用法:
- ANY:表示满足子查询结果的任何一个。和<、<=搭配,表示小于等于列表中的最大值,大于号反之。
- SOME:基本同上。
- ALL:表示满足子查询所有结果。和<、<=搭配,表示小于等于列表中的最小值,大于号反之。
- 例子:
SELECT a1,a2,a3 FROM table_name WHERE a1< ANY(SELECT b1 FROM table_name)