MySQL : 相関サブクエリ・非相関サブクエリ( IN 句 ) の試験問題

相関サブクエリは、外部クエリの値を使用するサブクエリです。
 

社員マスタ(左) の社員コードと得意先マスタ(右) の担当者が一致します。

社員が担当する得意先の件数を表示する SQL を記述してください。
1

社員マスタ(左) に 管理者名 VARCHAR(50)を追加したとして、UPDATE 構文で相関サブクエリを使用して管理者名列の全ての名前をセットしてください
2

取引データの取引先コードと金額を使用して売り上げが400万を超える担当者の社員情報の一覧を取得するSQLを記述してください( 二階層の IN を使用した非相関サブクエリ )
3


MySQL

MySQL : 結合によるデータ作成と調整 の試験問題

テスト時に何らかのテストデータを作成したい時には、1結合を使用します。仕様的には、結合するテーブルの条件で両方共データが存在する場合の行の一覧を取得しますが、プログラミング的には特殊な目的に利用する事になります。

この結合は、条件を指定しなければ、いわゆる2となるので、50件の社員マスタを自己結合させれば、2500件のデータを作成する事ができます。以下に社員マスタ(50件)を自己結合させて、2500件の 片方の社員マスタの列を表示する SQL を記述してください。
3

しかし、このままでは主キーが無い(本来の社員コードは重複してしまう)ので、CREATE TABLE ... SELECT 構文を使用して社員マスタと同じ列定義を持った社員テーブルを作成する SQL を記述してください
4

このテーブルに自動採番列( SERIAL )の ROWKEY という列を先頭に追加するSQL を記述してください
5

この際、自動的に ROWKEY というユニークなインデックスが作成されてしまいますが、主キーを作成する為にこのインデックスを削除する必要があります。その際、ROWKEY 列が NOT NULL である必要があるので、NOT NULL 制約を付加する SQL を記述してください
6

ROWKEY インデックスを削除する SQL を記述してください
7

最後に、ROWKEY に主キーを付加する SQL を記述してください
8



MySQL : 外部からのアクセス・結合( JOIN ) の試験問題

MySQL では設定しなれければ、接続できるホストは1のみです。ユーザも2しかありません。外部からの接続を可能にするには、MySQLから見たホスト名とユーザ名を組み合わせてアカウント管理ステートメントである GRANT 構文で実行します。以下に PC-00 に対して既存の前述のユーザでパスワードを mypass として すべての権限を付与するSQL を記述してください( 他のユーザに権限を与えれるように記述してください )( +5 )
3

上記定義を削除する SQL を以下に記述してください
4( +1 )

二つ以上の表を結合する場合、プログラミングでは通常5を指定して最初のテーブルデータを全て選択するようにします。この場合、二つ目のテーブルに最初のテーブルに該当するデータが無い場合、二つ目のテーブルに該当する列の内容は6となります。

結合の際の条件は7句の後に記述され、最終的に結合後の行を絞るには8句を使用し、ソートする為の9句は、最後に記述します。

社員マスタでは、【管理者】という列があり、これは同じ社員マスタのデータとなります。つまり、管理者名を表示するには、社員マスタと社員マスタを結合する必要があります。このような結合を自己結合と言います。

この結合の記述のポイントは、二つの社員マスタに別名を与える事です。以下に管理者名を取得可能な自己結合の SQL を記述してください( +2 )
10




MySQL : エクスポート・インポート の試験問題

データ操作ステートメントで重要なSQLは、SELECTUPDATE INSERT です。これらで殆どのアプリケーションに必要な処理を実現できます。ただ、その中でもデータベースの中だけで完結しない SQL を知っておく事は開発や運用で重要になります。

MySQL では、SELECT を使用してテキストファイルにデータをエクスポートする事ができます。社員マスタの全ての列を C:/app/workspace/syain.932 へ出力する SQL を記述してください。
1
※ キャラクタセットは cp932
※ 列データの区切り文字は ,(カンマ)
※ 改行コードは \r\n
※ OPTIONALLY ENCLOSED BY '"' を使用する事

データをエクスポートするという事は、インポートを知っている必要があります。MySQL では上記処理で出力されたデータを LOAD DATA INFILE という SQL で実現します。(この SQL もデータ操作ステートメントです)
以下に、インポートする SQL を記述してください
2

社員マスタには、主キーが存在します。ですから、インポートする前にはデータを全て削除しておく必要がありますが、この場合はデータ操作ステートメントの3構文では無く、データ定義ステートメントの4構文を使用してください。前者はあくまで、アプリケーション内での削除に使われるもので、運用には後者を使用します。

バックアップ目的のエクスポートは、コマンドで行います。以下にコマンドプロンプトで行うエクスポートを記述してください。
5
※ localhost の lightbox データベース
※ ユーザは root で、パスワードは空文字
※ 出力ファイルは backup.sql

この内容は SQL となっていますので、インポートはSQL の実行を行うコマンドです。以下にその内容を記述してください
6





SQL MySQL ベーシック の試験問題

データベースにはいろいろな種類があり、それぞれを管理するシステムと言う意味で一般的な通称として1と呼びます。その中で MySQL はSQLにおいて自由度の高いものとなるので、Oracel でできなかった事ができたりするので、MySQL で出来た事を【常識】と考えない事が必要です。

