前コラムでも予告したとおり10月23日にMySQL 4.1.7がリリースされ,MySQl 4.1はProductionとなった。MySQL 4.1シリーズの最初のバージョン(2003/4/3に4.1.0をリリース)から1年半を費やし,名実ともに製品となったのだ。今回も前月に引き続きMySQL 4.1に関して解説する。

MySQL 4.1の新機能

 前回は,MySQL 4.1の新機能プリペアド・クエリにフォーカスした。今回は,正式リースとなったので,新機能の全般に関して触れておく。

サブクエリ(副問合わせ)のサポート

 サブクエリのサポートは,MySQL 4.1の最も注目される機能である。ユーザーの悲願とも言える機能である。

 MySQL 4.0シリーズでは,サブクエリがサポートされていなかったので,TEMPORARYタイプのテーブルで代替したユーザーも多いだろう。サブクエリのサポートによって,その必要もなくなった。

 サブクエリは,複数のSQLステートメントが連携するもので,SQLステートメントの処理結果を基に別のSQLステートメントを実行可能するものだ。実際にサブクエリの動作を確認しよう。

 テーブル「Country」に国データの一覧が格納されている。また,テーブル「City」には,都市データの一覧が格納されている。テーブル「Country」の検索結果を基にテーブル「City」を検索する処理をサブクエリで実行する。

 リスト1は,テーブル「Country」のフィールド「Name」が「Israel」であるレコードを検索した結果だ。

リスト1●テーブル「Country」の検索結果(確認のため)

mysql> SELECT Code,Name FROM Country WHERE Name = 'Israel';
+------+--------+
| Code | Name   |
+------+--------+
| ISR  | Israel |
+------+--------+
1 row in set (0.00 sec)

 「Id」フィールドの値を使って,テーブル「City」を検索する。リスト2は,SQLステートメントに「Id」フィールドの値を直接記述して検索している。

リスト2●テーブル「City」の検索結果(確認のため)

mysql> SELECT * FROM City WHERE Country='ISR';
+------+------------------+---------+-----------+------------+
| Id   | Name             | Country | District  | Population |
+------+------------------+---------+-----------+------------+
| 1450 | Jerusalem        | ISR     | Jerusalem |     633700 |
| 1451 | Tel Aviv-Jaffa   | ISR     | Tel Aviv  |     348100 |
| 1452 | Haifa            | ISR     | Haifa     |     265700 |
| 1453 | Rishon Le Ziyyon | ISR     | Ha Merkaz |     188200 |
| 1454 | Beerseba         | ISR     | Ha Darom  |     163700 |
| 1455 | Holon            | ISR     | Tel Aviv  |     163100 |
| 1456 | Petah Tiqwa      | ISR     | Ha Merkaz |     159400 |
| 1457 | Ashdod           | ISR     | Ha Darom  |     155800 |
| 1458 | Netanya          | ISR     | Ha Merkaz |     154900 |
| 1459 | Bat Yam          | ISR     | Tel Aviv  |     137000 |
| 1460 | Bene Beraq       | ISR     | Tel Aviv  |     133900 |
| 1461 | Ramat Gan        | ISR     | Tel Aviv  |     126900 |
| 1462 | Ashqelon         | ISR     | Ha Darom  |      92300 |
| 1463 | Rehovot          | ISR     | Ha Merkaz |      90300 |
+------+------------------+---------+-----------+------------+
14 rows in set (0.01 sec)

 コード1とコード2の内容をサブクエリにより1つのSQLステートメントで実行すると,リスト3のようになる。

リスト3●サブクエリによる一括検索

mysql> SELECT * FROM City WHERE Country = (SELECT Code FROM Country WHERE Name = 'Israel');
+------+------------------+---------+-----------+------------+
| Id   | Name             | Country | District  | Population |
+------+------------------+---------+-----------+------------+
| 1450 | Jerusalem        | ISR     | Jerusalem |     633700 |
| 1451 | Tel Aviv-Jaffa   | ISR     | Tel Aviv  |     348100 |
| 1452 | Haifa            | ISR     | Haifa     |     265700 |
| 1453 | Rishon Le Ziyyon | ISR     | Ha Merkaz |     188200 |
| 1454 | Beerseba         | ISR     | Ha Darom  |     163700 |
| 1455 | Holon            | ISR     | Tel Aviv  |     163100 |
| 1456 | Petah Tiqwa      | ISR     | Ha Merkaz |     159400 |
| 1457 | Ashdod           | ISR     | Ha Darom  |     155800 |
| 1458 | Netanya          | ISR     | Ha Merkaz |     154900 |
| 1459 | Bat Yam          | ISR     | Tel Aviv  |     137000 |
| 1460 | Bene Beraq       | ISR     | Tel Aviv  |     133900 |
| 1461 | Ramat Gan        | ISR     | Tel Aviv  |     126900 |
| 1462 | Ashqelon         | ISR     | Ha Darom  |      92300 |
| 1463 | Rehovot          | ISR     | Ha Merkaz |      90300 |
+------+------------------+---------+-----------+------------+
14 rows in set (0.01 sec)

 このようにサブクエリによって,検索結果が連携するような処理が簡単に行えるようになった。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら