PostgreSQL学习第一篇(单表查询)

首先建立两张表,第一张表存放城市名称、最高气温、最低气温、降水量和日期。第二张表存放城市名称和城市坐标。

第一张表:weather

CREATE TABLE weather (    

           city            varchar(80),      -- 城市名称    

           temp_lo         int,               -- 最低气温    

           temp_hi         int,               -- 最高气温    

           prcp            real,                -- 降水量    

           date            date                -- 日期

      );

第二张表:cities

CREATE TABLE cities (

    name            varchar(80),   -- 城市名称

    location        point              -- 坐标

   );

point 类型就是一种 PostgreSQL 特有的数据类型的例子。

我们还要提到如果你不再需要某个表,或者你想创建一个不同的表,那么你可以用下面的命令删除它:

DROP TABLE tablename;

向weather中插入几条数据:

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)    

    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');    

INSERT INTO weather (date, city, temp_hi, temp_lo)

    VALUES ('1994-11-29', 'Hayward', 54, 37);    

上面三条insert语句通过三种方式插入,

第一条使用默认字段排序插入数据,

第二条通过指定字段顺序插入数据,

第三条使用随意顺序插入数据。 PostgreSQL支持上述的三种插入方式。

对cities表也插入一些数据供以后练习使用。

注意:point 类型要求一个座标对作为输入,如下:

INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

其次,表存在了下面就进行查询练习。先从查询一个表开始

SELECT * FROM weather;

这里的 * 是"所有字段"的缩写。 而输出应该是:

              city     |  temp_lo  |  temp_hi |    prcp  |    date

--------------------+-----------+-------------+------------+------------  

San Francisco |      46      |      50      |    0.25   |  1994-11-27  

San Francisco |      43      |      57      |       0     |  1994-11-29

 Hayward         |      37      |      54      |              |  1994-11-29

(3 rows)

你可以在选择列表中写任意表达式,而不仅仅是字段列表。比如,你可以:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

这样应该得到:

            city      |   temp_avg   |    date

--------------------+---------------+------------  

San Francisco |        48        |  1994-11-27  

San Francisco |        50        |  1994-11-29

 Hayward         |        45        |  1994-11-29

(3 rows)

请注意这里的 AS 子句是给输出字段重新命名的。AS 子句是可选的。 一个查询可以使用 WHERE 子句进行"修饰",声明需要哪些行。WHERE 子句包含一个布尔表达式, 只有那些布尔表达式为真的行才会被返回。允许你在条件中使用常用的布尔操作符(AND, OR, NOT)。 比如,下面的查询检索旧金山的下雨天的天气:

SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;

结果:

            city       | temp_lo | temp_hi |  prcp  |    date

--------------------+-----------+------------+---------+------------

 San Francisco |     46     |     50      |  0.25    |  1994-11-27

(1 row)

你可以要求返回的查询是排好序的:

SELECT * FROM weather ORDER BY city;

             city      |  temp_lo | temp_hi |   prcp  |    date

--------------------+----------+----------+--------+------------

 Hayward          |     37     |      54    |            |  1994-11-29

 San Francisco |     43     |      57    |     0     |  1994-11-29

 San Francisco |     46     |      50    |   0.25  |  1994-11-27

在这个例子里,排序的顺序并非绝对清晰的,因此你可能看到 San Francisco 行随机的排序。 但是如果你使用下面的语句,那么就总是会得到上面的结果

SELECT * FROM weather ORDER BY city, temp_lo;

你可以要求查询的结果按照某种顺序排序,并且消除重复行的输出:

SELECT DISTINCT city FROM weather;

     city

---------------

 Hayward  

San Francisco

(2 rows)

再次声明,结果行的顺序可能是随机的。你可以组合使用 DISTINCT 和 ORDER BY 来获取一致的结果。

SELECT DISTINCT city FROM weather ORDER BY city;

posted @ 2013-04-15 17:41  VRML_0504  阅读(449)  评论(0编辑  收藏  举报