サブクエリ

何をしたいのか?

サブクエリを使って、複合テーブルの親子テーブルに入っている値を削除したい。

 

子であるschool_tテーブルには、company_id、room_id、school_idがある。school_tテーブルの、company_idを使ってschool_id取得して、親テーブルschool_name_tテーブルのschool_idをdeleteしたい。

 

セレクトした結果を、文字列に直す。

文字列を代入して、さらにデリート処理をするようだね。

 

 

何ができる?

サブクエリとはSQLの中に書くSQLのこと。SQL文を実行することをクエリ(問合せ)の発行と呼びます。

ずサブクエリから実行され、実行結果を一つのテーブルと見なし、次にメインクエリが実行されます。

 

いつ使う?

スイッチングコストについて書きます。スイッチングコストについて書きます。スイッチングコストについて書きます。スイッチングコストについて書きます。スイッチングコストについて書きます。スイッイッチングコストについて書きます。

 

■注意点

MySQLではDELETEやUPDATE文のサブクエリで更新対象のテーブルを指定できない

詳細はこちら>>

 

DELETE
FROM テーブル
WHERE (コード,日付) IN(SELECT *
FROM (SELECT コード, 日付
FROM テーブル AS Z
WHERE 日付 < (SELECT MAX(日付)
FROM テーブル AS A
WHERE A.コード = Z.コード
)
) SUB
);

 

サブクエリ部分を1階層深くして、更新文のFROM句で指定したテーブルをサブクエリで直接参照しないようにします

 

■見本2

DELETE
FROM
companies
WHERE
companies.id IN (
SELECT
t1.id
FROM
(
SELECT
companies.id
FROM
companies
LEFT JOIN products
ON products.company_id = companies.id
WHERE
companies.type IN (1, 2)
) AS t1
)
;

参照はこちら>>

 

 

 

DELETE WHERE IN

■構文

DELETE FROM [テーブル]

WHERE [カラム] IN ([値A],[値B],...);

 

 

■書き方

DELETE FROM test_t

WHERE name

IN ('Apple','Banana');

 

 

サブクエリ見本

SELECT T.*
FROM (
SELECT E.ID, E.NAME, B.NAME AS BRANCH_NAME, D.NAME AS DEPARTMENT_NAME
FROM EMPLOYEES E
JOIN BRANCH B ON E.BRANCH_ID = B.ID
JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.ID
) T
WHERE T.ID = 1

 

 

■WHEREで使う

SELECT *
FROM EMPLOYEES
WHERE

DEPARTMENT_ID = (SELECT ID FROM DEPARTMENT WHERE NAME = '開発部')

 

詳細はこちら>>

 

■SELECTで使う

SELECT E.ID,E.NAME,
(SELECT NAME FROM DEPARTMENT WHERE ID = E.ID) DEP_NAME
FROM EMPLOYEES E

 

高負荷になりやすいので注意。。

サブクエリが複雑だと他の場所で使用するよりも高負荷で結果を取得するのに時間のかかるクエリになるので、SELECT句で使う場合は比較的単純なサブクエリであることが望ましいです。

 

 

join DELTEの注意点

■JOINとDELETE

DELETE table1,table2,table3

FROM table1

INNER JOIN table2

INNER JOIN table3

WHERE table1.id=table2.id

AND

table2.id= table3.id

 

table1, table2, table3という3つのテーブルに共通するデータを削除する!

FROM句の前に、削除する対象のテーブルを書かなくてはなりません

 

言い方を変えると、FROMの前に書いていないテーブル名は、結合条件には使われますが消えません。

 

これを応用すると、3テーブルに共通するレコードを、table1だけ削除するという器用なことができるのです!

 

DELETE table1

FROM table1

INNER JOIN table2

INNER JOIN table3

WHERE table1.id=table2.id

AND

table2.id= table3.id

詳細はこちら>>

 

 

論理削除と物理削除

DELETE文のアンチパターンというより、どちらかというと設計よりの話です。昔から「論理削除か物理削除か」という壮絶なバトル論争が続いています。

論理削除とは、テーブルからデータを削除せずに、「削除フラグ」といった項目に削除済みです、というマークをつけます(大半は論理値でtrueなら現存、falseなら削除済みとします)。

 

物理削除とは、本当にテーブルからデータを削除します。

 

論理削除なら復活できる、物理削除ならできない

いやいや論理削除は大量の削除済みデータを残すことになりレスポンスが低下、と一長一短。

データベースの設計を任されるようになったら、この問題に取り組んでみてください。

詳細はこちら>>

 

残すメリット

・データの復帰ができる

 

デメリット

・データが重くなる

・速度が落ちる

 

 

あなたにおすすめのコンテンツ

カスタマイズしたコンテンツを出します。

リンク対策はもう古い、これからはコンテンツSEOの時代

外部リンク対策をするのは、すでに昔のはなし。

最新のコンテンツSEO対策とは何か?

売れるページの作り方とは

大企業と中小企業では広告の方法がちがいます。

ホームページもベストな運営の手法があります

外部リンク対策とは何か

今では古くなってしまった手法ですが、外部リンク対策について

知っておくことは大事です。外部リンク対策と危険性について

 

 

 

 

【SEO対策・web広告・webコンサルティングのプラスワーク対応エリアについて】

プラスワークでは、東京、神奈川、千葉、埼玉を中心に全国でwebコンサルティング、SEO対策、ホームページの更新、ホームページのリニューアル運営代行をしております。売上アップをお考えならお気軽にご相談ください。

 

【SEO対策・web広告・webコンサルティングのプラスワーク 対応地域】

北海道 [ 北海道 ]

東北  [ 青森 | 岩手 | 山形 | 福島 | 秋田 | 宮城 ]

関東  [ 東京 | 埼玉 | 千葉 | 茨城 | 栃木 | 群馬 | 神奈川 ]

甲信越 [ 山梨 | 長野 | 新潟 ]

北陸  [ 石川 | 福井 | 富山 ]

東海  [ 愛知 | 静岡 | 岐阜 | 三重 ]

近畿  [ 大阪 | 兵庫 | 京都 | 滋賀 | 奈良 | 和歌山 ]

中国  [ 島根 | 山口 |鳥取 | 広島 | 岡山 ]

四国  [ 徳島 | 香川 | 愛媛 | 高知 ]

九州  [ 福岡 | 佐賀 | 長崎 | 熊本 | 大分 | 宮崎 | 鹿児島 ]

プラスワークでは全国でSEO対策、ホームページ更新、制作をしております。中小企業専門SEO対策・ホームページ更新制作会社、ダイレクト レスポンス マーケティング、ウェブ マーケティング、マーケティング 分析、口コミのよいSEO対策会社をお探しならプラスワークにお任せくださいませ。

 

 

【コンテンツ】

トップへ

更新レスキュー

料金について

制作実績

お客様の声

よくある質問

会社概要

お問い合わせ

【更新レスキュー】

ライトコース

ゴールドコース

プラチナコース

 

【その他】

ニュース

メルマガ登録

特別資料プレゼント

相互リンク募集中

【課題から探す】

ホームページの課題

SEO対策とは

SEO対策がダメな理由

上位表示されない理由

相互リンクとは

順位が落ちてしまう原因

 

 

フェイスブック  ツイッター