SQLの基礎的な説明は省略して、現場で使う実践的なSQLのテクニックをまとめたいと思います。
特に100万件以上の大規模データベースにおいてSQLを操作する場合を想定しています。
SQLはどのRDBMSでも使用できる共通言語ですが、Oracle、SQLServer、MySQLそれぞれ関数やプロシージャの書き方に違いがあります。
特にここで紹介する内容は、中級レベルの内容であるため、その違いが強くなる部分です。
ここでは、MySQLを例にご紹介しますが、お使いのDBによって書き方は若干変わることをご留意ください。
まず、(1)では概要として、抽出の重要性をまとめます。
1.2テーブルを連結して1テーブルの該当レコードを削除

~ 例1 ~
-- 例1:
delete B
from A
inner join B
on A.KEY=B.KEY
~ 結果 ~
影響を受けた行数: 2
成功
~ 例2 ~
-- 例2:
delete B
from A
left join B
on A.KEY=B.KEY
where B.KEY is not NULL
~ 結果 ~
影響を受けた行数: 2
成功
~ 例3 ~
-- 例3:
delete B
from A,B
WHERE A.KEY=B.KEY
~ 結果 ~
影響を受けた行数: 2
成功
INNER JOIN、LEFT JOIN等どのような連結でも関係なく、正しくレコードを抽出さえすれば、後はDELETEの対象テーブル(この場合B)を指定するだけです。外部左結合ではだめなのでは等、深く考えてしまいがちですが、結果は同じです。
私は、長年SQLに携わってきたのですが、これこそSQLを使う際一番認識しておくべきことではないかと思っています。
1.2テーブルを連結して2テーブルの該当レコードを削除

~ 例 ~
-- 例:
delete A,B
from A
inner join B
on A.KEY=B.KEY
~ 結果 ~
影響を受けた行数: 4
成功
これも「2テーブルを連結して1テーブルの該当レコードを削除」と同じで、正しくレコードを抽出さえすれば、後はDELETEの対象2テーブル(この場合AとB)を指定するだけです。
3.アップデートも同じことです

~ 例:SQL Server ~
-- 例:
update B
set B.DATA='400'
from A,B
where A.KEY = B.KEY;
~ 結果 ~
影響を受けた行数: 2
成功
~ 例:MYSQL ~
-- 例:
update A, B
set B.DATA='400'
where A.KEY = B.KEY;
~ 結果 ~
影響を受けた行数: 2
成功
DELETEの場合と同じく正しくレコードを抽出さえすれば、後はUPDATE文を用いて対象のテーブル(この場合AとB)と項目を指定してアップデートするだけです。
ただし、複数テーブルからのアップデートについてはRDBMSにより、書き方が、かなり変わりますので注意して下さい。※Oracleはサブクエリでしか対応できません。
4.インサートも同じことです

~ 例 ~
-- 例:
insert into C
select A.KEY,A.NAME,B.DATA
from A,B
where A.KEY = B.KEY;
~ 結果 ~
影響を受けた行数: 2
成功
INSERTも正しくレコードを抽出さえすれば、後は該当のテーブル(この場合C)にインサートするだけです。
5.結局「SELECT文」がSQLの根本です

上図の通り、SELECTは意味合いが2つあるのですが、結局何等かのデータを処理する場合、抽出から始まり、抽出後に表示、削除、挿入、更新のいずれかのアクションを行うという流れです。
挿入、削除、更新は非常に簡単な文法であり、結局、表示と抽出の「SELECT文」がSQLの根本といえます。
そして、その「SELECT文」の表示と抽出は下図の通りFROMを境に分かれます。

現場での実践SQL(2)以降はこの「抽出」と「表示」を分けてまとめていきます。