分享
 
 
 

PostgreSQL7.2教程(2)

王朝mssql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

2.1. 介绍

本章提供一个如何使用 SQL 执行简单操作的概述. 本教程的目地只是给你一个介绍,并非完整的 SQL 教程.都许多关于 SQL92 的书,包括 Understanding the New SQLMelton and Simon, 1993A complete guideJimMeltonAlan R.Simon1-55860-245-31993Morgan Kaufmann1993Morgan Kaufmann Publishers, Inc. 和 A Guide to the SQL StandardDate and Darwen, 1997A user's guide to the standard database language SQLFourth EditionC. J.DateHughDarwen0-201-96426-01997Addison-Wesley1997Addison-Wesley Longman, Inc..而且你还要知道有些 PostgreSQL语言特性是对标准的扩展.

在随后的例子里,我们假设你已经创建了名为 mydb 的数据库,就象在前面的章里面介绍的一样,并且已经启动了 psql.

本手册的例子也可以在PostgreSQL 源代码发布里的目录 src/tutorial/ 中找到. 请参考该目录中的 README 文件获取如何使用 它们的信息.要开始这个教程,按照下面说的进行∶

$ cd ..../src/tutorial

$ psql -s mydb

...

mydb= \i basics.sql

\i 命令从指定的文件中读取命令. -s 选项把你置于单步模式,它在向服务器发送每个查询之前 暂停.在本节使用的命令都在文件 basics.sql 中.

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

2.2. 概念

PostgreSQL 是一种 关系型数据库管理系统 (RDBMS). 这意味着它是一种用于管理那些以关系形式存储的数据的系统.关系实际上是表的 数学称呼.今天,把数据存储在表里的概念已经快成了固有的常识了,但是还有其它的一些方法用于组织数据库.在类 Unix 操作系统上的 文件和目录就形成了一种层次数据库的例子.更现代的发展是面向对象的数据库.

每个表都是一个命名的行的集合. 每一行由一组相同的命名 列组成. 而且每一列都有一特定的类型. 虽然每列在每行里的位置是固定的,但一定要记住 SQL 并未 对行在表中的顺序做任何保证(但你可以对它们进行明确的排序进行显示).

表组成数据库,一个由一个 PostgreSQL 服务器管理的数据库集合组成一个数据库集群.

2.3. 创建新表

你可以通过声明表的名字和所有字段的名字及其类型来创建表∶

CREATE TABLE weather (

city varchar(80),

temp_lo int, -- low temperature

temp_hi int, -- high temperature

prcp real, -- precipitation

date date

);

你可以在 psql 里连换行符一起键入这些东西. psql 可以识别该命令直到分号才结束.

你可以在 SQL 命令中自由使用空白(也就是空格,tab,和换行符). 这就意味着你可以用和上面不同的对齐方式键入命令. 两个划线("--") 引入注释. 任何跟在它后面的东西直到该行的结尾都被忽略. SQL 是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号引起时才能保留它们的大小写属性(上面没有这么干).

varchar(80) 声明一个可以存储最长 80 个字符的 任意字符串的数据类型.int 是普通的整数类型. real 是一种用于存储单精度浮点数的类型. date 类型应该可以自解释.(没错,类型为 date 的字段名字也是 date.这么做可能比较方便,也可能容易让人混淆 -- 你自己看啦.)

PostgresSQL 支持通常的 SQL 类型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,还支持其他的通用类型和丰富的几何类型. PostgreSQL 客户化 为定制任意的用户定义的数据类型.因而类型名并不是语法关键字, 除了 SQL92 标准要求支持的特例外.

第二隔例子将保存城市和它们相关的地理位置∶

CREATE TABLE cities (

name varchar(80),

location point

);

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

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

DROP TABLE tablename;

2.4. 向表中添加行

INSERT 用于向表中添加行∶

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

请注意所有数据类型都使用了相当明了的输入格式. 那些不是简单数字值的常量必需用单引号(')包围, 就象在例子里一样. date 字段实际上对可接收的格式相当灵活, 不过在本教程里,我们应该坚持使用这里显示的格式.

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

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

到目前为止使用的语法要求你记住字段的顺序.一个可选的 语法允许你明确地列出字段∶

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);

许多开发人员认为明确列出字段要比依赖隐含的顺序是更好的风格.

请输入上面显示的所由命令,这样你在随后的各节中才有可用的数据.

你还可以使用 COPY 从文本文件中装载大量 数据.这么干通常更快,因为 COPY 命令就是为 这类应用优化的,同时还有比 INSERT 少一些的 灵活性.比如∶

COPY weather FROM '/home/user/weather.txt';

这里源文件的文件名必须是后端服务器可访问的, 而不是客户端可访问的,因为后端服务器直接读取文件.你可以在 参考手册中读到更多有关 COPY 命令的信息.

2.5. 查询一个表

要从一个表中检索数据就是查询这个表. SQL 的 SELECT 就是做这个用途的.该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据 的表的部分),以及可选的条件(声明任意限制的部分).比如,要检索 表 weather 的所有行,键入∶

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 子句是如何给输出字段 重新命名的.(它是可选的.)

允许你使用任意布尔操作符(AND,OR, 和 NOT)给查询施加条件.比如,下面的查询检索 旧金山的下雨天的天气∶

SELECT * FROM weather

WHERE city = 'San Francisco'

AND prcp 0.0;

Result:

city | temp_lo | temp_hi | prcp | date

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

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

(1 row)

最后再提醒一下,你可以要求选出来的结果按照某种顺序排序, 并且消除重复的行输出.(我们在这里为了避免你混淆,特别声明 DISTINCT 和 ORDER BY 可以独立使用.)

SELECT DISTINCT city

FROM weather

ORDER BY city;

city

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

Hayward

San Francisco

(2 rows)

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

2.6. 在表之间连接

到目前为止,我们的查询一次只访问了一个表. 查询可以一次访问多个表,或者用某种方式访问一个表,而同时处理该表的多个行.一个同时访问同一个或者不同表的多个行的查询叫 连接(join)查询. 举例来说,比如你想列出所有天气记录以及这些记录相关的城市.要实现这个目标,我们需要拿 weather表每行的city 字段和cities表所有行的name字段进行比较, 并选取那些这些数值相匹配的行.

注意: 这里只是一个概念上的模型.实际的连接可以以更高效的方式执行, 但这些是用户看不到的.

这个任务可以用下面的查询来实现∶

SELECT *

FROM weather, cities

WHERE city = name;

city | temp_lo | temp_hi | prcp | date | name | location

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

San Francisco | 46 | 50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)

San Francisco | 43 | 57 | 0 | 1994-11-29 | San Francisco | (-194,53)

(2 rows)

观察结果集的两个方面∶

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有