SQLで数列を扱うSQLでは、基本的にデータに順序がないものとして扱います。それゆえ、順序を意識したデータの扱い方は、手続き型言語とファイルシステムのそれとはかなり異なるものになります。本稿ではその扱い方を、数列を例に解説し、解法の背後にあるSQLの基本的な原理を取り出します。相関サブクエリで行と行を比較するSQLで同一行内の列同士の比較をすることは簡単です。それに比べて、異なる行を比較対象に使うことは、そう簡単ではありません。それは、SQLでは行間比較を記述できないという意味ではありません。本稿では、相関サブクエリを利用した行間比較の応用例を紹介します。外部結合の使い方SQLの結果を望む形に整形できないというのは、DBエンジニアがよく直面する難題の一つです。SQLは、元来そのような目的のために作られた言語ではないため、フォーマットの整形をするには工夫が必要になります。本稿では、フォーマット整形として代表的な行列変換と入れ子の表側の作り方を解説し、その際に重要な役割を果たす外部結合についての理解を深めます。HAVING句の力HAVING句はSQLの重要な機能のひとつですが、その真価は十分に知られていません。HAVING句もまた、集合指向というSQLの本質を理解するための重要な鍵であり、幅広い応用が可能です。本稿では、HAVING句の使い方を学びながら、「集合単位の操作」という集合指向言語の第二の特性を理解します。3値論理とNULL通常のプログラミング言語が真と偽の2つの真理値を持つ2値論理を基礎とするのに対し、SQLは第3の値「不明」を追加した3値論理という特異な論理体系を採用しています。3値論理はしばしばトリッキーな動作を見せてプログラマを悩ませます。本稿では、この3値論理について理論と実践的な例をもとに理解を深めます。自己結合の使い方SQLが提供する結合演算は、通常、異なるテーブルまたはビューを対象として行われますが、同一のテーブルを対象とした「自己結合」を行うこともできます。自己結合は、動作がイメージしにくいため敬遠されがちですが、使いこなせば非常に便利な技術です。本稿では、この自己結合について例題をもとに分かりやすく解説します。CASE式のススメ(後編)SQL-92で標準に取り入れられたCASE式を用いると、今までCASE式の簡略版であるDECODE(Oracle)、IF(MySQL)などの関数で記述していたSQLを、実装非依存のコードに記述し直すことができ、コードの汎用性を高めることができます。今回は、UPDATEや集約関数と組み合わせた、CASE式の高度な応用方法について学びます。CASE式のススメ(前編)SQL-92で標準に取り入れられたCASE式を用いると、今までCASE式の簡略版であるDECODE(Oracle)、IF(MySQL)などの関数で記述していたSQLを、実装非依存のコードに記述し直すことができ、コードの汎用性を高めることができます。今回は、コード体系の変換、集約関数との組み合わせ、CHECK制約との組み合わせの3通りの使い方を学びます。身近にあるものを手当たり次第にデータベース設計のネタにして、コツコツと地力をつけていくシリーズの第2回です。今回は、近所の図書館にあった書籍の予約用紙を素材にして、データベースを設計します。第1回:「お持ち帰りご注文用紙」編システム構築においてデータベース設計は不可欠ですが、書籍を読んだだけでは、なかなか身についたと感じられないことも多いのではないでしょうか。本稿では、身近にあるものを手当たり次第にデータベース設計のネタにしてしまうことで、コツコツと地力をつけていく方法を学びます。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。パソコンプログラミングに役立つソースコードと解説記事が満載な開発者のための実装系Webマガジンです。掲載記事、写真、イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。