MySQL:MySQLの基本的な構文の書き方

MySQLSQL文を直接書くときがあります。
データベースで直接操作したり、phpなどのシステム内でもSQL文を直接記述し、データを取得する場合があります。

いつも忘れてしますので、MySQL基本的構文の書き方をメモします。


MySQL 構文

SELECT

指定したテーブルのデータを検索、取得します。
*(アスタリスク)で指定した場合、全てのフィールドのデータを取得します。

・全てのフィールドの値を取得する場合

SELECT * FROM テーブル WHERE 条件式 AND 条件式;

・取得するフィールドを指定する場合

SELECT フィールド1, フィールド2, フィールド3 FROM テーブル WHERE 条件式 AND 条件式;

INSERT

指定したテーブルにデータを追加します。

INSERT INTO テーブル (フィールド1, フィールド2, フィールド3) VALUES (フィールド1の値, フィールド2の値, フィールド3の値);

UPDATE

条件式で一致したデータを更新します。

UPDATE テーブル SET フィールド = 値, フィールド = 値 WHERE 条件式 AND 条件式;

DELETE

条件式で一致したデータを削除します。

DELETE FROM テーブル WHERE 条件式 AND 条件式;

MySQL:サブクエリを使用したデータ取得

MySQLサブクエリを使用してデータを取得することがあります。

複雑な仕様のデータベースや複数のテーブルが紐づいていたりなど、サブクエリを使用すると簡単に値を取得できることがあります。

今回はMySQLサブクエリを使用してデータを取得する際の基本的な方法をメモします。


サブクエリ

サブクエリは副問合せとも言います。
SELECTで取得した値を別のSQL文のSELECT句やWHERE句などで使用します。
一つのSQL文の中にもう一つのSELECT文があるイメージです。
サブクエリは()で囲って使用します。

SELECT
 フィールド 
FROM
 テーブル 
WHERE
 フィールド 演算子 (SELECT フィールド FROM テーブル WHERE フィールド 演算子 値)
;

サブクエリの使用方法

userテーブルのtestという名前のidを取得して、
取得したユーザのアイテムデータを取得する場合

DB

・userテーブル

id name
1 hoge
2 test
3 sample

・itemテーブル

id user_id item_name
1 1 りんご
2 2 いちご
3 2 ぶどう
4 1 ぶどう
5 3 りんご

SQL

SELECT * FROM item WHERE user_id = (SELECT id FROM user WHERE name = 'test');

itemテーブルのidが2と3のレコードを取得することができます。


他のテーブルから値を持ってきて、取得した値を条件に使いたい時などに便利です。

MySQL:INSERTで複数行追加する

MySQLでデータをINSERTする方法と複数のレコードを1つのSQLで追加する方法をメモします。


INSERT文の書式

INSERT INTO テーブル (フィールド, フィールド) VALUES (データ, データ);

INSERT文の使用例

「user_table」テーブルに1行データを追加する場合は、
下記のように記載します。

INSERT INTO user_table (id, name, memo, status) VALUES (1, 'test1', 'メモ', 1);

また、フィールドの値を全て指定する場合は、
フィールド名を省略することが可能です。

INSERT INTO user_table VALUES (1, 'test1', 'メモ', 1);

複数行データを追加する場合は下記のように記載します。

INSERT INTO user_table (id, name, memo, status) VALUES (1, 'test1', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (2, 'test2', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (3, 'test3', 'メモ', 1);
INSERT INTO user_table (id, name, memo, status) VALUES (4, 'test4', 'メモ', 1);

複数レコードを1つのSQL文で実行する場合は
下記のようにカンマ区切りで記載します。

INSERT INTO user_table (id, name, memo, status) VALUES 
(1, 'test1', 'メモ', 1),
(2, 'test2', 'メモ', 1),
(3, 'test3', 'メモ', 1),
(4, 'test4', 'メモ', 1);

php:phpでmysqlデータベースに接続する

phpでmysqlデータベースに接続する基本的な方法を記載します。
また、簡単なSQLの実行とデータ取得の方法を記載します。

■ 使用する関数
「mysql_connect」
接続先の情報を設定し、mysqlに接続する。
phpとmysqlが同じサーバにある場合は、’localhost’または’127.0.0.1’で設定することができる。

接続ID = mysql_connect([ホスト名], [ユーザー名], [パスワード])

「mysql_select_db」
接続するデータベースを選択する。

mysql_select_db([データベース名], 接続ID)

「mysql_query」
SQLを実行する。

SQL結果ID = mysql_query(SQL文, 接続ID)

「mysql_fetch_array」
検索結果レコードを取得する。

連想配列 = mysql_fetch_array(SQL結果ID)

「mysql_close」
mysqlデータベースを切断する。

mysql_close(接続ID)

■ 使用例

// mysqlに接続
$conn = mysql_connect('localhost', 'root', 'password');

// データベースを選択
$db = mysql_select_db('database_name', $conn);

// 接続に失敗した場合
if(!$conn || !$db){
	die('データベースの接続に失敗しました。');
}

// SQLを実行
$sql = " SELECT * FROM table_name WHERE 1 = 1 ";
$res = mysql_query($sql, $conn);

// レコードを取得
while ($row = mysql_fetch_array($res)) {
	$data[] = $row;
}

// DB切断
mysql_close($conn);