SQL,即"Structured Query Language-结构化查询语言",是对关系数据库进行查询数据和更新数据的一种语言。

SELECT查询

SELECT查询通常采用以下形式:

SELECT some_columns FROM some_data_source WHERE some_condition;

some_columns既可以是列名也可以是列值的函数,some_data_source既可以是单个表,也可以是通过连接两个表而创建的组合表。some_condition相当于一个过滤器,它限制要返回的行数。

”查看布鲁克林所有社区的名字?“

我们使用一个过滤器来查询nyc_neighborhoods表,这张表内包含了纽约所有的街区信息,但我们只想要查看属于布鲁克林(行政区)的那些社区:

SELECT name
FROM nyc_neighborhoods
WHERE boroname = 'Brooklyn';

有时,我们需要对查询的结果应用一个函数,例如:

"布鲁克林所有社区的名字里各有多少个字母?"

幸运的PostgreSQL有一个字符串长度函数,char_length(string):

SELECT char_length(name)
FROM nyc_neighborhoods
WHERE boroname = 'Brooklyn';

接受多行记录并返回单个结果的函数称为“聚合(aggregate)函数"。

PostgreSQL有一系列内置的聚合函数,包括求平均值的avg()函数和求标准差的stddev()函数。

布鲁克林所有社区名字的平均字母数和字母数的标准差是多少?”

SELECT avg(char_length(name)), stddev(char_length(name))
FROM nyc_neighborhoods
WHERE boroname = 'Brooklyn';

如果我们希望在整个结果集中对各个子数据集分组进行处理

我们可以使用GROUP BY子句。

聚合函数通常需要添加GROUP BY语句,以便基于一个或多个列对结果记录集进行分组求值。

“基于各个行政区进行分组,纽约市各个行政区的所有社区名字的平均字母数是多少?”

SELECT boroname, avg(char_length(name)), stddev(char_length(name))
FROM nyc_neighborhoods
GROUP BY boroname;

我们将boroname列包含在输出结果中,以便确定哪个统计数据对应于哪个行政区

聚合查询中,只能输出GROUP BY子句对应的列或聚合函数对应的列。