PostGIS教程六:简单的SQL语句

目录

一、SELECT查询

二、简单SQL语句的练习

三、本文涉及函数的列表


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

    当我们创建第一个数据库时,你已经看到了SQL:

SELECT postgis_full_version();

    查看PostGIS的版本信息。

    在前面的章节中,我们已经将数据加载到数据库中,现在让我们使用SQL来查询数据!例如:

        "查看纽约市所有社区的名字?"

    通过单击SQL按钮在pgAdmin中打开SQL查询窗口:

    然后在查询窗口中输入以下查询语句:

SELECT name FROM nyc_neighborhoods;

    并点击执行查询按钮:

 

    查询将运行几毫秒并返回129个结果:

    但这个过程中到底发生了什么?为了理解,让我们从SQL的四个”动词“开始:

  • SELECT    ——    返回查询的行记录
  • INSERT    ——    向表中添加新行记录
  • UPDATE    ——    更改表中的现有行记录
  • DELETE    ——    从表中删除行记录

    我们几乎全部使用SELECT语句来使用空间函数,所以着重介绍SELECT语句。

一、SELECT查询

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

SELECT some_columns FROM some_data_source WHERE some_condition;

    注意:有关所有SELECT语句参数的概要,请参阅PostgreSQL文档

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

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

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

 
  1. SELECT name

  2. FROM nyc_neighborhoods

  3. WHERE boroname = 'Brooklyn';

    查询将只花费比上次查询更少的时间,并返回23个结果:

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

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

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

 
  1. SELECT char_length(name)

  2. FROM nyc_neighborhoods

  3. WHERE boroname = 'Brooklyn';

    通常,我们对单个行记录数据不感兴趣,而对基于所有行记录数据的统计数据更感兴趣。

    因此,知道各个社区名字的长度可能不如知道所有社区名字的长度的平均值有趣。

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

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

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

 
  1. SELECT avg(char_length(name)), stddev(char_length(name))

  2. FROM nyc_neighborhoods

  3. WHERE boroname = 'Brooklyn';

    上面示例中的聚合函数应用于结果记录集中的每一行。

    如果我们希望在整个结果集中对各个子数据集分组进行处理,该怎么办?

    我们可以使用GROUP BY子句。

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

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

 
  1. SELECT boroname, avg(char_length(name)), stddev(char_length(name))

  2. FROM nyc_neighborhoods

  3. GROUP BY boroname;

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

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

二、简单SQL语句的练习

    使用nyc_census_blocks表,回答以下问题(不要急着回答!)。

    下面是一些有用的信息,回想一下上一章节中的nyc_census_blocks表的定义。

    下面是一些常见的SQL聚合函数,你可能会发现它们很有用:

  • avg()    ——    返回一个数值列的平均值
  • sum()    ——    返回一个数值列的和
  • count()    ——    返回一个列的记录数

    下面是问题:

        第一个问题:"纽约市的总人口是多少?"

        答案:

 
  1. SELECT Sum(popn_total) AS population

  2. FROM nyc_census_blocks;

    

    注意:关键字AS是什么意思?AS用于为指定别名。设置合适的别名可以使查询结果更容易理解。与本来要输出的列名sum不同,我们使用AS关键字将其改为population。

    第二个问题:"布朗克斯(Bronx)行政区的总人口是多少?"

    答案:

 
  1. SELECT Sum(popn_total) AS population

  2. FROM nyc_census_blocks

  3. WHERE boroname = 'The Bronx';

    第三个问题:"对每个行政区来说,白人占该行政区总人口的百分比是多少?"

    答案:

 
  1. SELECT

  2. boroname,

  3. 100 * Sum(popn_white)/Sum(popn_total) AS white_pct

  4. FROM nyc_census_blocks

  5. GROUP BY boroname;

三、本文涉及函数的列表

SQL 指令 SELECT DISTINCT WHERE AND OR IN BETWEEN LIKE ORDER BY 函数 COUNT GROUP BY HAVING ALIAS 表格链接 外部链接 CONCATENATE SUBSTRING TRIM 表格处理 CREATE TABLE CONSTRAINT NOT NULL UNIQUE CHECK 主键 外来键 CREATE VIEW CREATE INDEX ALTER TABLE DROP TABLE TRUNCATE TABLE INSERT INTO UPDATE DELETE FROM 进阶 SQL UNION UNION ALL INTERSECT MINUS 子查询 EXISTS CASE 算排名 算中位数 算总合百分比 算累积总合百分比 SQL 语法 无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您 就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理数据库之中的资料。 ♦ 表格处理: SQL 如何被用来处理数据库中的表格。 ♦ 进阶 SQL: 介绍 SQL 进阶概念,以及如何用 SQL 来执行一些较复杂的运算。 ♦ SQL 语法: 这一页列出所有在这个教材中被提到的 SQL 语法。 对于每一个指令, 我们将会先列出及解释这个指令的语法, 然后用一个例子来让读者了解这 个指令是如何被运用的。当您读完了这个网站的所有教材后,您将对 SQL 的语法会有一个 大致上的了解。另外,您将能够正确地运用 SQL 来由数据库中获取信息。笔者本身的经验 是,虽然要对 SQL 有很透彻的了解并不是一朝一夕可以完成的,可是要对 SQL 有个基本 的了解并不难。希望在看完这个网站后,您也会有同样的想法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值