KoReKuRai
HOMESQLSQL    ☰ MENU

SQLでテーブルとテーブルをJOINの方法は知ってるけどCURSORの使い方がよく分からない

sql

SQLでテーブルとテーブルをJOINの方法は知ってるけどCURSORの使い方がよく分からない。

私もそうでした。簡単な説明を求めてネット検索しても自分にはちょっと難しかったので、ここで出来るだけ簡単に説明してみます。

カーソルを使わない場合

例えば会社を管理しているテーブルがあります。都道府県別に3つのテーブルに会社を振り分けたいとします。

以下の図をご覧ください。

カーソルを使わない場合は以下のクエリを実行すれば可能です。


INSERT INTO [東京都テーブル] ([会社名])
SELECT [会社名] FROM [会社テーブル] WHERE [都道府県] = '東京都'

INSERT INTO [神奈川県テーブル] ([会社名])
SELECT [会社名] FROM [会社テーブル] WHERE [都道府県] = '神奈川県'

INSERT INTO [静岡県テーブル] ([会社名])
SELECT [会社名] FROM [会社テーブル] WHERE [都道府県] = '静岡県'

でも、都道府県は47件あるので都道府県テーブルが47個あった場合、上のINSERTクエリを47個用意しなくてはなりません。

クエリを書くのが面倒ですし、将来都道府県が48件に増えた場合、また48個目のINSERTクエリが必要です。

そんな非効率な運用は嫌だ。こういう時にカーソルを使います。

カーソルを使うと

以下にカーソルを含むクエリを用意しました。


DECLARE @SQLString nvarchar(255);
DECLARE @都道府県 nvarchar(10);
SET @SQLString = '';
       DECLARE mycursor CURSOR FOR
       SELECT DISTINCT [都道府県] FROM [会社テーブル]
       OPEN mycursor
       FETCH NEXT FROM mycursor
       INTO @都道府県
       WHILE @@FETCH_STATUS = 0
       BEGIN
              SET @SQLString += ' INSERT INTO [' + @都道府県 + 'テーブル] ([会社名]) SELECT [会社名] FROM [会社テーブル] WHERE [都道府県] = ''' + @都道府県 + '''';
              FETCH NEXT FROM mycursor
              INTO @都道府県
        END
       CLOSE mycursor;
       DEALLOCATE mycursor;
EXECUTE sp_executesql @SQLString;    

このクエリで何をしているのか図にしてみました。

そもそもどうして都道府県テーブル別にデータを分けないといけないのか。

理由は、カーソルを説明する為にテーブルを分ける必要があったからです。。。もう1つの理由は、アプリケーション側の設計によりますがテーブルを分けることで検索速度を上げることができます。

最後に

SQLカーソルって便利ですね。尚、「@SQLString」に格納できる文字数は多めに見積もっておかないと、格納しきれない文字は切り捨てられ、未完成のクエリを実行してしまい、エラーになってしまうのでご注意を。

スポンサーリンク

📄 関連記事


🔝上へ
スポンサーリンク

📑 SQL



🔝上へ
こんな記事も読まれてます。

TRAVEL JAPAN
国内旅行 記事一覧

屋久島雨の日の空気伊豆下田のきれいな海富士山の頂上ってどんなとこ?京都観光マップ京都 紅葉とライトアップ富士山周辺観光マップ北海道の知床の絶景箱根駒ケ岳で見る富士山

TRAVEL ABROAD
海外旅行 記事一覧

インド出張 タクシーで牛と遭遇スペインで風車を見たナイアガラの滝の虹が凄い深夜のNYタイムズスクエア香港の夜景は船からアメリカのレンタカー代でいくら?グランドキャニオンまでドライブシドニーの世界遺産
🔝上へ

CATEGORY
カテゴリ

📂:外資系企業の転職,英語,面接,働き方

📂:北海道,屋久島

📂:スペイン,インド,台湾.飛行機対策

📂:胃痛,風邪予防,食,メンタル

📂:英語,育て方,旅行

📂:エンジニアの苦悩,効率化,Windowsのトラブル対応

📂:海外ドラマ・映画のレビューと感想

📂:海外のレンタカー,試乗レポート,軽自動車,等々

📂:新築一戸建て 申し込みから購入・引渡しまで色々あったこと

PROFILE
プロフィール

これくらいブログKoReKuRaiです。東京都在住。外資系IT業界でSEやWebService開発,DB設計,面接官,会議通訳,プリセールス等色々とお仕事続けて約15年。現在、5歳児の子育てに奮闘中です。外資系企業での働き方や転職時に役に立った実体験や失敗談、会議通訳に役立った英会話のあれこれ、国内150ヵ所以上の旅行先の紹介、海外出張で行った10カ国のついでで観光した50ヵ所の旅行記や、子育て、サイト作成やコーディングに色々役立つと思うブログを書き足していきます。拙い文章ですがよろしくお願いします。メールはこちらまでお願いします。

Copyright 2016-2019 KoReKuRai All Rights Reserved.