(1)排序查询与筛选查询操作
排序查询使用ORDER BY
,对某个表中的列1按照列升序(ASC,默认升序)或降序(DESC)排序,排序后展示列1和列2两列。此外,也可以按照多列的值对结果进行排序,
SELECT 列1, 列2 FROM 表名 ORDER BY 列1 ASC/DESC;
# 按照多列排序
SELECT 列1, 列2 FROM 表名 ORDER BY 列1, 列2 ASC/DESC;
筛选查询可以使用=
、>
、<
、LIKE
、ILIKE
等筛选器,其中LIKE
和ILIKE
用于查询文本,但LIKE
区分大小写,ILIKE
不区分大小写。ILIKE
运算符主要在 PostgreSQL 中使用。如果使用的MySQL等,可以使用 LOWER
函数。
SELECT 列1, 列2 FROM 表名 WHERE id<2;
# 筛选具有R字符的记录,其中%是通配符
SELECT 列1, 列2 FROM 表名 WHERE 列2 LIKE '%R%';
# 忽略大小写
SELECT 列1, 列2 FROM 表名 WHERE 列2 ILIKE '%r%';
# 可以灵活的使用通配符%,匹配以 "R" 结尾的字符串
SELECT 列1, 列2 FROM 表名 WHERE 列2 LIKE 'R%';
# 使用lower函数将字符串中的所有字符转换为小写进行匹配
SELECT 列1, 列2 FROM 表名 WHERE LOWER(列2) LIKE '%r%';
此外,还可以将排序查询与筛选查询结合。
SELECT 列1, 列2 FROM 表名 WHERE id<2 ORDER BY 列1;
(2)连接查询、子查询、分组查询
**连接查询(Join Queries)**用于将两个或多个表中的数据组合在一起,基于某些共同的列进行匹配。联结类型包括内联结(INNER JOIN)、左外联结(LEFT JOIN)、右外联结(RIGHT JOIN)和全外联结(FULL JOIN)。内连接返回两个表中满足条件的交集;左外连接返回左表中的所有记录,以及右表中匹配的记录;右外连接返回右表中的所有记录,以及左表中匹配的记录;全外连接返回两个表中的所有记录。
SELECT table1.column1, table2.column2,
FROM table1
INNER JOIN table2 ON table1.column3 = table2.column3;
# INNER JOIN/LEFT JOIN/RIGHT JOIN/FULL JOIN
**子查询(Subquery)**指的是在 PostgreSQL 查询中的 WHERE
子句中嵌入查询语句,形成外层和里层两层查询,里面的那层便是子查询。假设在 table1 的每一行中,子查询查找 表2中的列2等于table1.column2时 列1的值,子查询返回对应的列1值,将结果列命名为 table_subsqery。外层查询输出column1, column2。
SELECT column1, column2,
(SELECT 列1 FROM 表2 WHERE 列2 = table1.column2) AS table_subsqery
FROM table1;
为了更清晰和准确,还可以使用别名来引用外层查询的表,这样可以避免潜在的歧义。此外,外层查询还可以再加上一个WHERE
语句。
# 为table1表指定别名t1
SELECT t1.column1, t1.column2,
(SELECT 列1 FROM 表2 WHERE 列2 = t1.column2) AS table_subsqery
FROM table1 t1
WHERE t1.column1=1;
分组查询主要是使用GROUP BY
,GROUP BY
子句用于将结果集按一个或多个列的值进行分组。每个组可以包含一个或多个记录,通常与聚合函数(如 COUNT
、SUM
、AVG
、MAX
、MIN
等)一起使用,以对每个组进行统计或计算。
# 使用聚合函数COUNT,按照列1和列2分组,统计每组列3出现的次数,将结果列命名为 列3_count
SELECT 列1, 列2 COUNT(列3) AS 列3_count
FROM 表名
GROUP BY 列1, 列2;