Windows+Apache+PHP+MySQLによるWebアプリケーション
−入門編−
第2章 コマンドプロンプトでのMySQLの操作

2.3 データベース・テーブルの操作

■作成済みのデータベースの一覧表示

 作成済みのデータベースの一覧表示には、「SHOW DATABASES」文を使います。

mysql> SHOW DATABASES;

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql   |
| test   |
+----------+
2 rows in set (0.27 sec)

mysql>

■データベースの作成

 データベースの作成には、「CREATE DATABASE」文を使います。

mysql> CREATE DATABASE データベース名;

mysql> CREATE DATABASE db_販売管理;
Query OK, 1 row affected (0.09 sec)

mysql> SHOW DATABASES;
+-------------+
| Database   |
+-------------+
| db_販売管理 |
| mysql    |
| test    |
+-------------+
3 rows in set (0.00 sec)

mysql>

■データベースの削除

 データベースの削除には、「DROP DATABASE」文を使います。

mysql> DROP DATABASE データベース名;

mysql> CREATE DATABASE db_test;
Query OK, 1 row affected (0.00 sec)

mysql> SHOW DATABASES;
+-------------+
| Database  |
+-------------+
| db_test   |
| db_販売管理 |
| mysql    |
| test    |
+-------------+
4 rows in set (0.00 sec)

mysql> DROP DATABASE db_test;
Query OK, 0 rows affected (0.10 sec)

mysql> SHOW DATABASES;
+-------------+
| Database  |
+-------------+
| db_販売管理 |
| mysql    |
| test    |
+-------------+
3 rows in set (0.00 sec)

mysql>

■利用するデータベースの設定・変更

 利用するデータベースを新たに設定したり、別のデータベースに変更するには「USE」文を使います。

mysql> USE データベース名;

mysql> USE db_販売管理;
Database changed
mysql>

■テーブルの作成

 テーブルの作成には、SQLコマンドの「CREATE TABLE」文を使います。

mysql> CREATE TABLE テーブル名(フィールド定義);

 フィールドは列あるいはカラムともいいますが、以下フィールドと呼びます。フィールド定義は以下のように記述します。ここでは、オプションを省略した最も単純な例を示します。フィールド名と型の間は半角スペースで区切ります。次のフィールド名の定義に移る場合は半角カンマで区切ります。最後に、主キー(プライマリーキー:PRIMARY KEY)を定義します。フィールド名nはPRIMARY KEYとするフィールド名を記入します。

(
 フィールド名1 型1,
 フィールド名2 型2,
 フィールド名3 型3,
 PRIMARY KEY(フィールド名n)
)

 ここでは、以下のテーブル「tbl_商品表」を作成します。

フィールド名 主キー 説明
商品コード CHAR(4) 商品コード
商品名 CHAR(16)   商品名
単価 INTEGER   単価

mysql> USE db_販売管理;
Database changed
mysql> CREATE TABLE tbl_商品表
  -> (
  -> 商品コード CHAR(4),
  -> 商品名   CHAR(16),
  -> 単価    INTEGER,
  -> PRIMARY KEY(商品コード)
  -> );
Query OK, 0 rows affected (0.07 sec)

mysql>

■作成済みテーブルの確認

 作成済みのテーブルの一覧表示には、「SHOW TABLES」文を使います。

mysql> SHOW TABLES;

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_db_販売管理 |
+-----------------------+
| tbl_商品表      |
+-----------------------+
1 row in set (0.03 sec)

mysql>

■テーブルのフィールド一覧表示

 テーブルのフィールド一覧を表示するには、「SHOW FIELDS FROM」文を使います。

mysql> SHOW FIELDS FROM テーブル名;

mysql> SHOW FIELDS FROM tbl_商品表;
+------------+----------+------+-----+---------+-------+
| Field   | Type   | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| 商品コード | char(4) |   | PRI |     |    |
| 商品名   | char(16) | YES |   | NULL  |    |
| 単価    | int(11) | YES |   | NULL  |    |
+------------+----------+------+-----+---------+-------+
3 rows in set (0.10 sec)

mysql>

■テーブルの削除

 テーブルを削除するには、「DROP TABLE IF EXISTS」文を使います。

mysql> DROP TABLE IF EXISTS テーブル名;

mysql> CREATE TABLE tbl_test
  -> (
  -> id INTEGER,
  -> name CHAR(20),
  -> PRIMARY KEY(id)
  -> );
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_db_販売管理 |
+-----------------------+
| tbl_test       |
| tbl_商品表      |
+-----------------------+
2 rows in set (0.00 sec)

mysql> DROP TABLE IF EXISTS tbl_test;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_db_販売管理 |
+-----------------------+
| tbl_商品表       |
+-----------------------+
1 row in set (0.00 sec)

mysql>

■テーブルへのデータ入力

 テーブルへデータを入力するには、SQLコマンドの「INSERT INTO」文を使います。テーブルへデータを入力するとレコードが順次追加されます。レコードは行あるいはロウとも呼ばれますが、以下レコードと呼びます。

mysql> INSERT INTO テーブル名
     (
       フィールド名1,
        フィールド名2,
        :
      )
      VALUES
      (
        値1
        値2
        :
      )

mysql> INSERT INTO tbl_商品表
  -> (
  ->  商品コード,
  ->  商品名,
  ->  単価
  -> )
  -> VALUES
  -> (
  ->  '1001',
  ->  '田舎御膳',
  ->  1000
  -> );
Query OK, 1 row affected (0.07 sec)

mysql>

■テーブルの全レコードの一覧表示

 テーブルの全レコードを一覧表示するには、「SELECT * FROM」文を使います。「*」はワイルドカードといい、「全て」を意味します。ここでは、テーブルの全てのフィールドを選択して表示しなさいという意味になります。

mysql> SELECT * FROM テーブル名;

mysql> SELECT * FROM tbl_商品表;
+------------+----------+------+
| 商品コード | 商品名  | 単価 |
+------------+----------+------+
| 1001    | 田舎御膳 | 1000 |
+------------+----------+------+
1 row in set (0.06 sec)

mysql>

 最初のレコードのデータが正常にテーブルに入力されていることが確認できます。

■ファイルに記述したSQL文の実行

 INSERT INTO文のような数行にわたるSQL分をコマンドプロンプト(MySQLクライアント)から入力するのはなかなか大変です。そこでSQL文をあらかじめ、テキストファイルに記述しておき、そのファイルをコマンドプロンプトから読み込んで実行する方法があります。「\.」コマンドを使います。なお、文の最後に「;」(セミコロン)は不要です。

mysql> \. ファイル名

 たとえば、以下のテキストファイルを「insert01.sql」のファイル名で作成し、「D:\mysql\販売管理」フォルダに保存しておきます。「D:\mysql\販売管理」フォルダは、カレントディレクトリです。

テキストファイル「insert01.sql」の内容:

INSERT INTO tbl_商品表(商品コード,商品名 ,単価)
      VALUES   ('1002' ,'山の幸御膳',1200);
INSERT INTO tbl_商品表(商品コード,商品名 ,単価)
      VALUES   ('1003' ,'海の幸御膳',1400);
INSERT INTO tbl_商品表(商品コード,商品名 ,単価)
      VALUES   ('1004' ,'松竹梅御膳',1800);

 テキストファイル「insert01.sql」を読みこんだ実施結果は、次のようになります。

mysql> \. insert01.sql
Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tbl_商品表;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1400 |
| 1004    | 松竹梅御膳 | 1800 |
+------------+------------+------+
4 rows in set (0.02 sec)

mysql>

■レコードの修正

 入力済みのレコードの一部のフィールドの値を修正(更新)するには、SQLコマンドの「UPDATE」文を使います。

mysql> UPDATE  テーブル名
       SET    フィールド名1 = 値1,
              フィールド名2 = 値2,
              :
       WHERE 更新条件;

 実行例を以下に示します。

mysql> UPDATE tbl_商品表
  -> SET 商品名 = '地方御膳'
  -> WHERE 商品コード = '1001';
Query OK, 1 row affected (0.09 sec)
ー・ラソ・Rows matched): 1 ハムケケ: 1 Warnings: 0

