第2章の動作確認

サイト: LinuC Open Network
コース: 井上先生用コース
ブック: 第2章の動作確認
印刷者: ゲストユーザ
日付: 2024年 09月 17日(火曜日) 05:02

説明

psqlでossdbにログインして、基本的なSQL文を確認します。
なお、解説の2.1 リレーショナルデータベースとSQLに対応する節はありません。

2.2 表の定義と削除

以下を確認します。

  • CREATE TABLE文で表を定義する
  • DROP TABLE文で表を削除する

CREATE TABLE文(表の定義)

[admin@host1 ~]$ sudo -iu postgres
[sudo] admin のパスワード: ※adminユーザのパスワードを入力
[postgres@host1 ~]$ psql ossdb ※postgresユーザでossdbに接続
psql (13.14)
"help"でヘルプを表示します。

ossdb=# CREATE TABLE employee ( --CREATE TABLE文
    id INTEGER UNIQUE,
    name TEXT,
    section TEXT,
    birth DATE);
CREATE TABLE
ossdb=# \d ※ossdbにemployee表が作成できたことを確認
             リレーション一覧
 スキーマ |   名前   |  タイプ  |  所有者
----------+----------+----------+----------
 public   | employee | テーブル | postgres
(1 行)

ossdb=# \d employee ※employee表の列構成を確認
                 テーブル"public.employee"
   列    | タイプ  | 照合順序 | Null 値を許容 | デフォルト
---------+---------+----------+---------------+------------
 id      | integer |          |               |
 name    | text    |          |               |
 section | text    |          |               |
 birth   | date    |          |               |
インデックス:
    "employee_pkey" PRIMARY KEY, btree (id)

ossdb=#

CREATE TABLE文で作成したemployee表に、id, name, section, birth の4列が存在し、それぞれのタイプ(データ型)が integer, text, text, date であることを確認してください。

DROP TABLE文(表の削除)

ossdb=# DROP TABLE employee; --DROP TABLE文
DROP TABLE
ossdb=# \d employee
"employee"という名前のリレーションは見つかりませんでした。
ossdb=# CREATE TABLE employee ( --CREATE TABLE文を再度入力
    id INTEGER PRIMARY KEY,
    name TEXT,
    section TEXT,
    birth DATE);
CREATE TABLE
ossdb=# \d
             リレーション一覧
 スキーマ |   名前   |  タイプ  |  所有者
----------+----------+----------+----------
 public   | employee | テーブル | postgres
(1 行)

ossdb=#

DROP TABLE文でemployee表が削除されたことを確認してください。次の節でemployee表を使用するので、CREATE TABLE文で再度employee表を作成しておきます。

2.3 データの⼊⼒、検索、更新、削除

以下を確認します。

  • INSERT文で表にデータを追加する
  • SELECT文で表のデータを検索する
  • UPDATE文で表のデータを更新する
  • DELETE文で表のデータを削除する

INSERT文(データの追加)

ossdb=# INSERT INTO employee VALUES --INSERT文
(1, '佐藤未来', '総務部', '1960-07-08');
INSERT 0 1
ossdb=# INSERT INTO employee(id, name, section, birth) VALUES --INSERT文
    (2, '鈴木薫', '技術本部', '1970-05-05'),
    (3, '高橋光', '営業本部', '1980-03-02'),
    (4, '田中飛鳥', '技術本部', '1985-01-29'),
    (5, '伊藤歩', '営業本部', '1985-11-26'),
    (6, '渡辺碧', '技術本部', '1987-09-23'),
    (7, '山本涼', '営業本部', '1989-07-20'),
    (8, '中村薫', '総務部', '1990-05-17'),
    (9, '小林瑞樹', '技術本部', '1991-03-14');
INSERT 0 8
ossdb=# INSERT INTO employee VALUES --INSERT文
    (1, '佐藤未来', '総務部', '1960-07-08');
ERROR:  重複したキー値は一意性制約"employee_pkey"違反となります
DETAIL:  キー (id)=(1) はすでに存在します。

ossdb=#

最初のINSERT文でid列の値が1の行を、次のINSERT文でid列の値が2から9までの8行をemployee表に追加しています。INSERT文の実行結果に表示される 'INSERT 0 n' の数字 n は追加した行数を表します。なお、追加したデータは次のSELECT文で確認します。

最後のINSERT文は重複した行を追加しようとしているため、エラーとなっています。

SELECT文(データの検索)

ossdb=# SELECT * FROM employee; --SELECT文
 id |   name   | section  |   birth
----+----------+----------+------------
  1 | 佐藤未来 | 総務部   | 1960-07-08
  2 | 鈴木薫   | 技術本部 | 1970-05-05
  3 | 高橋光   | 営業本部 | 1980-03-02
  4 | 田中飛鳥 | 技術本部 | 1985-01-29
  5 | 伊藤歩   | 営業本部 | 1985-11-26
  6 | 渡辺碧   | 技術本部 | 1987-09-23
  7 | 山本涼   | 営業本部 | 1989-07-20
  8 | 中村薫   | 総務部   | 1990-05-17
  9 | 小林瑞樹 | 技術本部 | 1991-03-14
