12/15/2011

SQL

今週はSQL(structural query language)を勉強した。これはrelational databaseを扱うのに必要な言語で、queryと呼ばれる命令文をつくる。relational algebraにもとづいた普遍的な言語なので、databaseの概念を理解するのに役立つだろうと勧められた。検索して見つけたEdinburghにある大学のウェブサイトを追って勉強している。
 最初は代数学や情報処理の用語にとまどったが、いちいち調べて分かるようになった。お洒落で気に入った用語もある。たとえばintegerとは整数のことだが、数学記号ではZ={..., -2, -1, 0, 1, 2, ...}と書く(Zhalen、ツァーレンとよむ)。arityとは行の数(unary, binary, ..., n-aryと言うわけ)、cardinalityとは列の数。aliases(単数形alias)とは別名、仮名だが、"to pretend that a table is called something else for the duration of a query"のに使われる。
 SELECT A FROM B WHERE Cという構文(syntax)が基本で、それに様々なoperator、aggregate functionsが付随し、組み合わせでいくらでも複雑にすることができる。WHEREのなかに構文が入っている場合、それをsub-queryと呼ぶ。subqueryはそれだけでは一つのattributeで一つの行しかreturnできないので、ANY/ALL/IN/NOT IN/EXISTS/NOT EXISTSなどを組み合わせる。
 そしてrelational databaseの真骨頂が、複数のdatabaseを融合させ、さらに自分の欲しい情報だけを取りだす機能。SELECT * FROM A, Bで得られる表Aと表Bの行を総当たりに組み合わせたcross product(これはデカルトの名前をとってcartesian productとも言う)から、条件演算子JOINを用いてある条件のデータだけを抽出することができる。しかし、複数の表が融合したconceptualな表を想像するのは結構たいへんだ。