首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>postgre>正文

PostgreSQL7.2教程(2)

http://www.oklinux.cn  2007-02-09  来源: oklinux收集整理   会员收藏  游客收藏  【 】 


  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)
  
  观察结果集的两个方面∶
  
  




上一篇:PostgreSQL7.2教程(1)   下一篇:在RedHat7.0上安装和配置PostgreSQL


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·在RedHat7.0上安装和配置PostgreSQL
·PostgreSQL7.2教程(1)
·Python入门第十章 进一步学习
·Python入门第九章 类
·Python入门第八章 错误与例外
·Python入门第七章 输入输出
·Python入门第六章 模块
·Python入门第五章 Python数据结构
·Python入门第四章 流程控制
·Python入门第三章 基本使用
·Python入门第二章 解释程序的使用
·Python入门第一章 介绍
·Python 的内置数值类型
·探索 Python 类型的层次结构(2)
·探索 Python 类型的层次结构(1)
·将你的网站从MySQL改为Postgre SQL
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·在Ubuntu和Debian系统下安装PostgreSQL
·如何从网络上登录其它计算机的PostgreS
·Ubuntu系统下安装和配置PostgreSQL 8.1
·在RedHat7.0上安装和配置PostgreSQL
·PostgreSQL7.2教程(1)
·Python入门第十章 进一步学习
·Python入门第九章 类
·Python入门第八章 错误与例外
·Python入门第七章 输入输出
·Python入门第六章 模块
·Python入门第五章 Python数据结构
·Python入门第四章 流程控制
  阅读排行
·Python入门第七章 输入输出
·PostgreSQL 最新8.2版发布
·PostgreSQL介绍及安装指南
·PostgreSQL 的热备和恢复
·PostgreSQL 7.2 教程 (1)
·PostgreSQL入门,V0.9.3+++
·在Linux上安装postgresql的全过程
·源码安装Postgresql8.1.3+PostGIS1.1.2
·Sqlite中文排序研究
·ucLinux下sqlite数据库移植全攻略
·将你的网站从MySQL改为PostgreSQL
·Linux下mySQL数据库开发技术
·Linux实时内存数据库eXtremeDB性能
·postgresql访问认证设置
·BI相关的开源工具
网摘收藏: