SQLアタマアカデミー
第1回 連番の特性を利用してデータ操作をもっと自由に SQLで連番を扱う (1)SQLと連番
はじめに
この連載では,これまでC言語やPerl,Javaなどの手続き型言語(またそれに基礎を持つ言語)を主に使用してきたプログラマやエンジニア(要するに,私たちのほとんど全員,ということになるでしょうが)を対象に,データベースという特有の世界―集合論と述語論理のロジックが支配する世界―について,ケーススタディを交えながらわかりやすく解説していくことを目的としています。
「手続き型プログラマの視点から初めて集合指向(setoriented)の世界を見た場合」を想定して,多くの方にとっては馴染みの薄い集合や述語といった概念を,なるべく慣れ親しんだ手続き型の考え方にひきつけて解き明かしてみせよう,というわけです。もちろん,SQL初心者だけではなく,プロフェッショナルなDBエンジニアにも楽しんでもらえるトピックを盛り込んでいこうと考えています。どうぞよろしくお付き合いください。
SQLと連番
さて,第1回のテーマはSQLにおける「連番」の扱い方です。SQLでは伝統的に連番を扱うための機能が存在しませんでした。連番とは,1(または0)から始まって2,3,……と1つずつ値がカウントアップされていく自然数列のことです。SQLが連番に対する機能をサポートしていない理由は「エンティティの属性とはみなせないから」という,主に関係モデルの理論上の要請によるところが大きいのですが,実務においては,適当な行集合に対して連番を振ることが必要になるケースが多くあります。最近ではそうした実務的な要求にも応えるべく,標準SQLにも連番を扱うための機能が追加されるようになりました(注1)。
- 注1)
- たとえば,SQL:2003では連番を生成するROW_NUMBER関数やシーケンス・オブジェクトが標準化されました。
「集合指向」と「手続き型」
連番をSQL上で扱えるようになったということは,データの「順序」を意識したコーディングが可能となったということを意味します。それはつまり,伝統的に集合指向的な原理に基づいていたデータベースの世界に手続き型的な原理がミックスされた,ということです。本稿では,1つの問題を解く際にも,「集合指向」と「手続き型」という2つの異なるアプローチによってどのように考え方が変わるか,という点に注目しながら,SQLの考え方を説明します。
なお,稼働環境は次のものを対象としています。
- Oracle 9i以降
- PostgreSQL
- MySQL 5.0以降
実際に動作確認を行った環境は「Oracle10.2.0.1」,「PostgreSQL 8.3」,「MySQL 5.0」です。ただし,本稿のSQLは標準SQLに準拠しているため,DB2およびSQLServerでも動作すると思われます。
SQLアタマアカデミー
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (5)集合指向と手続き型
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (4)OLAP関数と集約関数を組み合わせる
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (3)OLAP専用関数
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (2)OLAP関数の基本構文
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (1)OLAP関数とは何か
- 第10回 結合大全 (5)非等値結合
- 第10回 結合大全 (4)自己結合
- 第10回 結合大全 (3)外部結合
- 第10回 結合大全 (2)内部結合
- 第10回 結合大全 (1)クロス結合

