SQLトレーニングコースの一部であるSQLチュートリアルのレッスン9「データの操作」へようこそ。 このレッスンでは、SQLのINSERT文、UPDATE文、DELETE文について説明します。
目的
このレッスンが終わるころには、以下のことができるようになります。
-
INSERT文とその使用方法を説明できる
-
UPDATEクエリを例を使って説明できる
-
DELETE文を例を使って説明できる
INSERT文
INSERT文はいわゆるSQLの3文に属している一つである。SQLの「データ操作言語」と呼ばれる部分、つまり、INSERTです。 UPDATE、DELETEです。
この3つの文はすべて、データベース内のデータを変更することができ、構造を変更するのではなく、内容を変更することができます。 これらは、データベースからデータを読み取ることしかできないSELECT文とは異なります。
そこで、INSERT文では、データベースのテーブルに新しいレコードを追加することができます。 一般的には、テーブルの末尾にレコードを追加するために使用されます。 INSERT を行うたびに重要なことは、データがデータベース内のすべてのルールを満たす必要があるということです。
以下の画像を考えてみましょう。 ここには、主キーがあります。 このデータベースの主キーは、SQL であらかじめ自動インクリメントに設定されています。
主キーを自分で挿入することはなく、データベースに任せています。 それから、firstname と lastname があり、これらは NOT NULL フラグを持っています。 実線の菱形は、これらのフィールドが必須であることを示し、スキップできません。
最後に、タイムスタンプです。これは NOT NULL ですが、同時に、デフォルト値は現在のタイムスタンプになります。
別のテーブルにレコードを挿入する必要がある場合、そのデータが実際に存在することを確認する必要があります。
Person テーブルを出発点として再び使用してみましょう。
以下に示す例を考えてみましょう。
select * from person
insert into person
values (7, ‘Martin’, ‘Holzke’, ‘1980-05-05’, ‘xxx’, now());
一度に一つのテーブルにのみ挿入できるのですが、この場合、一つのテーブルの中に、複数の値を挿入することができます。 SELECT関数を使ってデータを結合することはできますが、伝統的に言えば、一度に一つのテーブルに対してデータ操作を行うことができます。
上記の例で考えたのは、「暗黙的な挿入」です。 これは、入力する列について言及していないことを意味し、テーブルが存在する順序とまったく同じ順序ですべてを入れる必要があります。
挿入は、新しい値をテーブル列に自動的に合わせます。
注意:挿入、更新、削除ステートメントについて、データベースには取り消しボタンがないことを念頭に置いておく必要があります。 そのため、一度送った値はデータベースに保存されます。
暗黙の挿入について学んでいるため、各列の値を指定する必要があります。
さて、上記のコードを実行すると、テーブルが更新され、挿入されたレコードが位置7に表示されていることがわかります。
また、SELECT文とは対照的に、insert文は何も返しません。 これが、その後画面が真っ白になる理由です。
Next.Let’s see the explicit version, which is highly recommended to use the use.
select * from person
insert into person (firstname, lastname, managerid, dob)
values (‘Martin’, ‘Holzke’, 5, ‘1980-05-05’);
上の例で、我々はテーブルの4値を挙げただけである。 残りは、デフォルトで入力されます。
主キーの値が 8 ではなく 9 になったのは、この値がデータベース内のある時点ですでに使用されていたからです。
次に、複数の挿入を行うために、異なる値を使用して、上記のクエリを何度も何度も実行することができます。 カンマで区切られた新しい値のセットを追加します。
select * from person
insert into person (firstname, lastname, managerid, dob)
values (‘Martin’, ‘Holzke’, 5, ‘1980-05-05’),
(‘Fred’, ‘Flintstone’, 5, ‘1987-06-02’);
複数回の挿入を行った場合の更新されたテーブルのイメージは次のとおりです。
次に、同じテーブルからデータを選択して挿入を行いたいので、データをコピーすることができ、データベースにデータを入力するのに非常に便利であることがわかります。 たとえば、データ移行では、実際にデータベース内または異なるデータベース/テーブル間でデータをコピーします。
次のコードは、データをコピーする方法を示しています。
select * from person
insert into person (firstname, lastname, managerid, dob)
select concat(‘copy of’, firstname), lastname.Person (firstname, lastname), dob, managerid, dob
from person
where id>=10
select文だけを実行したときのテーブルの値は次の画像のとおりです。
ここで、insert文と一緒にクエリーを実行します。
次の画像は、上記のクエリを実行した後、テーブルがどのように変更されたかを示しています。
したがって、我々は、挿入文を使用して値をコピーすることは、データベースを移入する方法を見た。
SQL – 更新クエリ
更新クエリまたはステートメントは、INSERT、UPDATE、DELETEという3つのデータ操作言語ステートメントのうち2番目にあります。 UPDATE クエリでは、テーブルの既存のレコードを変更できます。
SQL はセットベースの言語なので、UPDATE クエリは 1 つのレコードではなく、レコードのセットに対して機能します (UPDATE の実行方法によって異なります)。
select * from person
where id = 10
update person
set dob = ‘1990-01-01’
where id = 10
上の問い合わせでは、最初に Person テーブルから id = 10 のレコードを選択しました。 次の画像は、選択された値を示しています。
次に、更新クエリを使用して、そのIDが10であるレコードのDOBを設定します。
上記のクエリを実行すると、テーブルの10番目のエントリのDOB値が更新されていることがわかります。
さて、1つのレコードで複数のものを更新するには、カンマ区切りリストを使用します。
以下に示すようなクエリを考えてみましょう。
select * from person
where id = 10
update person
set dob = ‘1990-01-01’, firstname = ‘Mike’
where id = 10
上の問い合わせを実行すると、図のように更新したテーブルを取得することができます。
次に、複数のレコードを変更したい場合は、次のようにします。
select * from person
where firstname = ‘Martin’
update person
set firstname = ‘Mike’
where firstname = ‘Martin’
上の問い合わせで、以前 Person テーブルのどこに存在したかを問わず firstname 値が Martin から Mike へ変更されていることを確認しました。
別の例を考えてみましょう。
人物テーブルには、もう少し数値的なことを行う余地がなかったので、プロジェクト テーブルを考えてみましょう。
ここで、テーブル全体に対する処理が望ましいと思われるシナリオを考えてみます。
プロジェクト テーブルは、現時点で、図のように 3 つのレコードを持っています。 それらをすべて20%程度アップグレードしたいとします。
select * from project
update project
set budget = budget*1.2
したがって、上記のクエリは、プロジェクト テーブルのすべてのレコードを 20% 増加させることになります。
更新されたレコードは次のとおりです。
したがって、多くの数学演算は、上記の例のように値に対して実行することができます。
SQL DELETEステートメント
それでは、3つのデータ操作言語ステートメントの最後のステートメントであるDELETEステートメントを勉強してみましょう。 DELETE文は、1つまたは複数のレコードを完全に削除する機能を持っています。 個々の列の内容を削除することはできないからです。
そのようにしたい場合は、UPDATEステートメントを使って個々の列の内容を変更する必要があります。
また、テーブルからレコードを削除するときに、そのエントリ(またはその値)が他のテーブルで使用されていないことを確認する必要があります。
人物テーブルには、次の初期エントリがあります。
DELETE 文は、次のクエリに示すように使用できます。
select * from person
where id = 10
delete from person
where id = 10
上記クエリの中で、ID値が10であるレコードは削除されました。
注意:DELETE文では、「where」句を使用することを忘れないでください。
上記のクエリを実行すると、id 値が 10 のエントリが削除され、更新されたテーブルは図のようになります。 主キーが 10 のものを除いて、他はすべて残っています。
ブロック全体を削除したい状況もあります。 たとえば、次のようにpersonテーブルからコピー項目をすべて削除したいとします。
人物テーブルからすべてのコピーレコードを削除するクエリは次のとおりです。
select * from person
where firstname like ‘copy%’
delete from person
where firstname like ‘copy%’
上の問い合わせで、「コピー%」はコピーから始まり、さらに任意の言葉で続く文があることを表します。
上記のクエリを実行すると、「コピー」で始まるすべてのレコードがpersonテーブルから削除されたことがわかります。
注意:DELETEステートメントは常に一度にひとつのテーブルに対して使用することが推奨されます。 ジョイントテーブルの場合には、このステートメントを使用することはお勧めできません。
おわりに
以上で、「SQLにおけるデータ操作」に関するこのレッスンは終了です。次のレッスンでは、「トランザクション制御」を取り上げます。 View Transcript Watch Video
SQLトレーニング認定トレーニング
コースへ
To learn more, to take the Course
SQLトレーニング認定トレーニングを受講してください。 コース SQLトレーニング認定トレーニング を受講する コース
に移動する。