mysql> SELECT * FROM tbl_商品表;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 地方御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1400 |
| 1004    | 松竹梅御膳 | 1800 |
+------------+------------+------+
4 rows in set (0.00 sec)

mysql>

■レコードの削除

 入力済みのレコードを削除するには、SQLコマンドの「DELETE」文を使います。

mysql> DELETE FROM  テーブル名
           WHERE  条件式;

 実行例を以下に示します。

mysql> DELETE FROM tbl_商品表
  ->     WHERE 商品コード = '1004';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tbl_商品表;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 地方御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1400 |
+------------+------------+------+
3 rows in set (0.00 sec)

mysql>

 商品コードの値が「1004」のレコードが削除されたのが確認できます。

■レコードの参照

 テーブルに格納したデータ(レコード)を参照(検索、抽出などの表現も使う)する場合には、SQLコマンドの「SELECT」文を使います。SELECT文はもっともよく使うSQLコマンドです。このような操作は問い合わせ(query)とも言います。

SELECT    フィールド名1,フィールド名2,  ・・
FROM     テーブル名
WHERE    条件式
ORDER BY フィールド名;

 いくつかの例を示します。参照するテーブルは、次の「tbl_商品表2」です。

「tbl_商品表2」
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1500 |
| 1004    | 七福神御膳 | 3000 |
| 1005    | 松竹梅御膳 | 2000 |
| 1006    | 鶴亀御膳  | 2500 |
+------------+------------+------+

 テーブルのすべてのフィールドとすべてのレコードのデータを参照する場合は、以下のSELECT文を使います。「*」はワイルドカードですべてのフィールド名を意味します。

mysql> SELECT * FROM tbl_商品表2;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1500 |
| 1004    | 七福神御膳 | 3000 |
| 1005    | 松竹梅御膳 | 2000 |
| 1006    | 鶴亀御膳  | 2500 |
+------------+------------+------+
6 rows in set (0.00 sec)

mysql>

 一部のフィールド名のみを表示する場合は、次のようなSELECT文を使います。

mysql> SELECT 商品コード,商品名 FROM tbl_商品表2;
+------------+------------+
| 商品コード | 商品名   |
+------------+------------+
| 1001    | 田舎御膳  |
| 1002    | 山の幸御膳 |
| 1003    | 海の幸御膳 |
| 1004    | 七福神御膳 |
| 1005    | 松竹梅御膳 |
| 1006    | 鶴亀御膳  |
+------------+------------+
6 rows in set (0.00 sec)

mysql>

 条件にあったレコードのみを参照(抽出)する場合は、次のようにSELECT文にWHERE句を使います。

mysql> SELECT * FROM tbl_商品表2 WHERE 単価 >= 2000;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1004    | 七福神御膳 | 3000 |
| 1005    | 松竹梅御膳 | 2000 |
| 1006    | 鶴亀御膳  | 2500 |
+------------+------------+------+
3 rows in set (0.02 sec)

mysql>

 条件に「and」を使い、複数の条件を満たすレコードを参照する場合のSELECT文です。

mysql> SELECT 商品名,単価 FROM tbl_商品表2
  -> WHERE 単価 <1500 and 商品コード >= 1002;
+------------+------+
| 商品名   | 単価 |
+------------+------+
| 山の幸御膳 | 1200 |
+------------+------+
1 row in set (0.02 sec)

mysql>

 次に、条件式にあいまい条件や、範囲指定を用いる例を示します。参照するテーブルは、次の「tbl_商品表3」です。

「tbl_商品表3」
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎定食  | 1000 |
| 1002    | 山の幸定食 | 1200 |
| 1003    | 海の幸定食 | 1500 |
| 1004    | 七福神御膳 | 3000 |
| 1005    | 松竹梅御膳 | 2000 |
| 1006    | 鶴亀御膳  | 2500 |
+------------+------------+------+

 文字列の部分一致条件を使う場合は、LIKE演算子とワイルドカード文字「%」(半角)を使います。ワイルドカード文字「%」は0文字以上の任意の文字列を意味します。次の例は末尾が「定食」となる商品名を含むレコードを参照します。いわゆる後方一致検索です。

