line-01
line_glay
>
 Welcome!  page:rdbms/postgres/sql.html
 odic.ne.jp library SQL(Structured Query Language)言語
 by:大阪演劇情報センター+未知座小劇場 更新日:
 home:topへ  server library:top へ
top
line_glay

SQL(Structured Query Language)言語

SQLの使い方としての「データ操作」と「データ管理

SQLが独立してあるわけではない。SQLが問い合わせ言語である以上、問いあわせ先のデータベースがなくてはならない。ここではPostgreSQLを想定しているが、 このほかMySQLやOracleなどが知られている。
SQL言語の利用者にとってリレーショナルデータベースは、二次元の「表(テーブル)」の集まりとして理解される。「表(テーブル)」には二種類ある。 ディスク上に書き込まれた物理的に存在する実表、と仮装の表であるビュー表。またこの「表(テーブル)」とは「順づけられていない表の集まり」を意味する。 この「集まり」で「互いに異なる対象の順序づけられていない集まり」を集合という。なお、個別特定表のなかに、同じ行があってはならない。
SQL言語はこのようなデーターベースに対してアクセスし、対話を行う。
SQLコマンドには大文字と小文字の区別はない。
【注】このページは『全文検索・データベースWebの作り方』(刊/ソシム)、『SQLデータベース構築入門』(刊/主婦の友社)などによった。

データー操作 SELEKT・INSERT・UPDATE・DELETE

データベースは検索、登録、更新、削除と大別した操作がある。これらの操作はDML(Data Manipulation Language)とよばれる。残るのはバックアップと残骸の初期化。
さてプロセスの話である。データベースを操作するにはまず、問い合わせなければならない。もちろんテーブルがあり、データが入力され、データベースができあがっているのが前提であるが。そこでの問い合わせである。問い合わせてなにをするか。表からの必要な行の「選択」である。選択した結果、架空の表が捏造される。これを「導出表」という。問い合わせをすることで、選択から導出表という結果が得られる。なお、選択から導出表へのプロセスを射影という。

選択→射影→導出表

この操作(manipulation)がデータ操作ということになるが、SQLはどのような方法で行うのかが、以下になる。
例えでデータベースには以下のデータがあるとしよう。テーブル名は公演記録。

公演記録
番号氏名公演名入場料劇場名年齢職業
001河野太郎冬の空700国立文楽劇場25大工
002河野太郎春の風900未知座小劇場25大工
003河野次郎春の風900未知座小劇場18学生
004河野三郎秋の月1000歌舞伎座21プータロー


[ SELEKT ]文

データーベース内の表から、希望したデータを抽出するのに使うのがSELEKT文。

  1. 全データの表示問い合わせ式 すべて同等で表示
    SELEKT 番号,氏名,公演名,入場料,劇場名,年齢,職業
            FROME 公演記録

  2. 列タイトル入れ替え問い合わせ式 並べ替えての表示される
    SELEKT 番号,氏名,劇場名,年齢,職業,公演名,入場料
            FROME 公演記録

  3. 比較演算子での条件指定問い合わせ式 番号003が選択される
    SELEKT 番号,入場料
            FROME 公演記録
            WHERE 入場料>1000

  4. BETWEEN述語で条件指定問い合わせ式 番号001が表示される
    SELEKT *
            FROME 公演記録
            WHERE 入場料>600
            WHERE 入場料<800

  5. 重複をのぞく問い合わせ式 河野太郎、河野太郎、河野太郎の三名が表示される
    SELEKT DISTINCT 氏名
            FROME 公演記録


[ INSERT ]文

指定した表に新しい行を追加で使うのがINSERT文

1, 公演記録に新しい行を追加し、各列へのデータ登録
INSERT INTO 公演記録
       VALUES ('005','河野四郎','夏の海',1200,'福岡ドーム',30,'俳優')

公演記録
番号氏名公演名入場料劇場名年齢職業
001河野太郎冬の空700国立文楽劇場25大工
002河野太郎春の風900未知座小劇場25大工
003河野次郎春の風900未知座小劇場18学生
004河野三郎秋の月1000歌舞伎座21プータロー
005河野四郎夏の海1200福岡ドーム30俳優

【注】列名を指定しないと表の左から順に入る。なお、値が未定の場合「NULL」を使う。

2, 問い合わせ指定を使った複数行の挿入

INSERT INTO 劇場一覧
       VALUES *
       VALUES 公演記録
       VALUES 劇場='未知座小劇場'

劇場一覧
番号氏名公演名入場料劇場名年齢職業
002河野太郎春の風900未知座小劇場25大工
003河野次郎春の風900未知座小劇場18学生

【注】公演記録表から「未知座小劇場」を取り出し、劇場一覧表に挿入。


[ UPDATE ]文

データの更新に使うのがUPDATE文

1, すべての情報を更新
UPDATE 公演記録
    SET 入場料=入場料+10

公演記録
番号氏名公演名入場料劇場名年齢職業
001河野太郎冬の空710国立文楽劇場25大工
002河野太郎春の風910未知座小劇場25大工
003河野次郎春の風910未知座小劇場18学生
004河野三郎秋の月1010歌舞伎座21プータロー
005河野四郎夏の海1210福岡ドーム30俳優


