您的位置:首页 > 数据库

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

2013-04-15 17:41 113 查看
首先建立两张表,第一张表存放城市名称、最高气温、最低气温、降水量和日期。第二张表存放城市名称和城市坐标。

第一张表: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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: