亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-教程 -72. 查詢語言

2019-09-08 23:34:02
字體:
來源:轉載
供稿:網友
第七十二章. 查詢語言
內容 
SQL 界面 
概念 
創建新表 
向表中加入記錄 
查詢一個表 
重新定向 SELECT 查詢 
聯接表 
更新 
刪除 
使用聚集函數 
Postgres 的查詢語言是一個 SQL 下一代標準 SQL3 初稿的一個變種.它有許多擴展,比如可擴展的類型系統,繼承,函數和使用(?production) 規則等.這些特性是從最初的 Postgres 查詢語言, PostQuel,上繼承過來的.本節概要的介紹如何使用 PostgresSQL 進行一些簡單操作.這本手冊只是試圖給你一些我們熟知的SQL的概念,而不是一個SQL的完整的教程.有大量的介紹SQL92的書,包括 Melton and Simon, 1993 和 Date and Darwen, 1997.你同時也要明白有些語言特性并非 ANSI 標準. 
SQL 界面
在下面的例子里,我們假定你已經創建了mydb 數據庫并且啟動了psql.本手冊的例子也可以在/usr/local/pgsql/src/tutorial/ 目錄下找到.關于如何使用他們,請參閱該目錄下的 README 文件.要開始教程,鍵入下面命令: 
% cd /usr/local/pgsql/src/tutorial
% psql -s mydb
Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms of POSTGRESQL

   type /? for help on slash commands
   type /q to quit
   type /g or terminate with semicolon to execute query
 You are currently connected to the database: postgres

mydb=> /i basics.sql
/i 命令從指定的文件里讀入查詢.-s 選項讓你進入單步模式,這樣在把查詢送給后端之前會停下來.本節的查詢語句都在 basics.sql 文件里. 
psql 有一系列 /d 命令用于顯示系統信息.使用這些命令去獲得更多詳細信息; 或在 psql 提示符下鍵入 /? 查看列表.


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

概念
Postgres 里最基本的概念是表(class),表是一個命名的對象實例/記錄(instance)的集合.每一實例/記錄由一組相同的命名屬性/字段(attributes)組成.而且每一屬性有一特定的類型.另外,每個實例都有一個唯一的永久對象標識?。∣ID).因為 SQL 語法中使用表(tables)的概念,我們這里class和talbes是可以互換的.同樣, SQL行(row) 是一個實例(instance) 而 SQL列(columns) 是 屬性(attributes).正如前面所述,一組表組成數據庫,一組由某一postmaster 進程管理的數據庫構成一個安裝或節點.

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

創建新表
你可以通過指定表名和表中各字段屬性和字段類型的方法創建一個新表: 
CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);
注意:所有關鍵字和標識都是大小寫無關的; SQL92 允許使用雙引號將標識括起來實現大小寫相關. PostgresSQL支持通常的 SQL 類型 int, float, real, smallint, char(N),varchar(N), date, time,和 timestamp,還支持其他的通用類型和豐富的數組類型.我們稍后將看到,Postgres 可以定制任意的用戶定義的數據類型.因而類型名并不是語法關鍵字,除了SQL92 標準要求支持的特例外.所以, Postgres 用于建表的命令 CREATE 和傳統的關系型系統的命令幾乎一模一樣.不過,我們很快就會看到這里的表是關系型模型的擴展.

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

向表中加入記錄
INSERT 語句用于向表中添加記錄: 
INSERT INTO weather
    VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994');
你還可以使用 copy 命令從一個平面(ASCII)文件里向表中添加大數量的記錄。這樣做通常要快一些,因為數據是做為單個量化事務從目標表中讀取或者寫入到目標表中去的。例如: 
COPY weather FROM '/home/user/weather.txt'
    USING DELIMITERS '|';
這里源文件的路徑必須是后端服務器機器可以訪問的,而不是客戶端可訪問的路徑,因為后端服務器直接從文件中讀取數據。

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

查詢表
我們可以用通常的關系查詢選擇和影射查詢檢索 weather 表.一個 SQL select 語句可以用于此事. 該語句分成目標列表(返回的字段)部分和條件(限制條件)部分.例如,我們檢索weather表中的所有行,鍵入: 
SELECT * FROM weather;
輸出為: 
+--------------+---------+---------+------+------------+
|city          | temp_lo | temp_hi | prcp | date       |
+--------------+---------+---------+------+------------+
|San Francisco | 46      | 50      | 0.25 | 11-27-1994 |
+--------------+---------+---------+------+------------+
|San Francisco | 43      | 57      | 0    | 11-29-1994 |
+--------------+---------+---------+------+------------+
|Hayward       | 37      | 54      |      | 11-29-1994 |
+--------------+---------+---------+------+------------+
你可以在目標列表中輸入任意的表達式.例如: 
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
在任何查詢條件中條件都可以使用任意布爾操作符(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 | 11-27-1994 |
+--------------+---------+---------+------+------------+
最后,你可以對 select 的結果排序輸出或去除重復記錄. 
SELECT DISTINCT city
    FROM weather
    ORDER BY city;

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

重新定向 SELECT 查詢
任何 select 查詢可以重定向到一個新表 
SELECT * INTO TABLE temp FROM weather;
這句話隱含一個 create 命令,創建一個有著與 select into 命令目標列表一樣的字段的新表 temp.這樣,我們可以象對其他表一樣對生成的表做操作.

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

聯接表
到此為止,我們一次只能對一個表進行查詢.我們可以同時查詢多個表,或者同時處理一個表的多個記錄.一個同時訪問一個或多個表的多個記錄的查詢叫連接查詢.比如,我們想找出所有溫度范圍在其他記錄的溫度范圍之內的記錄.實際上,我們需要拿每個 EMP 記錄的 temp_lo 和 temp_hi 字段和所有其他 EMP 記錄的相應字段作比較. 
注意:這只是一個概念上的模型.實際的聯合查詢可以一種更有效的方式進行,但卻是用戶不可見的.
我們可以用下面的查詢: 
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
    W2.city, W2.temp_lo AS low, W2.temp_hi AS high
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;

+--------------+-----+------+---------------+-----+------+
|city          | low | high | city          | low | high |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 43  | 57   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 37  | 54   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
注意: 此連接查詢的語意是要從查詢里聲明的表的笛卡兒乘積里面找出符合查詢條件的所有記錄。對笛卡兒乘積里面資格條件為真的記錄, Postgres 計算并返回目標列表的所有值. PostgresSQL 并不對表達式中的重復值賦予任何特殊含義,這就意味著Postgres 有時候會若干次重復計算同一目標列表;這種情況在布爾表達式包含"or"時尤甚,為了避免重復,你應該使用 select distinct 語句.
在本例中,W1 和 W2 都是表 weather 的別名,都具有weather表的所有記錄.在大多數數據庫術語里 W1 和 W2 被看作是范圍變量(range variables.) 一個查詢可以包含任意數量的表名和別名.

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

更新
你可以使用 update 命令更新現有記錄.例如你發現11月28日后所有溫度記都偏高2度,你可以用下面命令更新數據庫數據: 
UPDATE weather
    SET temp_hi = temp_hi - 2,  temp_lo = temp_lo - 2
    WHERE date > '11/28/1994';

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

刪除
使用 DELETE 命令刪除記錄: 
DELETE FROM weather WHERE city = 'Hayward';
所有屬于 Hayward 的天氣記錄都將被刪除.我們進行下面查詢操作時頭腦應該很清醒: 
DELETE FROM classname;
在不帶任何條件時,delete 將簡單地把指定表中的所有記錄都刪除掉,而且做這些之前系統將不給出任何提示!

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

使用聚集函數
與其他大多數查詢語言一樣, PostgreSQL 支持聚集函數。一個聚集函數從多個輸入行計算單一一個結果。例如,存在聚集函數對一個實例的集合進行 count(計數),sum(求和),avg(平均),max?。ㄗ畲螅?,和 min?。ㄗ钚。┑挠嬎??!?
理解聚集和 SQL 的 WHERE 和 HAVING 子句之間的相互作用是非常重要的。在 WHERE 和 HAVING 之間的基本差別是:WHERE 在分組和聚集計算之前選擇輸入行(因此,它控制哪一行進入聚集計算),而 HAVING 在分組和聚集計算之后選擇分組行。因此 WHERE 子句可能不包含聚集函數;因為試圖使用一個聚集來判斷那些行需要輸入到聚集函數中沒有什么意義。另一方面,HAVING 子句總是包含聚集函數。(嚴格的說,你允許寫一個不使用聚集的 HAVING 子句,不過是在浪費時間;相同的條件可以在 WHERE 階段更有效地使用。) 

例如,我們可以用下面語句找出最高的最低溫度 

SELECT max(temp_lo) FROM weather;
如我們想知道這個讀數是在哪個城市發生的,我們可以 
SELECT city FROM weather WHERE temp_lo = max(temp_lo);
不過這樣做是不行的,因為聚集 max() 不能在 WHERE 中使用。不過,正如經常見到的那樣,我們可以重新排列查詢以實現這樣的目標;下面是通過運用子查詢實現的方式: 
SELECT city FROM weather
    WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
這樣做是可以的,因為子查詢是一個獨立的計算,它計算出與外層 select 無關的自身的聚集?!?
聚集在和 group by 子句聯合使用時也是非常有用的。例如,我們可以用下面語句獲取在每個城市觀察到的最低溫度的最高值 

SELECT city, max(temp_lo)
    FROM weather
    GROUP BY city;
這個查詢為每個城市輸出一行。我們可以用  HAVING 過濾這些分組的行: 
SELECT city, max(temp_lo)
    FROM weather
    GROUP BY city
    HAVING min(temp_lo) < 0;
這個查詢只給出那些最低溫度有零下讀數的城市。最后,如果我們只關心以 "P" 開頭的城市,我們可以 
  
SELECT city, max(temp_lo)
    FROM weather
    WHERE city like 'P%'
    GROUP BY city
    HAVING min(temp_lo) < 0;
請注意我們可以在 WHERE 子句里面給出城市名稱的約束,因為這是不需要聚集的。這樣比在 HAVING 上加限制更有效,因為我們不必對未通過 WHERE 檢查的行進行分組和聚集計算。

--------------------------------------------------------------------------------
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产一区二区三区| 亚洲影院色无极综合| 国产综合在线看| 亚洲三级黄色在线观看| 成人精品在线视频| 日本国产精品视频| 日韩电影大片中文字幕| 亚洲欧美中文在线视频| 久久免费精品日本久久中文字幕| 亚洲视频axxx| 日韩欧美中文第一页| 亚洲第一福利网| 久久视频中文字幕| 成人黄色大片在线免费观看| 国产欧美婷婷中文| 欧美人在线视频| 精品日本高清在线播放| 中文字幕久热精品视频在线| 国产精品一区二区三区在线播放| 亚洲国产精品电影在线观看| 国产精品第10页| 日韩在线观看免费高清| 色综合色综合网色综合| 亚洲一区二区三区在线视频| 欧美超级乱淫片喷水| 亚洲va久久久噜噜噜久久天堂| 国产在线999| 久久九九亚洲综合| 国产mv免费观看入口亚洲| 欧美肥婆姓交大片| 97在线视频免费播放| 91精品国产乱码久久久久久久久| 亚洲精品久久在线| 久久亚洲精品中文字幕冲田杏梨| 日韩精品久久久久久久玫瑰园| 日韩美女在线观看一区| 国内精品久久久久影院优| 国产精品精品久久久| 色久欧美在线视频观看| 久久久久久中文字幕| 亚洲精品资源美女情侣酒店| 日韩av影视综合网| 亚洲免费影视第一页| 久热爱精品视频线路一| 欧美大学生性色视频| 欧美激情一区二区三区高清视频| 久久国产加勒比精品无码| 亚洲欧美制服第一页| 欧美猛交ⅹxxx乱大交视频| 国产精品96久久久久久又黄又硬| 亚洲国产古装精品网站| 成人激情视频在线播放| 亚洲欧美日韩一区二区三区在线| 久久精品亚洲国产| 成人一区二区电影| 国产日韩欧美中文在线播放| 91精品在线观看视频| 亚洲综合精品一区二区| 性色av一区二区三区在线观看| 国产精品第三页| 欧美黑人性猛交| 国产精品日韩欧美| 国产精品久久久久国产a级| 亚洲精品美女久久久久| 岛国av一区二区在线在线观看| 日韩成人在线电影网| 欧美电影免费观看大全| 国产美女91呻吟求| 神马久久桃色视频| 视频在线观看一区二区| 国产日韩欧美视频| 欧美一级bbbbb性bbbb喷潮片| 国产精品视频中文字幕91| 欧美综合国产精品久久丁香| 亚洲精品日产aⅴ| 国产精品一区二区三区毛片淫片| 91国内揄拍国内精品对白| 亚洲欧美福利视频| 欧洲亚洲在线视频| 国产一区二区三区欧美| 欧美激情第1页| 久久久久久com| 色婷婷综合成人| 国产极品精品在线观看| 69久久夜色精品国产7777| 欧美美女操人视频| 日韩成人av在线| 97成人精品视频在线观看| 国产日韩欧美在线| 精品中文字幕在线2019| 深夜精品寂寞黄网站在线观看| 欧美在线观看网站| 美女国内精品自产拍在线播放| 国产精品久久久| 国产精品www| 亚洲日本成人网| 国精产品一区一区三区有限在线| 日韩精品亚洲视频| 国产精品美女999| 欧美理论片在线观看| 中文字幕日韩视频| 国模精品视频一区二区三区| 欧美成人国产va精品日本一级| 亚洲国产精品久久久久秋霞不卡| 中文字幕欧美国内| 中文字幕亚洲综合久久筱田步美| 视频在线观看一区二区| 国产精品久久二区| 97在线视频免费播放| 91香蕉电影院| www.亚洲天堂| 精品女同一区二区三区在线播放| 久久久久久久一区二区三区| 国产精品亚洲激情| 中文字幕亚洲第一| 最新91在线视频| 91在线看www| 欧美性视频精品| 国产97色在线|日韩| 日韩欧美在线视频日韩欧美在线视频| 红桃视频成人在线观看| 国产精品都在这里| 91人人爽人人爽人人精88v| 亚洲国产高潮在线观看| 色老头一区二区三区在线观看| 亚洲自拍小视频免费观看| 亚洲国内高清视频| 成人有码在线播放| 久久久久久久久久久免费精品| 国产精品丝袜久久久久久高清| 精品久久久国产精品999| 青青精品视频播放| 九九热这里只有在线精品视| 欧美大片免费观看在线观看网站推荐| 欧美国产日韩在线| 黄色精品在线看| 国产综合福利在线| 在线播放精品一区二区三区| www欧美xxxx| 尤物九九久久国产精品的特点| 欧美极品少妇xxxxⅹ喷水| 日韩高清av一区二区三区| 欧美亚洲另类在线| 国产精品视频午夜| 欧美又大又粗又长| 国产欧美精品xxxx另类| 欧美成人在线影院| 伦理中文字幕亚洲| 国产精品久久久久av免费| 国产成人福利夜色影视| 欧美一级视频一区二区| 国产偷亚洲偷欧美偷精品| 欧美激情视频一区| 国产欧美精品xxxx另类| 国产午夜精品理论片a级探花| 国产成人精品久久| 亚洲精品福利在线| 亚洲国产精品久久久久秋霞不卡| 亚洲夜晚福利在线观看| 久久久亚洲影院| 久久夜色精品国产欧美乱| 久久99久久亚洲国产| 国产精品99免视看9| 国产精品都在这里|