<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yukun&#039;s Blog &#187; SELECT</title>
	<atom:link href="http://www.yukun.info/blog/tag/select/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yukun.info</link>
	<description>難しいことは分かりやすく、簡単なことは面白く紹介</description>
	<lastBuildDate>Thu, 26 Jan 2012 03:33:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQL: 同じ値のフィールドをグルーピング &#8211; GROUP BY句</title>
		<link>http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html</link>
		<comments>http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html#comments</comments>
		<pubDate>Thu, 20 Nov 2008 13:40:10 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[ORDER]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://www.yukun.info/?p=1254</guid>
		<description><![CDATA[前回はソートした検索結果を出力しましたね。今回は、フィールドの値が同じレコードをグルーピングし、そのレコード集の任意のカラムに対してAVG(),MIN(),MAX(),COUNT(),SUM()&#8230;などの関数計 &#8230; <a href="http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html">MySQL: 同じ値のフィールドをグルーピング &#8211; GROUP BY句</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>前回は<a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html" title="MySQL: レコードを昇順・降順にソートして出力 - ORDER BY句 - Yukun's Blog">ソートした検索結果を出力</a>しましたね。今回は、フィールドの値が同じレコードをグルーピングし、そのレコード集の任意のカラムに対してAVG(),MIN(),MAX(),COUNT(),SUM()&#8230;などの関数計算を適応してみます。使用するレコードは以下のものを用います。</p>
<pre>
mysql> SELECT * FROM product_list
    -> ORDER BY date, name;
+----+-----------+----------+------------+
| id | name      | quantity | date       |
+----+-----------+----------+------------+
| 10 | chocolate | 18       | 2009-11-17 |
|  7 | cake      | 35       | 2009-11-18 |
|  6 | candy     | 28       | 2009-11-18 |
|  3 | chocolate | 40       | 2009-11-18 |
|  8 | parfait   | 18       | 2009-11-18 |
|  4 | cake      | 29       | 2009-11-19 |
|  2 | candy     | 32       | 2009-11-19 |
|  1 | chocolate | 16       | 2009-11-19 |
|  5 | parfait   | 29       | 2009-11-19 |
|  9 | eclair    | 56       | 2009-11-20 |
+----+-----------+----------+------------+
</pre>
<p>背景状況はとあるお菓子工場の11/17～20までの出荷製品とその個数の記録、とでもしておきましょう。さて、このレコード集から「<em>4日間で一番出荷されたお菓子</em>」を判別するクエリは以下のようになります。</p>
<pre>
mysql> SELECT name, SUM(quantity)
    -> FROM product_list
    -> GROUP BY name
    -> ORDER BY SUM(quantity) DESC;
+-----------+---------------+
| name      | SUM(quantity) |
+-----------+---------------+
| chocolate |            74 |
| cake      |            64 |
| candy     |            60 |
| eclair    |            56 |
| parfait   |            47 |
+-----------+---------------+
</pre>
<blockquote><p>＜SELECT文の前半(FROM,　WHERE句など)＞<br />
GROUP BY ＜列名＞</p></blockquote>
<p>まず、結果の列名がSUM(quantity)になっていることに注目してください。GROUP BY句によりnameフィールドが同じ値のレコードを集計します。例えばnameフィールドがcakeのレコードはidが7と4です。その二つのレコードは一つのグループとみなされます（同じ値なので）。そのグループ（レコード集）に対してSUM()関数を適応しています。SUM()は合計を返しますので、35+29=64と上の出力結果になります。他のフィールド値に対しても同様の計算を行うことで、「<em>4日間で一番出荷されたお菓子</em>」はchocolateと分かります（最後にLIMIT 1を付けてもいいです）。</p>
<p>同様に「<em>1日あたりの平均出荷量が最高のお菓子</em>」を求めるクエリは下のようになります。</p>
<pre>
mysql> SELECT name, ROUND(AVG(quantity),0)
    -> FROM product_list
    -> GROUP BY name
    -> ORDER BY AVG(quantity) DESC;
+-----------+------------------------+
| name      | ROUND(AVG(quantity),0) |
+-----------+------------------------+
| eclair    |                     56 |
| cake      |                     32 |
| candy     |                     30 |
| chocolate |                     25 |
| parfait   |                     23 |
+-----------+------------------------+
</pre>
<p>ROUND()関数は小数点の切捨てに使っています。<br />
もしGROUP BY句を用いずに上述の関数（AVG,SUM）を用いると以下のようなエラーが出ます。</p>
<pre>
mysql> SELECT name, ROUND(AVG(quantity),0)
    -> FROM product_list;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
with no GROUP columns is illegal if there is no GROUP BY clause
</pre>
<p>グループカラム（＝同値のフィールドのレコード集）を渡さなければいけませんので、1つのカラムを渡しても意味無い、という解釈でいいのかな。<br />
ちなみに、<strong>COUNT()</strong>関数は引数に列（カラム）名を取り、その<strong>行（レコード）数を返します</strong>。</p>
<pre>
mysql> SELECT COUNT(name)
    -> FROM product_list;
+-------------+
| count(name) |
+-------------+
|          10 |
+-------------+
</pre>
<p>この場合はGROUP BY句も必要ありません。<br />
今記事では取り上げませんでしたがMIN(),MAX()はそれぞれ最小、最大値を返します（文字どおりですね）。</p>
<h2>リファレンス</h2>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/group-by-optimization.html" title="MySQL :: MySQL 5.1 Reference Manual :: 7.2.15 GROUP BY Optimization" target="_blank">MySQL :: MySQL 5.1 Reference Manual :: 7.2.15 GROUP BY Optimization</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html" title="MySQL :: MySQL 5.1 Reference Manual :: 11.12.1 GROUP BY (Aggregate) Functions" target="_blank">MySQL :: MySQL 5.1 Reference Manual :: 11.12.1 GROUP BY (Aggregate) Functions</a></li>
</ul>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html" rel="bookmark" title="2008年11月19日">MySQL: レコードを昇順・降順にソートして出力 &#8211; ORDER BY句</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html" rel="bookmark" title="2008年11月13日">MySQL: データ検索クエリの基本 &#8211; SELECT文、WHERE句、LIKE、IN、BETWEENキーワード</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-update-delete-record.html" rel="bookmark" title="2008年11月16日">MySQL: レコードの更新と削除 &#8211; UPDATE、DELETE文</a></li>
<li><a href="http://www.yukun.info/blog/2008/12/air-actionscript-sqlite-statement.html" rel="bookmark" title="2008年12月22日">AIR: SQLiteでデータの挿入と検索 &#8211; SQLConnection、SQLStatementクラス</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-insert-into-table-values.html" rel="bookmark" title="2008年11月11日">MySQL: データをテーブルに追加 &#8211; INSERT文、INTO、VALUES句</a></li>
</ul>
<p><!-- Similar Posts took 9.059 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html">MySQL: 同じ値のフィールドをグルーピング &#8211; GROUP BY句</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL: レコードを昇順・降順にソートして出力 &#8211; ORDER BY句</title>
		<link>http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html</link>
		<comments>http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html#comments</comments>
		<pubDate>Wed, 19 Nov 2008 11:30:30 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[ORDER]]></category>
		<category><![CDATA[SELECT]]></category>
		<category><![CDATA[Sort]]></category>
		<category><![CDATA[WHERE]]></category>

		<guid isPermaLink="false">http://www.yukun.info/?p=1252</guid>
		<description><![CDATA[前回はUPDATE文とDELETE文を扱いました。今回は下記のレコードを含むテーブルに対して、SELECT文のORDER BY句を用いて任意のレコードをソートして出力する例を示します。 mysql> SELECT * F &#8230; <a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html">MySQL: レコードを昇順・降順にソートして出力 &#8211; ORDER BY句</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>前回は<a href="http://www.yukun.info/blog/2008/11/mysql-update-delete-record.html" title="MySQL: レコードの更新と削除 - UPDATE、DELETE文 - Yukun's Blog">UPDATE文とDELETE文</a>を扱いました。今回は下記のレコードを含むテーブルに対して、SELECT文のORDER BY句を用いて任意のレコードをソートして出力する例を示します。</p>
<pre>
mysql> SELECT * FROM book_list_auto;
+----+------------------------------------+---------+-------+------------+
| id | title                              | author  | price | date       |
+----+------------------------------------+---------+-------+------------+
|  1 | eu,                                | Brody   | 2330  | 2004-06-09 |
|  2 | rutrum. Fusce dolor quam,          | James   | 2150  | 2006-02-25 |
|  3 | ultrices sit amet, risus.          | Wang    | 2495  | 2009-11-12 |
|  4 | placerat, augue. Sed molestie.     | Lev     | 2752  | 2005-05-02 |
|  5 | Proin mi.                          | Dante   | 1155  | 2004-07-23 |
|  6 | sed,                               | Porter  | 4566  | 2006-05-14 |
|  7 | onec sollicitudin adipiscing       | Sader   | 2503  | 2004-04-28 |
|  8 | tortor. Integer aliquam adipiscing | Desiree | 2810  | 2002-08-24 |
|  9 | Mauris eu                          | Maggy   | 3843  | 2001-04-21 |
| 10 | eget metus. In nec orci.           | Rhea    | 4820  | 2002-11-05 |
+----+------------------------------------+---------+-------+------------+
</pre>
<p>ランダムに生成した10レコード（ブックリスト）を使います。</p>
<p>まず、値段の安い順、すなわちpriceフィールドを昇順で出力するSQL文は下のようになります。</p>
<pre>
mysql> SELECT title, price
    -> FROM book_list_auto
    -> ORDER BY price;
+------------------------------------+-------+
| title                              | price |
+------------------------------------+-------+
| Proin mi.                          | 1155  |
| rutrum. Fusce dolor quam,          | 2150  |
| eu,                                | 2330  |
| ultrices sit amet, risus.          | 2495  |
| onec sollicitudin adipiscing       | 2503  |
| placerat, augue. Sed molestie.     | 2752  |
| tortor. Integer aliquam adipiscing | 2810  |
| Mauris eu                          | 3843  |
| sed,                               | 4566  |
| eget metus. In nec orci.           | 4820  |
+------------------------------------+-------+
</pre>
<blockquote><p>＜SELECT文の前半(FROM,　WHERE句など)＞<br />
ORDER BY ＜列名1＞ [, ＜列名2＞, ...]</p></blockquote>
<p>ORDER BYの後ろにフィールド名を指定することで、そのフィールド基準にソートしたレコードを返します。デフォルトでは昇順(<strong>asc</strong>ending)ソートでそれを明示的に示す場合は、ASCキーワードをフィールド名の後ろに付け足します。上の例では、最終行をORDER BY price ASC;しても結果は同じです。</p>
<p>対して、あるフィールドを降順(<strong>desc</strong>ending)にソートする場合はフィールド名の後ろにDESCキーワードを付け足します。以下の例で確認してみましょう。</p>
<pre>
mysql> SELECT title, price
    -> FROM book_list_auto
    -> ORDER BY price DESC
    -> LIMIT 3;
+--------------------------+-------+
| title                    | price |
+--------------------------+-------+
| eget metus. In nec orci. | 4820  |
| sed,                     | 4566  |
| Mauris eu                | 3843  |
+--------------------------+-------+
</pre>
<p>確かに、降順、ここで例では値段の高い順にソートされていますね。</p>
<h2>LIMIT句で表示行数を指定</h2>
<p>さて、ここで使われているLIMIT句は出力する行数を指定することが出来ます。上の例では</p>
<blockquote><p>LIMIT ＜表示行数＞</p></blockquote>
<p>より3行（値段の高い本ベスト3）を表示しています。LIMIT句には他にも、</p>
<blockquote><p>LIMIT ＜表示開始インデックス＞,＜表示行数＞</p></blockquote>
<p>という書き方があり、以下のSQL文は上と同じ結果を出力します。ちなみにインデックスは<strong>0から</strong>数え始めます。</p>
<pre>
mysql> SELECT title, price
    -> FROM book_list_auto
    -> ORDER BY price DESC
    -> LIMIT 0, 3;
</pre>
<p>最後に、ORDER BY句では複数のフィールドを指定できますが、その際のソートの適応順序は指定した順（書いた順）になります。次の例で確認してみましょう。</p>
<pre>
mysql> SELECT title, author, date
    -> FROM book_list_auto
    -> ORDER BY date DESC, author ASC
    -> LIMIT 5;
+--------------------------------+--------+------------+
| title                          | author | date       |
+--------------------------------+--------+------------+
| ultrices sit amet, risus.      | Wang   | 2009-11-12 |
| sed,                           | Porter | 2006-05-14 |
| rutrum. Fusce dolor quam,      | James  | 2006-02-25 |
| placerat, augue. Sed molestie. | Lev    | 2005-05-02 |
| Proin mi.                      | Dante  | 2004-07-23 |
+--------------------------------+--------+------------+
</pre>
<p>上の例では、dateフィールドでソートして、その中で同じ値があった場合はauthorをソートして順序を決めています。うーん、このレコード集ではちょっと分かり難いですね。</p>
<h2>リファレンス</h2>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html" title="MySQL :: MySQL 5.1 Reference Manual :: 7.2.14 ORDER BY Optimization" target="_blank">MySQL :: MySQL 5.1 Reference Manual :: 7.2.14 ORDER BY Optimization</a></li>
</ul>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html" rel="bookmark" title="2008年11月13日">MySQL: データ検索クエリの基本 &#8211; SELECT文、WHERE句、LIKE、IN、BETWEENキーワード</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html" rel="bookmark" title="2008年11月20日">MySQL: 同じ値のフィールドをグルーピング &#8211; GROUP BY句</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-update-delete-record.html" rel="bookmark" title="2008年11月16日">MySQL: レコードの更新と削除 &#8211; UPDATE、DELETE文</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-create-table-drop-describe.html" rel="bookmark" title="2008年11月1日">MySQL: 新規テーブルを作成・削除、構造の確認 &#8211; CREATE TABLE、DROP TABLE、DESCRIBE文</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-insert-into-table-values.html" rel="bookmark" title="2008年11月11日">MySQL: データをテーブルに追加 &#8211; INSERT文、INTO、VALUES句</a></li>
</ul>
<p><!-- Similar Posts took 10.508 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html">MySQL: レコードを昇順・降順にソートして出力 &#8211; ORDER BY句</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL: データ検索クエリの基本 &#8211; SELECT文、WHERE句、LIKE、IN、BETWEENキーワード</title>
		<link>http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html</link>
		<comments>http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html#comments</comments>
		<pubDate>Thu, 13 Nov 2008 14:10:31 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[SELECT]]></category>
		<category><![CDATA[WHERE]]></category>

		<guid isPermaLink="false">http://www.yukun.info/?p=1246</guid>
		<description><![CDATA[前回までにテーブルに一定のデータを追加しましたので、今回はそのデータを検索するクエリ文を以下の場合に分けて練習してみます。 SELECT文の基本形 &#8211; WHERE句 比較文字列内にワイルドカードを指定 &#8 &#8230; <a href="http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html">MySQL: データ検索クエリの基本 &#8211; SELECT文、WHERE句、LIKE、IN、BETWEENキーワード</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yukun.info/blog/2008/11/mysql-insert-into-table-values.html" title="MySQL: データをテーブルに追加 - INSERT文、INTO、VALUES句 - Yukun's Blog">前回まで</a>にテーブルに一定のデータを追加しましたので、今回はそのデータを検索するクエリ文を以下の場合に分けて練習してみます。</p>
<ul>
<li>SELECT文の基本形 &#8211; WHERE句</li>
<li>比較文字列内にワイルドカードを指定 &#8211; LIKEキーワード、「%」、「_」記号</li>
<li>比較範囲の指定 &#8211; BETWEENキーワード</li>
<li>複数のOR結合をIN句でまとめる</li>
<li>NOTキーワードで条件の反転</li>
<li>NULLフィールドの検索 &#8211; IS NULL、IS NOT NULL</li>
</ul>
<p>まず、扱うテーブル内のレコードの一覧を下記に示します。</p>
<pre>
mysql> SELECT * FROM book_list;
+---------+--------+--------+-------+-----------------------+
| book_id | title  | author | price | comments              |
+---------+--------+--------+-------+-----------------------+
|       1 | book_A | auth_A |  1500 | good, bad, excellence |
|       2 | book_B | auth_B |  2900 | not bad, good         |
|       3 | book_C | auth_C |  1800 | interesting, amazing  |
|       4 | book_D | auth_D |   700 | sad, depress          |
|       5 | book_E | auth_E |  1200 | good, funny           |
|       6 | book_F | auth_C |  3500 | bored, difficult      |
|       7 | book_G | auth_A |   400 | very good!, excellent |
+---------+--------+--------+-------+-----------------------+
</pre>
<h2>SELECT文の基本形 &#8211; WHERE句</h2>
<p>SELECT文では指定したテーブル（FROM句）に対して、検索条件（WHERE句）に<strong>マッチするレコード（行）の指定フィールド（列）</strong>を表示します。SELECTに続くのは列名、と覚えましょう。以下、具体例。</p>
<blockquote><p><code>SELECT ＜列名1＞[, ＜列名2＞, ...] FROM ＜テーブル名＞<br />
WHERE<br />
＜検索条件＞;</code></p></blockquote>
<p>WHERE句は省略可能。</p>
<pre>
mysql> SELECT title, price FROM book_list
    -> WHERE
    -> author = 'auth_A';
+--------+-------+
| title  | price |
+--------+-------+
| book_A |  1500 |
| book_G |   400 |
+--------+-------+
</pre>
<p>author列がauth_Aに合致するレコードを検索し、そのtitle、price列を表示しています。「=」は等価演算子です（代入演算子ではありません）。ちなみに<strong>非等価演算子は「<>」</strong>です。</p>
<pre>
mysql> SELECT * FROM book_list
    -> WHERE
    -> price < 1500;
+---------+--------+--------+-------+-----------------------+
| book_id | title  | author | price | comments              |
+---------+--------+--------+-------+-----------------------+
|       4 | book_D | auth_D |   700 | sad, depress          |
|       5 | book_E | auth_E |  1200 | good, funny           |
|       7 | book_G | auth_A |   400 | very good!, excellent |
+---------+--------+--------+-------+-----------------------+
</pre>
<p>アスタリスク「*」はワイルドカードで全ての列を返します。</p>
<pre>
mysql> SELECT title, price FROM book_list
    -> WHERE
    -> price >= 1800
    -> AND
    -> author = 'auth_C';
+--------+-------+
| title  | price |
+--------+-------+
| book_C |  1800 |
| book_F |  3500 |
+--------+-------+
</pre>
<p>WHERE句内の複数の条件を結合する際はAND、ORキーワードを用います。</p>
<h2>比較文字列内にワイルドカードを指定 - LIKEキーワード、「%」、「_」記号</h2>
<p>WHERE句内の比較条件に用いる演算子の一種と捉えてもいいかもしれません。</p>
<pre>
mysql> SELECT title, author, comments FROM book_list
    -> WHERE
    -> comments LIKE '%excellen%';
+--------+--------+-----------------------+
| title  | author | comments              |
+--------+--------+-----------------------+
| book_A | auth_A | good, bad, excellence |
| book_G | auth_A | very good!, excellent |
+--------+--------+-----------------------+
</pre>
<p>「%」は<strong>任意の文字列</strong>にマッチします。対して「_」任意の<strong>1文字</strong>にマッチします。</p>
<h2>比較範囲の指定 - BETWEENキーワード</h2>
<p>price >= 1000 AND price <= 2000の様な条件を簡潔に書くことが出来ます。</p>
<pre>
mysql&gt; SELECT title, price FROM book_list
    -&gt; WHERE
    -&gt; price &gt;= 1000 AND price &lt;= 2000;
+--------+-------+
| title  | price |
+--------+-------+
| book_A |  1500 |
| book_C |  1800 |
| book_E |  1200 |
+--------+-------+
</pre>
<p>これを書き直すと、</p>
<pre>
mysql> SELECT title, price FROM book_list
    -> WHERE
    -> price BETWEEN 1000 AND 2000;
+--------+-------+
| title  | price |
+--------+-------+
| book_A |  1500 |
| book_C |  1800 |
| book_E |  1200 |
+--------+-------+
</pre>
<p>確かに実行結果は合致していますね。</p>
<h2>複数のOR結合をIN句でまとめる</h2>
<pre>
mysql> SELECT title, author, price FROM book_list
    -> WHERE
    -> author IN ('auth_A', 'auth_C');
+--------+--------+-------+
| title  | author | price |
+--------+--------+-------+
| book_A | auth_A |  1500 |
| book_C | auth_C |  1800 |
| book_F | auth_C |  3500 |
| book_G | auth_A |   400 |
+--------+--------+-------+
</pre>
<h2>NOTキーワードで条件の反転</h2>
<p>LIKE、BETWEEN、IN句と共にも使用することが出来ます。その場合は通常比較フィールドの直前に書きます。</p>
<pre>
mysql> SELECT title, author, price FROM book_list
    -> WHERE
    -> NOT author IN ('auth_A', 'auth_C');
+--------+--------+-------+
| title  | author | price |
+--------+--------+-------+
| book_B | auth_B |  2900 |
| book_D | auth_D |   700 |
| book_E | auth_E |  1200 |
+--------+--------+-------+
</pre>
<p>だだし、INキーワードではINの直前に書いてもOKです。</p>
<pre>
mysql> SELECT title, author, price FROM book_list
    -> WHERE
    -> author NOT IN ('auth_A', 'auth_C');
+--------+--------+-------+
| title  | author | price |
+--------+--------+-------+
| book_B | auth_B |  2900 |
| book_D | auth_D |   700 |
| book_E | auth_E |  1200 |
+--------+--------+-------+
</pre>
<h2>NULLフィールドの検索 &#8211; IS NULL、IS NOT NULL</h2>
<pre>
mysql> SELECT * FROM book_list
    -> WHERE title IS NULL;
Empty set (0.00 sec)
</pre>
<pre>
mysql> SELECT * FROM book_list
    -> WHERE title IS NOT NULL;
+---------+--------+--------+-------+-----------------------+
| book_id | title  | author | price | comments              |
+---------+--------+--------+-------+-----------------------+
|       1 | book_A | auth_A |  1500 | good, bad, excellence |
|       2 | book_B | auth_B |  2900 | not bad, good         |
|       3 | book_C | auth_C |  1800 | interesting, amazing  |
|       4 | book_D | auth_D |   700 | sad, depress          |
|       5 | book_E | auth_E |  1200 | good, funny           |
|       6 | book_F | auth_C |  3500 | bored, difficult      |
|       7 | book_G | auth_A |   400 | very good!, excellent |
+---------+--------+--------+-------+-----------------------+
</pre>
<h2>リファレンス</h2>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/select.html" title="MySQL :: MySQL 5.1 Reference Manual :: 12.2.9 SELECT Syntax" target="_blank">MySQL :: MySQL 5.1 Reference Manual :: 12.2.9 SELECT Syntax</a></li>
</ul>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/11/mysql-update-delete-record.html" rel="bookmark" title="2008年11月16日">MySQL: レコードの更新と削除 &#8211; UPDATE、DELETE文</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-sort-record-order-by-asc-desc.html" rel="bookmark" title="2008年11月19日">MySQL: レコードを昇順・降順にソートして出力 &#8211; ORDER BY句</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-insert-into-table-values.html" rel="bookmark" title="2008年11月11日">MySQL: データをテーブルに追加 &#8211; INSERT文、INTO、VALUES句</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/alter-table-add-drop-change-modify.html" rel="bookmark" title="2008年11月7日">MySQL: 既存テーブルの構造の変更 &#8211; ALTER TABLE文、CHANGE COLUMN句</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/mysql-group-by-same-value-field.html" rel="bookmark" title="2008年11月20日">MySQL: 同じ値のフィールドをグルーピング &#8211; GROUP BY句</a></li>
</ul>
<p><!-- Similar Posts took 8.472 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html">MySQL: データ検索クエリの基本 &#8211; SELECT文、WHERE句、LIKE、IN、BETWEENキーワード</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/11/mysql-query-select-where-in-like-between.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

