DML – PostgreSQLではじめるDB入門 http://db-study.com DBの基礎から設計の考え方、実践で役立つ知識などを図解を用いてわかりやすく解説しています。さらにPostgreSQLによりサンプルを交えながらSQLを使いこなすために必要な知識をまとめています。 Sun, 04 Feb 2018 05:24:53 +0000 ja hourly 1 https://wordpress.org/?v=4.9.3 データの削除(DELETE) http://db-study.com/archives/252 http://db-study.com/archives/252#respond Fri, 03 Jun 2016 21:22:25 +0000 http://db-study.com/?p=252 INSERTコマンドで登録したデータを削除するにはDELETEコマンドを使用します。

DELETEコマンド

DELETEコマンドにより、テーブルのデータを削除することができます。基本的な構文は以下になります。

DELETEコマンドの基本構文
DELETE FROM テーブル名 WHERE 条件式;

DELETEコマンドで削除するのは行(レコード)単位です。例えば、一部の列だけを削除すると言ったことはできません。

では、実際にDELETEコマンドを発行してデータを削除してみましょう。

testdb=# DELETE FROM Staff WHERE id='0002';

WHERE句で削除する対象の行を指定します。上記例では、id列が「0002」の行を削除しています。

では、id列「0002」の行が削除されているかどうか、SELECTコマンドで確認してみます。

testdb=# SELECT * FROM Staff;
  id  |    name    | age
------+------------+-----
 0001 | 山田太郎   |  46
 0003 | 斉藤達弘   |  46
 0004 | 桜井さつき |  46
(3 行)

対象行は存在せず、正しく削除されていることが確認できます。

全行を削除する

UPDATEコマンドと同じく、WHERE句の指定がないとテーブル内の全ての行が削除されます。

例えば、以下のDELETEコマンドを発行してみましょう。

testdb=# DELETE FROM Staff;

上記コマンド発行後、SELECTコマンドでデータを確認すると、データが1件も登録されていないことがわかります。

testdb=# SELECT * FROM Staff;
 id | name | age
----+------+-----
(0 行)

意図して、全行削除する場合は良いですが、WHERE句の記述を忘れて誤って全てのデータを削除してしまったということにならないよう十分に注意しましょう。本番稼働中のシステムでこのようなミスをしてしまっては目も当てられません。

UPDATEやDELETEコマンドはある意味、危険なコマンドであるということを念頭に置いておくことが大切です。

]]>
http://db-study.com/archives/252/feed 0
データの更新(UPDATE) http://db-study.com/archives/249 http://db-study.com/archives/249#respond Fri, 03 Jun 2016 11:52:09 +0000 http://db-study.com/?p=249 INSERTコマンドで登録したデータを変更(更新)するにはUPDATEコマンドを使用します。

UPDATEコマンド

UPDATEコマンドにより、テーブルのデータを変更することができます。基本的な構文は以下になります。

UPDATEコマンドの基本構文
UPDATE テーブル名 SET 列名 = 式 WHERE 条件式;

更新対象の列と、更新後の値は、SET句で指定します。また、更新対象の行はWHERE句で指定します。

例えば、渡辺さんが結婚して苗字が「桜井」に変わったとします。その場合は、以下のようなUPDATEコマンドを発行して、渡辺さんの名前を変更します。

testdb=# UPDATE Staff SET name = '桜井さつき' WHERE id='0004';

次に、name列が正しく変更されたかどうかSELECTコマンドで確認してみます。

testdb=# SELECT * FROM Staff;
  id  |    name    | age
------+------------+-----
 0001 | 山田太郎   |  26
 0002 | 佐藤隆     |  34
 0003 | 斉藤達弘   |  45
 0004 | 桜井さつき |  28
(4 行)

正しく変更されているのが確認できます。

全行を更新する

更新対象の行を指定するのはWHERE句ですが、WHERE句を記述しないことで、全行を更新対象とすることになります。

例えば、以下のUPDATEコマンドを発行してみましょう。

testdb=# UPDATE Staff SET age = 46;

変更後、全行をSELECTコマンドで確認すると以下のような結果になります。

testdb=# SELECT * FROM Staff;
  id  |    name    | age
------+------------+-----
 0001 | 山田太郎   |  46
 0002 | 佐藤隆     |  46
 0003 | 斉藤達弘   |  46
 0004 | 桜井さつき |  46
(4 行)

すべての行のage列が更新されています。基本的に、全行に対して同じ値で更新するようなケースはめずらしく、大抵がWHERE句の記述を忘れたなどの操作ミスにより、誤って更新してしまったというパターンとなるでしょう。

WHERE句を指定しないとテーブル内のすべての行のデータが更新されてしまうという点に十分注意しておきましょう。

]]>
http://db-study.com/archives/249/feed 0
データの検索(SELECT) http://db-study.com/archives/243 http://db-study.com/archives/243#respond Fri, 03 Jun 2016 11:44:53 +0000 http://db-study.com/?p=243 テーブルに格納されているデータを検索するにはSELECTコマンドを使用します。データベースを使用する最大のメリットは大量のデータの中から対象のデータを瞬時に検索できる点です。そのため、検索に使用するSELECTコマンドはSQLの中で最もよく使われるコマンドです。SELECT文をマスターすることはSQLをマスターすることにつながるといっても過言ではないでしょう。

SELECTコマンド

SELECTコマンドで必要なデータを検索し、取り出すことができます。また、そのことを「問い合わせ」あるいは「クエリ(query)」と呼ぶこともあります。

SELECTコマンドは構文が数多くあり、かなり複雑です。ここでは基本的な構文のみ見ていきます。

SELECTコマンドの基本構文
SELECT 列名, … FROM テーブル名;

SELECTコマンドには、SELECT句とFROM句という2つの句があります。
※句はSQL文を構成する要素であり、SELECTやFROMなどのキーワードから始まるフレーズのことです。

SELECT句には、テーブルから取り出したい列名を書き並べます。また、FROM句には、データを取り出すテーブル名を指定します。

では早速、Staffテーブルから前回登録したデータを取り出してみましょう。

testdb=# SELECT name FROM Staff;
    name
------------
 山田太郎
 佐藤隆
 斉藤達弘
 渡辺さつき
(4 行)

上記のように、全ての行のname列が表示されます。

すべての列を表示する

上記サンプルでは、出力したい列名を指定していましたが、すべての列を出力したいときには、すべての列を意味するアスタリスク(*)を使用できます。

testdb=# SELECT * FROM Staff;
  id  |    name    | age
------+------------+-----
 0001 | 山田太郎   |  26
 0002 | 佐藤隆     |  34
 0003 | 斉藤達弘   |  45
 0004 | 渡辺さつき |  28
(4 行)

上記のように、全ての行の全ての列が表示されます。
アスタリスクを使用した場合の注意点として、結果の列の並びを指定することはできなくなります。必ず、CREATE TABLEコマンドで定義した列の順番で表示されます。

]]>
http://db-study.com/archives/243/feed 0
データの挿入(INSERT) http://db-study.com/archives/238 http://db-study.com/archives/238#respond Thu, 02 Jun 2016 11:29:24 +0000 http://db-study.com/?p=238 前回作成したStaffテーブルへデータを登録していきます。

まず、Staffテーブルの定義を確認しましょう。Staffテーブルは以下の列を持ちます。

列名 データ型 制約
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER なし

INSERTコマンド

テーブルへのデータ登録はINSERTコマンドで行います。

INSERTコマンドの基本構文
INSERT INTO テーブル名 [(列名1 [, 列名2 …] )] VALUES (値1 [, 値2 …] );

列名1に値1、列名2に値2がセットされます。列と値の数は一致させる必要があり、不一致の場合はエラーとなり挿入に失敗します。また、データ型も一致させる必要があります。例えば、INTEGER型の列に文字列をセットしようとしてもエラーとなります。

列名を省略することもできます。ただし、省略すると、VALUES句にはテーブルの全ての列にセットする値を指定してやる必要があります。

では、実際にINSERTコマンドを発行してデータを登録してみましょう。

testdb=# INSERT INTO Staff (id, name, age) VALUES ('0001', '山田太郎', 26);
testdb=# INSERT INTO Staff (id, name, age) VALUES ('0002', '佐藤隆', 34);
testdb=# INSERT INTO Staff (id, name, age) VALUES ('0003', '斉藤達弘', 45);

列名を省略した場合は以下のように記述します。

testdb=# INSERT INTO Staff VALUES ('0004', '渡辺さつき', 28);

VALUES句内に指定する値の順序は、テーブルの定義時に指定した列の順序で指定します。データ登録時に、全ての列にデータをセットする必要がある場合は、このように省略しても構いません。

]]>
http://db-study.com/archives/238/feed 0
SQL概要 http://db-study.com/archives/218 http://db-study.com/archives/218#respond Sat, 28 May 2016 09:43:49 +0000 http://db-study.com/?p=218 SQL(Structured Query Language)はデータベースを操作するための言語です。

PostgreSQLを含む、ほとんどのRDBMSがSQLをサポートしており、アプリケーションからデータベースを利用する場合にはSQLを使用してデータベースに対して各種問い合わせを行うことになります。

SQLでできることのほとんどはpgAdminによるGUIからでも操作できますが、アプリケーションからデータベースにアクセスする場合には、GUIで操作というわけにはいきません。

そのため、PostgreSQLに限らず、データベースを利用するアプリケーションを開発する上で、SQLの習得は必須であり、避けては通れないものです。

SQLとは

SQL(Structured Query Language)はデータベース(正確にはリレーショナルデータベース)を操作するために開発された言語です。
もともと、データベースから効率良くデータを検索することを目的としたものでしたが、現在ではデータ検索だけでなく、データの登録や削除といったデータベース操作のほとんどをSQLで行うことができます。

SQLにはISO(国際標準化機構)で定められた標準規格があり、それに準拠したSQLを標準SQLと言います。

このように標準規格を定めることで、さまざまにあるRDBMSで同じSQL文を使うことができます。
ただし、標準SQLに完全に準拠したRDBMSばかりではなく、RDBMSごとにいわゆる「方言」のようなものが存在します。(例えば、Oracleデータベースで使用できるSQL文がSQL Serverでは使用できないなど。)

とは言うものの、標準SQLを覚えれば、大抵のデータベース操作が可能なため、まず、標準SQLでの書き方を覚えていくのが良いでしょう。

SQLの分類

SQLは機能により、大きく次の3つに分類されます。

DDL(Data Definition Language)

DDL(データ定義言語)は、テーブルなどのオブジェクトを作成するためのコマンド群です。DDLに分類されるコマンドは以下になります。

CREATE データベースやテーブルなどを作成する。
DROP データベースやテーブルなどを削除する。
ALTER データベースやテーブルなどの構成を変更する。

DML(Data Manipulation Language)

DML(データ操作言語)は、データの挿入/更新/削除などを行うためのコマンド群です。DMLに分類されるコマンドは以下になります。

SELECT テーブルから行を検索する。
INSERT テーブルに新規行を登録する。
UPDATE テーブルの行を更新する。
DELETE テーブルの行を削除する。

DCL(Data Control Language)

DCL(データ制御言語)は、トランザクション関連のコマンドが含まれます。DCLに分類されるコマンドは以下になります。

COMMIT データベースに対して行った変更を確定する。
ROLLBACK データベースに対して行った変更を取り消す。
GRANT ユーザーに操作の権限を与える。
REVOKE ユーザーから操作の権限を奪う。

このように、SQLは機能により3つの種類に分けられます。そのうち、最もよく使われるのがDML(データ操作言語)になります。

]]>
http://db-study.com/archives/218/feed 0