
データを効率的に処理するエッセンスを教えます
連載: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/3/17)
光ファイバに匹敵する通信速度を実現すると期待されているLTE。ホントにそんなに出るの? という疑問に答えます - インターネット世界の地図 (2010/2/23)
荷物の届け先まではどの道を通っていけばいいのでしょう? それを決める「経路選択」の仕組みを説明します - Androidアプリはビジネスになるのか (2010/2/12)
「iPhoneアプリの次はAndroid?!」NECビッグローブのAndroidアプリ販売サイト「andronavi」を通して、その可能性に迫る - 知られざるLTEのネットワーク構成 (2010/1/13)
LTEのネットワーク構成やプロトコルスタックを詳解。それぞれどんな役割を果たしているかを解説します
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |









