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;
第一张表: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;
相关文章推荐
- PG学习第一篇:Install PostgreSQL 9.5 on CentOS 6.5
- 【PostgreSQL学习之旅】第一篇:Linux和Windows下安装PostgreSQL9.4
- PostgreSQL数据库日常学习笔记9-连接查询
- PostgreSQL学习第一篇--官网
- PostgreSQL数据库日常学习笔记3-数据查询
- tcp-h数据&postgresql查询(数据库学习之二)
- subsonic 视频,配置,示例,查询工具,官方网站,学习资料,下载
- MyBatis学习总结(五)——实现关联表查询
- 第一篇学习笔记
- PostgreSQL学习笔记6之函数和操作符<二>
- PostgreSQL在何处处理 sql查询之三十九
- mysql数据库 sql语句学习笔记02 插入更新和查询
- ORACLE SQL: 经典查询练手第一篇
- SQL Server 全文索引查询T-SQL学习笔记
- 学习Xapian(3) – 同义词的查询拓展
- mysql学习笔记(六)--- 多表查询之外键、表连接、子查询、索引
- Vue入门学习第一篇
- mysql学习(5)数据库多表查询
- PostgreSQL学习手册(SQL语言函数)
- Drools 查询学习