2, 特定の列の値を更新 WHERE句の利用
UPDATE 公演記録
       SET 入場料=入場料+10
       WHERE 公演名='秋の風'

公演記録
番号氏名公演名入場料劇場名年齢職業
001河野太郎冬の空710国立文楽劇場25大工
002河野太郎春の風910未知座小劇場25大工
003河野次郎春の風910未知座小劇場18学生
004河野三郎秋の月1020歌舞伎座21プータロー
005河野四郎夏の海1210福岡ドーム30俳優





[ DELETE ]文

データの削除がDELETE文

1, すべての情報を削除
DELETE FROM 公演記録

公演記録
番号氏名公演名入場料劇場名年齢職業


2, 指定した条件行の削除
DELETE FROM 公演記録
       WHERE 入場料=単価<=1000

公演記録
番号氏名公演名入場料劇場名年齢職業
004河野三郎秋の月1020歌舞伎座21プータロー
005河野四郎夏の海1210福岡ドーム30俳優





データー管理

データの格納で、どのような表にどうまとめるか、アクセス権は?といったデータ定義機能をDDL(Data Definition Language)という。
まず以下のテーブルをつくろう。テーブル名は上演。

1, 実表をつくる 「上演」をデーター型の指定ととも定義
CREATE TABLE 上演
          (番号 CHAR(3),
          著者 NCHAR(10),
          タイトル NCHAR(16),
          上演日 CHAR(8),
          公演場所 NCHAR(16),
          上演団体 NCHAR(16),
          開演 NCHAR(5),
          入場料 CHAR(4))

上演
番号著者タイトル上演日公演場所上演団体開演入場料
001闇黒光天の朝20010910未知座小劇場大阪演劇情報センター18:301000
002河野太郎地の夜20011025扇町公園文化庁19:002500

【注】CHAR・文字列型の指定、NCHAR・2バイトの文字列を指定、DEC・真数型を指定

2, 実表で既定値(DEFAULT)を含む「上演」の定義
CREATE TABLE 戯曲
          (番号 CHAR(3),
          著者 NCHAR(10),
          タイトル NCHAR(16),
          上演日 CHAR(8) DEFAULT NULL,
          公演場所 NCHAR(16) DEFAULT 'A1',
          上演団体 NCHAR(16),
          開演 NCHAR(5),
          入場料 CHAR(4))

上演
番号著者タイトル上演日公演場所上演団体開演入場料
001闇黒光天の朝A1大阪演劇情報センター18:301000
002河野太郎地の夜A1文化庁19:002500

【注】上演日が未定なのでMULLで空白、公演場所指定なしはA1

3, ビュー表をつくる
CREATE VIEW 著者
      As SELECT * FROM 上演
      WHERE 著者=闇黒光

著者
番号著者タイトル上演日公演場所上演団体開演入場料
001闇黒光天の朝20010910未知座小劇場大阪演劇情報センター18:301000

【注】確かビュー表のことを、MS Accessではクエリだったと思う?

4, 条件を指定したビュー表
CREATE VIEW 会場
     (公演場所、入場料)
      As SELECT 公演場所,入場料 FROM 上演
      WHERE 公演場所='扇町公園'
      AND 入場料=>2000

会場
公演場所入場料
扇町公園2500


5, DROP 実表の削除
DROP TABLE 上演

6, DROP ビュー表の削除
DROP VIEW 会場

7, データベースへの権限 GRANT ALL 特定ユーザ
GRANT ALL PRIVILEGES ON 上演 TO akira

【注】表・上演へユーザakiraは、すべての権限を持った。

8, データベースへの権限 GRANT ALL すべてのユーザ
GRANT ALL PRIVILEGES ON 上演 TO PUBLIC

【注】表・上演へすべてのユーザは、すべての権限を持った。

9, データベースへの権限の条件付与 GRANT INSERT 特定ユーザ
GRANT INSERT ON 上演 TO akira

【注】表・上演へユーザakiraは、行の追加ができる。

10, データベースへの権限の条件付与 GRANT UPDATE 特定ユーザ
GRANT UPDATE ON 上演 TO akira

【注】表・上演へユーザakiraは、更新ができる。

11, データベースへの権限の条件付与 GRANT UPDATE 特定ユーザ
GRANT UPDATE(??1,列2) ON 上演 TO akira

【注】表・上演へユーザakiraは、列1と列2の更新ができる。

12, データベースへの権限の条件付与 GRANT 特定ユーザ
GRANT ALL PRIVILEGES ON 上演 TO akira WITH GRANT OPTION

【注】表・上演へのユーザakiraの権限は、他のユーザに与えることができる。

13, データベースへの権限の削除 REVOKE
REBOKE INSERT ON 上演 FROM akira

【注】表・上演へのユーザakiraに与えられた更新権限を削除。



  topへ  home:topへ  server library:topへ   PHP PostgreSQL MySQL サンプルスクリプト