!!!SQL '''SQL'''とは、データベースにアクセスするための専用言語(のようなもの)です。 一般的には、データベースサーバ(ここでは、「サーバ」というのは物理的なサーバマシンのことではなく、「サーバプログラム」のことを指します)のプロセス(サービス)に対してSQLでデータベースの作成から情報の取り出し・書き込みまで行うことができます。 また、Javaでは[[JDBC]]経由でSQLを指定してデータベースサーバにアクセスすることもできます。 データベースの構成は、以下のようになっています。 {{ref_image db_image.png}} 構成として、「'''データベース'''」という大きなくくりの中に「'''テーブル'''」を複数持つことができ、さらに「テーブル」は複数の行('''レコード'''と言います)で構成されています。 一番小さい単位が、レコードに含まれる「項目」ということになります。 また、テーブル同士を関連づけるといったことも可能でです。 例えば、複数のプロジェクトで個々のデータベースを使いたい場合は、 まずデータベース名を指定して、さらに使用するテーブルを選択、そしてレコード情報を取り出す・または加える、ということになります。 これらの制御はSQL文にて行います。 また、SQL文には「方言」があり、データベースごと(Oracle/DB2/MySQLなど)に差がある場合があります。 が、たいていは統一されています。 以下、そのSQL文の例を列挙します。 !!SQL文の例 !テーブルの作成 create tableにて行います。データベース製品に大きく依存します。 MySQLでのcreate tableについては、[[MySQLでのデータベース]]のページを参照してください。 !レコードを列挙するもの :select * from testtbl;:テーブル「testtbl」の内容(レコード)をすべて列挙。 :select ename,job from testtbl;:テーブル「testtbl」の内容から「ename」「job」で示される項目のみを列挙。 :select count(*) from testtbl;:テーブル「testtbl」の総レコード数を表示。 :select * from testtbl order by empno;:テーブル「testtbl」にて、empnoの昇順にレコードを列挙。 :select * from testtbl order by empno desc;:テーブル「testtbl」にて、empnoの降順にレコードを列挙。 !レコードの挿入 ::insert into testtbl values(1,'d1','d2'); :::テーブル「testtbl」に、1レコード分の値として、1/'d1'/'d2'を挿入。 :::なお、values内は、テーブル内の項目番号順に並べること。 :::文字列を入れる場合は、シングルクォーテーションで囲む。シングルクォーテーションを指定する場合は、シングルクォーテーションを2つ並べる。 例:'I''m xxx.' → I'm xxx. ::insert into testtbl set empno=10,ename='test',job='programmer'; :::テーブル「testtbl」に、1レコード分の値として項目名を指定して情報を挿入。 !レコードの情報を変更 ::update testtbl set ename='foo' where empno=1; :::テーブル「testtbl」の、empnoが1のレコードを探し出し、そのenameの値を「foo」に変更する。whereを指定市内場合は、すべてのレコードが変更される。 ::update testtbl set ename='foo',job='wk' where empno<2 and ename='yy2'; :::テーブル「testtbl」の、empnoが2以下で、かつenameが「yy2」のレコードを探しだし、そのenameの値を「foo」にjobの値を「wk」に変更する。 !レコードを削除 ::delete from testtbl where empno=2; :::テーブル「testtbl」にて、empnoが2のレコードを削除する。 :::whereを指定しない場合は、テーブル内のレコードがすべて削除される。 !テーブルの削除 :drop table testtbl;:テーブル「testtbl」自身を削除する。 !テーブルに新たに列を追加 ::alter table testtbl add mytime datetime; :::テーブル「testtbl」の列として、日時型の「mytime」を追加する。 :::既存のレコードのmytimeにはnullが入る。 :::なお、add後の型指定はデータベース製品により依存するため注意。 !テーブルの列を削除 ::alter table testtbl drop mytime; :::テーブル「testtbl」の、列「mytime」を削除する。 !テーブルの列情報を変更 ::alter table testtbl modify ename char(20); :::テーブル「testtbl」の、列enameの文字列長さを20バイトに変更。 :::文字列長の変更などで使用する。ダイナミックに型自身を変更することはできない。 :::(文字型から数値型への変更、など)