mysql> SELECT * FROM tbl_商品表3 WHERE 商品名 LIKE '%定食';
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎定食  | 1000 |
| 1002    | 山の幸定食 | 1200 |
| 1003    | 海の幸定食 | 1500 |
+------------+------------+------+
3 rows in set (0.00 sec)

mysql>

 前方一致検索の場合は、「LIKE '山%'」のようにします。

mysql> SELECT * FROM tbl_商品表3 WHERE 商品名 LIKE '山%';
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1002    | 山の幸定食 | 1200 |
+------------+------------+------+
1 row in set (0.00 sec)

mysql>

 商品名に「幸」の文字が含まれるレコードを参照する場合は、「LIKE '%幸%'」とします。

mysql> SELECT * FROM tbl_商品表3 WHERE 商品名 LIKE '%幸%';
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1002    | 山の幸定食 | 1200 |
| 1003    | 海の幸定食 | 1500 |
+------------+------------+------+
2 rows in set (0.00 sec)

mysql>

 特定の長さの文字列に一致する条件を指定する場合は、ワイルドカード文字「_」(半角のアンダーバー)を使います。冒頭が「鶴亀」で4文字の商品名を含むレコードを参照する場合は、「LIKE '鶴亀_ _'」とします。(「_ _」は2個連続した半角のアンダーバーの意味です。ここでは分かりやすいように、間に半角スペースを挿入していますが、SQL文では、半角スペースは入れません)

mysql> SELECT * FROM tbl_商品表3 WHERE 商品名 LIKE '鶴亀__';
+------------+----------+------+
| 商品コード | 商品名  | 単価 |
+------------+----------+------+
| 1006    | 鶴亀御膳 | 2500 |
+------------+----------+------+
1 row in set (0.00 sec)

mysql>

 いくつかの特定の値に一致する場合の条件式には、IN演算子を使います。「1000」あるいは「1500」のいずれかに一致する場合という条件式は、「IN(1000,1500)」と記述します。

mysql> SELECT 商品名,単価 FROM tbl_商品表3
  -
> WHERE 単価 IN(1000,1500);
+------------+------+
| 商品名   | 単価 |
+------------+------+
| 田舎定食  | 1000 |
| 海の幸定食 | 1500 |
+------------+------+
2 rows in set (0.00 sec)

mysql>

 また、2000から2500までの間の任意の値に一致する条件式は、BETWEEN演算子を使います。

mysql> SELECT 商品コード,商品名 FROM tbl_商品表3
  -> WHERE 単価 BETWEEN 2000 and 2500;
+------------+------------+
| 商品コード | 商品名 |
+------------+------------+
| 1005 | 松竹梅御膳 |
| 1006 | 鶴亀御膳 |
+------------+------------+
2 rows in set (0.00 sec)

mysql>

■データの並べ替え(ソート)

 あるフィールド名の値に注目してデータの並べ替えを行うには、「ORDER BY」句を使います。次の例は、参照したレコードを単価の値の昇順に並べて表示しています。

mysql> SELECT * FROM tbl_商品表2 ORDER BY 単価;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1001    | 田舎御膳  | 1000 |
| 1002    | 山の幸御膳 | 1200 |
| 1003    | 海の幸御膳 | 1500 |
| 1005    | 松竹梅御膳 | 2000 |
| 1006    | 鶴亀御膳  | 2500 |
| 1004    | 七福神御膳 | 3000 |
+------------+------------+------+
6 rows in set (0.00 sec)

mysql>

 降順に並べ替える場合は、「DESC」オプションを使います。

mysql> SELECT * FROM tbl_商品表2 ORDER BY 単価 DESC;
+------------+------------+------+
| 商品コード | 商品名   | 単価 |
+------------+------------+------+
| 1004    | 七福神御膳 | 3000 |
| 1006    | 鶴亀御膳  | 2500 |
| 1005    | 松竹梅御膳 | 2000 |
| 1003    | 海の幸御膳 | 1500 |
| 1002    | 山の幸御膳 | 1200 |
| 1001    | 田舎御膳  | 1000 |
+------------+------------+------+
6 rows in set (0.00 sec)

mysql>

■集約関数

 参照したレコードの特定のフィールド名に着目して、そのフィールド名の値が数値の場合、最大値、最小値、平均値などの演算を行うことができます。このような演算を行う関数を集約関数あるいは集合関数と呼びます。

 次の例は、「単価」フィールドの平均値を計算しています。

mysql> SELECT AVG(単価) FROM tbl_商品表2;
+-----------+
| AVG(単価) |
+-----------+
| 1866.6667 |
+-----------+
1 row in set (0.03 sec)

mysql>

 参照した(条件にあった)レコード数を計数することもできます。

mysql> SELECT COUNT(*) FROM tbl_商品表2;
+----------+
| COUNT(*) |
+----------+
| 6     |
+----------+
1 row in set (0.00 sec)

mysql>

 

■グループ化

 あるフィールド名に着目し、その値が同じレコードを部分集合としてグループ化することができます。一般には、その部分集合ごとにある演算を行います。

 次のテーブル「tbl_商品」を参照することとします。

「tbl_商品」
+------------+--------------+----------------+------+
| 商品コード | 品目     | 品名      | 単価 |
+------------+--------------+----------------+------+
| 110     | せんべい   | 塩せんべい   | 200 |
| 120     | せんべい   | えびせんべい  | 300 |
| 130     | せんべい   | のりせんべい  | 350 |
| 210     | チョコレート | 板チョコ    | 200 |
| 220     | チョコレート | 棒ョコ     | 250 |
| 310     | つまみ    | つまみ詰め合せ | 500 |
+------------+--------------+----------------+------+

 次の例では、フィールド名「品目」に着目し、同じ「品目」の値のレコードをグループ化し、各グループのレコード数を計数しています。

mysql> SELECT 品目,COUNT(*) FROM tbl_商品 GROUP BY 品目;
+--------------+----------+
| 品目     | COUNT(*) |
+--------------+----------+
| せんべい   | 3     |
| つまみ    | 1     |
| チョコレート | 2     |
+--------------+----------+
3 rows in set (0.02 sec)

mysql>

 次の例は、グループごとの単価の合計値を計算しています。

mysql> SELECT 品目,SUM(単価) FROM tbl_商品 GROUP BY 品目;
+--------------+-----------+
| 品目     | SUM(単価) |
+--------------+-----------+
| せんべい   | 850    |
| つまみ    | 500    |
| チョコレート | 450    |
+--------------+-----------+
3 rows in set (0.00 sec)

mysql>

 また、グループごとの演算結果についてある条件にあったグループのみを参照(抽出)することができます。この場合はWHERE句でなくHAVING句を使います。

mysql> SELECT 品目,SUM(単価) FROM tbl_商品 GROUP BY 品目
  
-> HAVING SUM(単価) > 800;
+----------+-----------+
| 品目   | SUM(単価) |
+----------+-----------+
| せんべい | 850    |
+----------+-----------+
1 row in set (0.00 sec)

mysql>

■表結合と相関名

 データの正規化により作成されたテーブルは冗長性のない合理的な構造となりますが、逆に人間にはわかりにくいものとなっています。そこで、実際の利用では、正規化により分割されたテーブルを結合して、わかりやすくします。これを表結合といいます。

 次のテーブル「tbl_売上明細」とテーブル「tbl_商品1」を例にとります。

「tbl_売上明細」
+------------+------------+------+
| 伝票コード | 商品コード | 個数 |
+------------+------------+------+
| 1101    | 100     |  100|
| 1101    | 110     |  150|
| 1120    | 120     |   80|
| 1128    | 130     |  100|
+------------+------------+------+

「tbl_商品1」
+------------+--------------+------+
| 商品コード | 商品名    | 単価 |
+------------+--------------+------+
| 100     | チョコレート | 200 |
| 110     | キャンディ  | 300 |
| 120     | せんべい   | 250 |
| 130     | ケーキ    | 400 |
+------------+--------------+------+

 テーブル「tbl_売上明細」には「商品コード」はありますが、第2正規化を行っているので、商品名は別途テーブル「tbl_商品1」を参照しないとわかりません。たとえば、テーブル「tbl_売上明細」の「商品コード」='100'の商品名は、「tbl_商品1」の「商品コード」='100'のレコードの「商品名」を参照して、「チョコレート」であることがわかります。テーブル「tbl_売上明細」の「商品コード」フィールドのとなりに、「商品名」フィールドがあると、人間にとってわかりやすくなります。そこで、テーブル「tbl_売上明細」とテーブル「tbl_商品1」を結合させることを考えます。

 この場合、自然結合のための「NATURAL JOIN」句を使います。

