
データを効率的に処理するエッセンスを教えます
連載:SQL実践講座(1)
SQLの基礎 「SELECT」文を覚えよう
篠原光太郎
2000/6/21
|
リレーショナルデータベースシステム(RDBMS)も、今や、システムの構築には不可欠なものとなりました。皆さんが目にしているシステムや、管理しているシステムでも、RDBMSが使われていないシステムを探すほうが大変ではないでしょうか。RDBMSの普及にともない、RDBMSへのアクセス手段であるSQLも、日常的によく見かけるものとなりました。
このSQL実践講座では、SQLの効率的な使い方をエッセンスにしてお伝えしていこうと考えています。SQLは、データを操作するために非常に簡単な構文で構成されているように見えます。ところが、実際に使い込んでいくと、一見簡単に取得できるように見えるデータが取得できない場面にぶち当たることがあると思います。また逆に、一見取得するのが難しいと思われるようなデータが、SQLを使うと数行でできてしまったりします。このあたりが、SQLの面白いところですね。
この講座では、このような疑問を中心に、「SQLそのもの」について話を進めていこうと考えています。
いろいろあるSQLの規格
SQLにはいくつかの規格があります。今現在でいちばん一般的なのは、SQL/92と呼ばれる規格でしょう。これは、ANSIとISOによって、1992年に制定された規格です。別名、「SQL2」とも呼ばれています。
本講座で取り扱うマイクロソフトのMicrosoft SQL Server 7.0は、SQL/92に準拠しています。“準拠”ですので、多くの部分でSQL Server 7.0独自の部分が多数存在します。また、以前のバージョンとの互換性のために、SQL/89に準拠したSQL Server 6.5やSQL Server 6の文法も多くサポートしています(どのバージョンに基づいて文法解析するかは、SQL Serverに対して意図的に指定することができます)。
本講座では、基本的にはSQL/92に基づいた記述をし、必要に応じてSQL/89やSQL Serve独自の記述方法を紹介していこうと考えています。これは、SQL/92に基づいているものと、基づいていないものを意識して使い分けることで、将来同じSQLをOracle用(など)に作成する際の「壁」を少しでも少なくしようという配慮です。
また、SQLの最新版は、「SQL/99」(別名SQL3)です。昨年の1999年に規格化されました(SQL99の詳細についてはこちらを参照)。本講座でも随時取り上げて行きます。
環境の準備
先ほども若干触れましたが、本講座では、マイクロソフトの「SQL Server 7.0」をベースに、例題のSQLを提供していきます。もし環境がない場合は、マイクロソフトのホームページで30日間の試用版を入手できますので、それを利用しても良いでしょう(ただし、ダイアルアップではダウンロードにかなり時間がかかりますが)。
ところで、みなさんは「Northwind」というデータベースをご存知でしょうか? 言わずと知れた、SQL Serverのサンプルデータベースです。例題はこのDBを使用していきますので、もしインストールされていない場合は、ぜひ追加インストールしてください。容量自体も5M程度と、非常に小さなデータベースです。
また、ツールとしては、SQL Server Enterprise Manager、クエリアナライザ(以前のバージョンではISQLと呼ばれてました)を中心に使っていこうと考えています。
サンプルデータベースを操作してみる
では、SQL Server Enterprise Manager(以下、Enterprise Managerと略します)を起動して、Northwindデータベースの中身を調べてみましょう。Enterpriseマネージャの初期画面で、左側のペインの「ツリー」を、「Microsoft SQL Server→SQL Serverグループ→(サーバ名)→データベース→Northwind→テーブル」と順番に選択します。32個のテーブルが右側のリストされていますね。
![]() |
| 画面1 SQL Server Enterprise Managerによるテーブルのリスト(クリックすると拡大画像を表示します) |
では、Ordersテーブルを選択して、「操作」メニューを開き、「テーブルを開く→全行を返す」を選択してみましょう。Ordersテーブルの中身が表示されたでしょうか。いちばん上の行に、左から順番に「OrderID」「CustomerID」……とデータのタイトルが表示されています。これを、「列(またはカラム)」と呼びます。これに対し、縦に並んでいるそれぞれのデータを、「行(またはロウ)」と呼びます。1行が1つのデータで、カラムがそれぞれの属性の値を表します。
![]() |
| 画面2 Ordersテーブルの内容(クリックすると拡大画像を表示します) |
テーブルとは、このように行と列で表されるデータの集まりのことです。Orders、Customersなどは、それぞれ1つのテーブルですね。
まずはSELECT文の基本的な使い方
では、SQL文を使って、データの表示してみましょう。Enterprise Managerで、「ツール」メニューの「SQL Serverクエリアナライザ」を選択します。まず、右上の「DB」ドロップダウンリストで、「Northwind」データベースを選択します。そして、表示された画面で、次のSQLを入力してみましょう。
| 【例1】 |
| SELECT CustomerID, CompanyName FROM Customers |
入力したSQL文の実行は、「クエリ」メニューから「実行」を選択します(もちろん、アイコンを選択してもOKです)。すぐに結果が表示されるはずです。
![]() |
| 画面3 クエリアナライザ(クリックすると拡大画像を表示します) |
SELECTは、データの取得をするためのSQL命令です。データの取得は、「照会」とも呼ばれます。CustomerID、CompanyNameは、それぞれ列の名前を指定します。この例のように複数の列を指定するときは、「,」で区切ります。SELECTとカラムの列の部分を、SELECT句、もしくは、SELECT文節と呼びます。
SELECT句の後のFROMは、テーブルの指定をします。この例では、Customersテーブルを指定しています。今後の例では複数のテーブルを指定する場合がありますが、そのときはテーブル名を列名と同じように、「,」で区切ります。FROMとテーブル名の部分を、FROM句、もしくは、FROM文節と呼びます。
この例のSQL文をまとめると、「Customersテーブルから、CustomerID、CompanyNameを取得しなさい」という命令であることになります。
カラムの指定には、「*」という記号も使えます。これは、すべてのカラムを取得したいときに便利です。例えば、次のようなSQLを実行してみましょう。
| 【例2】 |
| SELECT * FROM Customers |
Customersテーブルの全データが、全列表示されたでしょうか?
WHERE句の使い方
例1では、特に条件を指定しなかったので、取得されたデータはすべての行でした。SQLによるデータの取得では、欲しい情報の条件を指定することが出来ます。次のSQL文を実行してみましょう。
| 【例3】 |
| SELECT CustomerID, CompanyName,
City FROM Customers WHERE City = 'London' |
新たに、WHEREという部分が追加されました。ここで、欲しい情報の条件を指定します。この例では、「City = 'London'」として、City列が'London'の行のみを取得するように指定しています。WHEREとその条件文を、WHERE句、もしくはWHERE文節と呼びます。
WHERE句には、複数の条件を指定することも可能です。次のSQL文を実行してみましょう。
| 【例4】 |
| SELECT * FROM Orders WHERE CustomerID = 'QUICK' AND OrderDate > '1998/1/1' |
この例では、Ordersテーブルから、CustomerIDが'QUICK'で、かつ、OrderDateが1998年以降のものを取得しています。「かつ」ではなく、「または」で条件指定したい場合は、「OR」を使用します。
| 【例5】 |
| SELECT * FROM Orders WHERE CustomerID = 'QUICK' OR OrderDate > '1998/1/1' |
また、条件に合致しない行を指定したい場合は、条件をNOTで否定することが出来ます。
| 【例6】 |
| SELECT * FROM Orders WHERE NOT CustomerID = 'QUICK' |
条件の指定の仕方
例4では、「=」と「>」という記号で条件を指定しましたが、これ以外にも次のような条件を指定することが出来ます。
(1) 比較演算子
値の大小の比較をします
=等しい >より大きい <より小さい >=より以上 <=より以下 <>等しくない (2) BETWEEN条件
値が指定した2つの値の間にあるか否かを比較します。次の例では、Ordersテーブルから、OrderDateが1996/1/1から1997/12/31であるものを取得します。
| 【例7】 |
| SELECT * FROM Orders WHERE CustomerID = 'QUICK' AND OrderDate BETWEEN '1996/1/1' AND '1997/12/31' |
(3) IN条件
値が指定した値のリストの中にあるかを比較します。次の例では、OrdersテーブルからCustomerIDが'QUICK'か'VINET'であるものを取得します。
| 【例8】 |
| SELECT * FROM Orders WHERE CustomerID IN ('QUICK', 'VINET') |
(4) LIKE条件
文字の検索条件を指定します。ここで、%と_(アンダースコア)は特殊な意味が割り当てられており、%は「任意の文字数の任意の文字」、_は「1文字の任意の文字」を表します。たとえば、CustomerID LIKE 'Q%'は、CustomerIDがQで始まる文字を指定し、CustomerID LIKE 'Q_'は、CustomerIDがQで始まる2文字の文字を指定します。%と_は組み合わせての使用が可能です。
| 【例9】 |
| SELECT * FROM Orders WHERE CustomerID LIKE 'Q%' |
今回のまとめ
今回はごく基本的な、「SELECT文」を紹介しました。次回は、並び替えの仕方(ORDER BY)、集計の仕方(GROUP BY)を予定しています。
SQL実践講座 バックナンバー
- 第1回 SQLの基礎 「SELECT」文を覚えよう
- 第2回 SELECT文で並べ替えを行うには?
- 第3回 集計を行う「GROUP BY」句
- 第4回 異なるテーブル同士を結合する「JOIN」句
- 第5回 テーブル結合の仕組みを理解する
- 第6回 テーブル結合のバリエーションを増やす
- 第7回 SELECT文の結果を抽出条件に使う
- 第8回 サブクエリーの応用「相関サブクエリー」
- 第9回 SELECT文を統合するUNION
- 第10回 CREATE文でテーブルを作成する
- 第11回 CREATE文をさらに使いこなそう
- 第12回 データの登録を行うINSERT文
- 第13回 テーブル中のデータ識別に必要な主キー
- 第14回 データの更新と主キーの重要性
- 第15回 「ビュー」の作成でDB参照の利便性をアップ!
- 第16回 GUI環境で「ビュー」を作成してみよう!
- 第17回 DBにアクセスできるユーザーを制限する
- 第18回 グループ単位でDBへのアクセス権限を設定するには?
- 第19回 システム・ストアドプロシージャを活用しよう!
- 第20回 ストアドプロシージャを作成/実行してみよう
- 第21回 条件分岐のあるストアドプロシージャを作成する
- 第22回 ストアドプロシージャによる繰り返し処理
- 第23回 ユーザー定義関数を作成するストアドファンクション
- 第24回 テーブルで複数の処理を実行させるトリガー
- 第25回 トランザクションでデータの不整合を防ぐ
- 第26回 トランザクションを用いて注文登録をする
- 第27回 トランザクションの一貫性を保証するロック
- 第28回 SQL Serverで「デッドロック」を回避する
ネットワーク・コマンドでトラブル解決
トラブルシューティングに便利な各種コマンド/ツール事典。各ツールの活用法をまとめたTipsも順次アップデート!
- 第1回 つながらないネットワークの原因を特定する!
- 第2回 ネットワークトラブル、まずはホストの設定を見直そう!
- 第3回 ルーティングのトラブル、まずはその仕組みから理解!
- 第4回 イーサネットの通信は正しく行えているか?
- 第5回 TCP/UDPの接続ステータスを確認しよう!
- 第6回 DHCPの自動設定機能をうまく使いこなすコツは?
- 第7回 DNSの設定と動作は正しいか?
| 「Master of IP Network総合インデックス」 |
ホワイトペーパー(TechTargetジャパン)
- 知られざるLTEのネットワーク構成 (2010/1/13)
LTEのネットワーク構成やプロトコルスタックを詳解。それぞれどんな役割を果たしているかを解説します - iPhoneアプリ内課金導入でガッチリもうけるのだ (2009/12/18)
「iPhoneのアプリ内課金ってどーよ?」 そんな疑問に答えるべく、アプリ内課金のサポート業務を行っている企業を直撃 - インターネット世界の住所の書き方 (2009/12/8)
TCP/IPネットワークであて先を特定する識別子、IPアドレスの構造やサブネットマスクの役割などを説明します - iPhoneアプリに広告を挿入してガッチリもうけるのだ (2009/11/16)
iPhoneアプリに広告を挿入して1日に50万円ももうけている!と聞き、その仕組みを知りたくて、日米のアドネットワーク企業に聞いた
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |









