第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 は削除した行数を表します。