mysql> SELECT * FROM tbl_売上明細 NATURAL JOIN tbl_商品1;
+-------+-------+------+-------+-------------+------+
| 伝票 | 商品 | 個数 | 商品 | 商品名   | 単価 |
| コード| コード|    | コード|       |    |
+-------+-------+------+-------+-------------+------+
| 1101 | 100  | 100 | 100  | チョコレート| 200 |
| 1101 | 110  | 150 | 110  | キャンディ | 300 |
| 1120 | 120  |  80 | 120  | せんべい  | 250 |
| 1128 | 130  | 100 | 130  | ケーキ   | 400 |
+-------+-------+------+-------+-------------+------+
4 rows in set (0.02 sec)

 同じような表結合は、等結合を用いたSELECT文でも記述できます。

mysql> SELECT tbl_売上明細.伝票コード,
  ->    tbl_売上明細.商品コード,
  ->    tbl_売上明細.個数,
  ->    tbl_商品1.商品コード,
  ->    tbl_商品1.商品名,
  ->    tbl_商品1.単価
  -> FROM tbl_売上明細,tbl_商品1
  -> WHERE tbl_売上明細.商品コード = tbl_商品1.商品コード;
+-------+-------+------+-------+-------------+------+
| 伝票 | 商品 | 個数 | 商品 | 商品名   | 単価 |
| コード| コード|    | コード|       |    |
+-------+-------+------+-------+-------------+------+
| 1101 | 100  | 100 | 100  | チョコレート| 200 |
| 1101 | 110  | 150 | 110  | キャンディ | 300 |
| 1120 | 120  |  80 | 120  | せんべい  | 250 |
| 1128 | 130  | 100 | 130  | ケーキ   | 400 |
+-------+-------+------+-------+-------------+------+
4 rows in set (0.02 sec)

 複数のテーブルのフィールド名を混在して使用する場合は、どのテーブルのどのフィールド名かが分かるように、「テーブル名.フィールド名」のようにテーブル名とフィールド名を「.」(半角ピリオド)で結合した表記を使います。

 ただ、このような表記では、表記が長くわかりづらくなるので、「相関名」を使ってより簡単に表記することができます。相関名とはたとえば、テーブル「tbl_売上明細」を1文字のアルファベット「M」で表記するような方法です。相関名は、FROM句内で、テーブル名の後に半角スペース1個以上で区切って相関名となるアルファベットを挿入することで定義します。

mysql> SELECT M.伝票コード,
  ->    M.商品コード,
  ->    M.個数,
  ->    S.商品コード,
  ->    S.商品名,
  ->    S.単価
  -> FROM tbl_売上明細 M,tbl_商品1 
  -> WHERE M.商品コード = S.商品コード;
+-------+-------+------+-------+-------------+------+
| 伝票 | 商品 | 個数 | 商品 | 商品名   | 単価 |
| コード| コード|    | コード|       |    |
+-------+-------+------+-------+-------------+------+
| 1101 | 100  | 100 | 100  | チョコレート| 200 |
| 1101 | 110  | 150 | 110  | キャンディ | 300 |
| 1120 | 120  |  80 | 120  | せんべい  | 250 |
| 1128 | 130  | 100 | 130  | ケーキ   | 400 |
+-------+-------+------+-------+-------------+------+
4 rows in set (0.02 sec)

■副問い合わせ

 MySQLの4.0版以前では、副問い合わせ(サブクエリ)はサポートしていないようです。

 

■ビュー

 MySQLの4.0版以前では、ビュー(VIEW)はサポートしていないようです。

 


前へ | 目次へ |次へ  | YCポータルサイト

執筆 山田豊通
更新日: 2004年12月13日