(9 行)

ossdb=# SELECT name, section --SELECT文
    FROM employee
    WHERE id = 1;
   name   | section
----------+---------
 佐藤未来 | 総務部
(1 行)

ossdb=# SELECT id, name, birth --SELECT文
    FROM employee
    WHERE section = '技術本部';
 id |   name   |   birth
----+----------+------------
  2 | 鈴木薫   | 1970-05-05
  4 | 田中飛鳥 | 1985-01-29
  6 | 渡辺碧   | 1987-09-23
  9 | 小林瑞樹 | 1991-03-14
(4 行)

ossdb=# SELECT id, name, birth --SELECT文(AND条件)
    FROM employee
    WHERE section = '技術本部' AND id <= 5;
 id |   name   |   birth
----+----------+------------
  2 | 鈴木薫   | 1970-05-05
  4 | 田中飛鳥 | 1985-01-29
(2 行)

ossdb=# SELECT id, name, birth --SELECT文(OR条件)
    FROM employee
    WHERE section = '技術本部' OR id <= 5;
 id |   name   |   birth
----+----------+------------
  1 | 佐藤未来 | 1960-07-08
  2 | 鈴木薫   | 1970-05-05
  3 | 高橋光   | 1980-03-02
  4 | 田中飛鳥 | 1985-01-29
  5 | 伊藤歩   | 1985-11-26
  6 | 渡辺碧   | 1987-09-23
  9 | 小林瑞樹 | 1991-03-14
(7 行)

ossdb=#

最初のSELECT文は、employee表のすべてのデータ(全行全列)を表示しています。次のSELECT文はid列の値が1の行を、3番目のSELECT文はsection列の値が技術本部の4行を出力しています。

最後の2つのSELECT文は、それぞれ3番目のSELECT文にAND条件とOR条件を追加することにより、検索結果を絞り込んだり拡張したりしています。

UPDATE文(データの更新)

ossdb=# UPDATE employee --UPDATE文
    SET section = '営業統括部'
    WHERE section = '営業本部';
UPDATE 3
ossdb=# SELECT * FROM employee;
 id |   name   |  section   |   birth
----+----------+------------+------------
  1 | 佐藤未来 | 総務部     | 1960-07-08
  2 | 鈴木薫   | 技術本部   | 1970-05-05
  4 | 田中飛鳥 | 技術本部   | 1985-01-29
  6 | 渡辺碧   | 技術本部   | 1987-09-23
  8 | 中村薫   | 総務部     | 1990-05-17
  9 | 小林瑞樹 | 技術本部   | 1991-03-14
  3 | 高橋光   | 営業統括部 | 1980-03-02
  5 | 伊藤歩   | 営業統括部 | 1985-11-26
  7 | 山本涼   | 営業統括部 | 1989-07-20
(9 行)

ossdb=# UPDATE employee --UPDATE文
    SET name = '加藤薫', birth = '1990-05-24'
    WHERE id = 8;
UPDATE 1
ossdb=# SELECT * FROM employee WHERE id = 8;
 id |  name  | section |   birth
----+--------+---------+------------
  8 | 加藤薫 | 総務部  | 1990-05-24
(1 行)

ossdb=#

最初のUPDATE文は、employee表のsection列の値が営業本部の3行について、section列の値を営業統括部に変更しています。次のUPDATE文は、id列の値が8の行のname列とbirth列の両方を変更しています。UPDATE文の実行結果に表示される 'UPDATE n' の数字 n は変更した行数を表します。

DELETE文(データの削除)

ossdb=# DELETE --DELETE文
    FROM employee
    WHERE id = 8;
DELETE 1
ossdb=# SELECT * FROM employee;
 id |   name   |  section   |   birth
----+----------+------------+------------
  1 | 佐藤未来 | 総務部     | 1960-07-08
  2 | 鈴木薫   | 技術本部   | 1970-05-05
  4 | 田中飛鳥 | 技術本部   | 1985-01-29
  6 | 渡辺碧   | 技術本部   | 1987-09-23
  9 | 小林瑞樹 | 技術本部   | 1991-03-14
  3 | 高橋光   | 営業統括部 | 1980-03-02
  5 | 伊藤歩   | 営業統括部 | 1985-11-26
  7 | 山本涼   | 営業統括部 | 1989-07-20
(8 行)

ossdb=# DELETE FROM employee; --DELETE文
DELETE 8
ossdb=# SELECT * FROM employee;
 id | name | section | birth
----+------+---------+-------
(0 行)

ossdb=#

最初のDELETE文は、employee表のid列の値が8の行を削除しています。次のUPDATE文は、残っているすべての行を削除しています。DELETE文の実行結果に表示される 'DELETE n' の数字 n は削除した行数を表します。