SQLWHEREステートメント はじめに
- WHERE句は、テーブルからデータをフェッチする際の条件を含めるために使用されます。
- データがテーブルからプルされるときに従わなければならない条件を指定する必要がある場合、その場合は句が使用されます。
- where句は、selectステートメントから取得するレコードをフィルタリングして、データのより小さなサブセットを取得するために使用されます。
- where句は、結合操作を実行するためにも使用されます。
- where句は、指定された条件を満たすテーブルからのレコードのみを返します。
- この句は、SELECTクエリで使用されるだけでなく、UPDATEおよびDELETEクエリでも使用できます。
- SELECTクエリでwhere句を使用する
- テーブルからすべての列を取得するためのSELECTクエリを含むWhere句。
- テーブルからすべてのレコードを取得するには、アスタリスク (*)記号が使用されています。
構文:
SELECT *FROM TABLE_NAME WHERE condition;
例:
まず、「bookdb」という名前のデータベースを作成します。次に、そのデータベースにテーブル「ブック」を作成し、テーブルにレコードを挿入します。以降の例では、同じデータベースと同じテーブルを検討します。
次に、SELECTクエリを使用してwhere句を適用し、本の価格が200に等しいテーブルからすべての列を取得します。
mysql> CREATE DATABASE bookdb; Query OK, 1 row affected (0.07 sec) mysql> USE bookdb; Database changed mysql> CREATE TABLE book(Book_ID INT NOT NULL AUTO_INCREMENT, Book_Name VARCHAR(100) NOT NULL, Book_Author VARCHAR(40) NOT NULL, Book_Price INT NOT NULL, PRIMARY KEY(Book_ID)); Query OK, 0 rows affected (0.24 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Learn MySQL","Abdul S", 180); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Explained","Andrew Comeau", 150); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Cookbook","Paul DuBois", 250); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("murach's MySQL","Joel Murach", 200); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Head First SQL","Lynn Beighley", 300); Query OK, 1 row affected (0.07 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Book_ID =4のレコードは1つだけで、価格は200です。したがって、その特定のレコードのすべての列が表示されます。
- テーブルから1つまたは複数の特定の列を取得するためのSELECTクエリを含むWhere句。
- テーブルから特定の列を取得するには、取得するすべての列の名前をクエリ自体で指定する必要があります。
- 取得する特定の列名はコンマで区切られます。
構文:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
例:
SELECTクエリでwhere句を適用して、本から特定の列(Book_ID、Book_Price)を取得します。 本の価格が200に等しいテーブル。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT Book_ID,Book_Price FROM book where Book_Price=200; +---------+------------+ | Book_ID | Book_Price | +---------+------------+ | 4 | 200 | +---------+------------+ 1 row in set (0.00 sec)
Book_ID =4のレコードは1つだけで、その価格は200です。したがって、その特定のレコードのBook_IDとBook_Priceが表示されます。
- UPDATEクエリでwhere句を使用する
構文:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
例:
ブックテーブルにUPDATEクエリを含むwhere句を適用して、where句の条件としてBook_IDを指定することにより、特定のレコードのBook_NameとBook_Authorを更新します。
mysql> SELECT *FROM book; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | MySQL Cookbook | Paul DuBois | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------+---------------+------------+ 5 rows in set (0.00 sec) mysql> UPDATE book SET Book_name="Database Management Systems", Book_Author="Raghu Ramakrishnan" WHERE Book_ID=3; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec)
Book_ID =3のレコードは1つだけで、そのレコードのBook_nameとBook_Authorを変更しました。したがって、更新されたテーブルが表示されます。
- DELETEクエリでwhere句を使用する
構文:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
例:
ブックテーブルにDELETEクエリを含むwhere句を適用します
where句の条件としてBook_IDを指定して、特定のBook_IDを持つ本を削除します。
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec) mysql> DELETE FROM book WHERE Book_ID=5; Query OK, 1 row affected (0.23 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
Book_ID =5のレコードは1つだけで、そのレコード全体をブックテーブルから削除しました。したがって、更新されたテーブルが表示されます。
WHEREステートメントを使用するオペレーター
where句で演算子を使用できます。これらの演算子は、SELECT、UPDATE、およびDELETEクエリのwhere句と一緒に使用できます。
- 等しい(=)
等しい(=)演算子をwhere句で使用すると、テーブルに存在する列名の値がクエリで指定された列名の値と等しい場合は常に、テーブルからそれらのレコードが取得されます。
例:
SELECTクエリでwhere句を適用して、本の価格が200に等しいテーブルからこれらのレコードを取得します。
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Book_ID =4のレコードは1つだけで、価格は200です。したがって、その特定のレコードのすべての列が表示されます。
- より大きい(>)
大なり(>)演算子をWhere句で使用すると、テーブルに存在する列名の値がクエリで指定された列名の値よりも大きい場合は常に、テーブルからそれらのレコードが取得されます。
例:
SELECTクエリでwhere句を適用して、本の価格が150を超えるテーブルからこれらのレコードを取得します。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price > 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 3 rows in set (0.00 sec)
Book_ID =1、3、4の3つのレコードがあり、価格は150を超えています。したがって、これらのレコードのすべての列が表示されます。
- 未満(<)
less(<)演算子をwhere句で使用すると、テーブルに存在する列名の値がクエリで指定された列名の値よりも小さい場合は常に、テーブルからそれらのレコードが取得されます。
例:
SELECTクエリでwhere句を適用して、本の価格が200未満のテーブルからこれらのレコードを取得します。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price < 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | +---------+-----------------+---------------+------------+ 2 rows in set (0.00 sec)
Book_ID =1と2の2つのレコードがあり、価格は200未満です。したがって、これらのレコードのすべての列が表示されます。
- 以上(> =)
大なり以上(> =)演算子をwhere句で使用すると、テーブルに存在する列名の値が、で指定された列名の値以上である場合は常に、テーブルからそれらのレコードが取得されます。クエリ。
例:
SELECTクエリでwhere句を適用して、本の価格が150以上のテーブルからレコードを取得します。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price >= 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
Book_ID =1、2、3、4の4つのレコードがあり、価格が150以上であることがわかります。したがって、これらのレコードのすべての列が表示されます。
- 以下(<=)
以下(<=)演算子をwhere句で使用すると、テーブルに存在する列名の値がで指定された列名の値以下である場合は常に、テーブルからそれらのレコードが取得されます。クエリ。
例:
SELECTクエリでwhere句を適用して、本の価格が200以下のテーブルからレコードを取得します。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <= 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Book_ID =1、2、4の3つのレコードがあり、価格は200以下です。したがって、これらのレコードのすべての列が表示されます。
- 等しくない(<>)
not equal(<>)演算子をwhere句で使用すると、クエリで指定された列名の値がテーブルに存在する列名の値と一致しない場合は常に、テーブルからそれらのレコードが取得されます。
例:
SELECTクエリでwhere句を適用して、本の価格が250に等しくないテーブルからこれらのレコードを取得します。
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <> 250; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Book_ID =1、2、4の3つのレコードがあり、価格は250に等しくありません。したがって、これらのレコードのすべての列が表示されます。