SQLには一般的に、データを操作する2とデータを定義する3に分かれますが、MySQL では、データベースを管理する SQL があります。その中でも SHOW 構文がプログロマにとっては有用なのでいくつか暗記しておく必要があります。

4 : テーブル一覧
5 : データベース一覧
6 : 社員マスタのテーブル定義( CREATE 文 を表示 )
7 : 社員マスタのテーブル情報
8 : システム変数の値

また、MySQL には information_schema というデータベースが最初から存在し、MySQL のいろいろな情報を読み出す事ができます。特に9の定義と列の情報は有用で、列の情報が格納されているのは10というオプジォクトです。

データを定義する SQL は本来管理者が使用するものですが、最低限プログラマも知る必要があります
11 : lightbox データベースを作成
12 : 社員マスタに削除フラグを varchar(1)で追加
13 : 社員マスタから削除フラグを削除
14 : 社員マスタの性別のデータ型をvarchar(1)に変更
FieldTypeNullKeyDefaultExtra
社員コードvarchar(4)NOPRI
氏名varchar(50)YES
性別intYES
生年月日datetimeYES
上記定義で 社員というテーブルを定義するSQL を記述してください
15




Pleiades Ultimate の XAMPP 内の MySQL を利用可能にしてテストデータを登録する

xampp-control.exe の設定

xampp-control.exe は管理者権限で実行する必要があるので、エクスプローラから右クリックしてプロパティの『互換性』タブで管理者として実行するチェックを ON にします。



my.ini の設定( サーバーをUTF-8 に設定 )



C:\pleiades\xampp\mysql\bin\my.ini の以下の部分のコメントを削除します。



開発用のソフトウェアを準備

SQLの窓 Build C++ と、販売管理C でテスト環境を構築します 。

手順1 ( MySQL の ODBC ドライバ)

SQLの窓 Build C++ は 32ビットアプリケーションなので、まず MySQL の ODBC ドライバ(32ビット)をダウンロードしてインストールします。

Connector/ODBC 5.3

※ 何も選択せずにダイアログ内で進めればOK です
Visual Studio 2013 の Visual C++ 再頒布可能パッケージ

Connector/ODBC 8.0
Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3


手順2 (SQLの窓 Build C++)

次に、SQLの窓 Build C++ をダウンロードして解凍して WinOfSql.exe を実行して下さい。

※ レジストリは使用しません。
※ 複数のフォルダにいくつあっても動作します。
※ 削除すればアンインストールです。

実行後 M ボタンをクリックして MySQL 接続用のダイアログを開き、ODBC アドミニストレータボタンで ODBC の DSN を作成する Windows の管理ツール(32ビット) を実行します。



手順3 ( DSN 登録 )

ここで、xampp-control.exe を実行し、開始ボタンで MySQL を開始します。(初期設定なので失敗しないようにこのタイミングで実行しています / 以降は必要な時でいいです)



ユーザDSN => 追加 => MySQL ODBC 5.3 Unicode Driver

( ODBC32ビットドライバの一覧は、HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI より確認できます)

▼ Details ボタンで全て開いて Character Set で cp932 を選択して下さい。


データベースは、まだユーザ用を作成していないので mysql を選択します。これは後で変更しなくとも、接続時に変更しますのでこのままでいいです。

入力が終わったら、データベースの右の Test ボタンで接続が成功するのを確認します。接続に成功したら、OK で登録します。

手順4 ( SQLの窓 Build C++ で接続して DB 作成 )



M ボタンで接続ダイアログを表示して、DSN に登録した情報で接続します



右側のテキストエリアで create database 自分用のデータベース名 で、Action ボタンをクリックして作成します。





作成後は、いったん終了して再度 SQLの窓 Build C++ を実行します(オペミスを防ぐためです)。そして再度 M ボタンで、今度は作成したデータベース(ここでは lightbox)で接続します。( 接続情報を保存する為です )




手順5 ( 作成した データーベース の確認 )

接続後、テーブルが無いのでなにも表示されませんが、メニューに登録済みの SQL で内容を確認できます。

『データベース一覧』で、登録したデータベースと既に存在するデータベースを確認できます。





『システム変数の値』で、キャラクタセットを確認します





手順6 ( 販売管理C.mdb をインポート )

▼ 学習用 MDB データのダウンロード


解凍した中にある 販売管理C.mdb を SQLの窓 Build C++ の左側のリストにドラッグ&ドロップします。



次にリストの中のテーブルを、SHIFTキーを使って選択して(まず先頭をクリックして、SHIFTキーを押しながら最後をクリック)から、処理 => エクスポート => MySQL を選択



直前の接続が選択されているので、下欄のチェックボックスを二つ選択して実行します


※ チェックボックスが無いと、主キーが無い状態でデータのみがエクスポートされます( 後からキー設定は可能ですがテーブルを全て設定するのは面倒です )

完了すると左下にメッセージが出るので、x ボタンで閉じます。



閉じたら、そこは MDB の接続なので、M ボタンで切り替えて下さい。テーブルの一覧が表示されるはずです。

※ テーブルをダブルクリックすると、テーブルデータが表示されて直接変更が可能です。( 更新は 『編集』メニューから更新です )







関連する記事

Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備


Pleiades Oxygen 2 の XAMPP 内の FileZilla Server をインストールして使用する


Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする