简单查询 行
SELECT 查询
-
全字段
SELECT * FROM public.table_name WHERE column1 = '11'; -
部分字段
SELECT column1, column2 FROM public.table_name WHERE column1 = '11'; -
一个完整的查询模式
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] [ * | expression [ [ AS ] output_name ] [, ...] ] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ]- 注意出现的顺序,下面会解释一部分
JOIN 联合
-
出现位置: 紧跟在
FROM后面 -
【最常用】左联合
LEFT JOIN other_table ON condition- 以主表为基础,每一行都去看看有没有在其他表跟它对应的
- 若无对应
- 则
保留主表此行,填入NULL
- 则
- 若有多行对应
- 则主表此行演变成多行一样的,把对应的项填补进来
- 若无对应
- 确认对应的,需要在
ON后面加判断条件
- 以主表为基础,每一行都去看看有没有在其他表跟它对应的
-
【一般常用】内联
INNER JOIN other_table ON condition- 也是以主表为基础,每一行都去确认有没有在其他表跟它对应的
- 若无对应
- 则
移除主表此行
- 则
- 若有多行对应
- 则主表此行演变成多行一样的,把对应的项填补进来
- 若无对应
- 确认对应的,需要在
ON后面加判断条件
- 也是以主表为基础,每一行都去确认有没有在其他表跟它对应的
-
【很少用】右联合
RIGHT JOINA left join B等价与B right join A
GROUP BY 聚合
如果存在 多行记录 的 某一列值 都相同,则可以用 此列 做依据,把它们聚合起来
配合聚合函数,把多行变成一行
ORDER BY 排序
ORDER BY mtime DESC
DESC指定由大到小排序- 如果不指定,则是从小到大排序
AESC
- 如果不指定,则是从小到大排序
LIMIT 限量、OFFSET 偏移
LIMIT 100
OFFSET 1000
- 查询第1001-1100条