跟着 datacamp 学完了 SQL 中级课程(使用 PostgreSQL)。下面是出现过的子句写法。

在开始前

SQL 并不是按书写顺序来执行的。可以先对执行顺序有所了解。

1
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY->LIMIT

选择和过滤

SELECT

1
2
3
4
SELECT * 
SELECT currentDatabase();查看当前所在的数据库。
-- DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT col1,col2

WHERE 过滤数据(作用于单行)

1
2
3
4
5
6
--使用AND、OR可以连接多个筛选要求。AND后的句子过长可以用括号
WHERE col > 1 AND col = ''
-- BETWEEN ... AND 用于快速选择时间段
WHERE col BETWEEN a AND b
-- 可以是字符或数字
WHERE col in ('','')

LIKE\NOT LIKE 用于过滤字符串。% 匹配多个字符,_ 匹配一个字符

1
WHERE col like 'A%'

IS NULL\IS NOT NULL 用于过滤空值

1
WHERE col IS NULL

总结特点

主要是聚合函数

COUNT() 的作用是“计数”

1
2
3
4
5
-- 包含NULL
SELECT COUNT(*) 
-- 不包含NULL
SELECT COUNT(col) 
SELECT COUNT(DISTINCT col) 

MIN()和MAX()

1
2
select MIN(time) AS min_time,MAX(time) AS max_time 
FROM table_name

ROUND() 四舍五入, 参数可以为负数,表示整数取整

1
2
-- 表示取整到个位
ROUND(AVG(col),-1)

分组、排序

GROUP BY column 对列操作 没有分组的列不能被 SELECT,但可以选择用聚合函数

1
2
3
SELECT col1, aggregate_function(col2)  
FROM table_name  
GROUP BY column_name;

HAVING分组后 过滤数据(作用于整个组)

1
2
3
4
SELECT col1,count(col) 
FROM table_name 
GROUP BY column_name 
HAVING count(col) > num 

ORDER BY 默认从小到大排序。搭配 ASC 表示升序,DESC 表示降序。可以用 SELECT 里的别名

1
ORDER BY column_name ASC

视图

Create VIEW 创建视图,视图和真实的表很相似,但它只存储查询代码

1
2
3
4
Create VIEW view_name AS <Query>

--用法
SELECT * from view_name
Licensed under CC BY-NC-SA 4.0