学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails

HSQLDBを使用したデータベース入門その8 新しい行の追加(2020年5月更新)

<<前  [TOP]  次>>


insert文でデータベースに行を挿入するには「values句」を使う方法と「select句」を使う方法の二つがあります。
1.insert into テーブル名 [( 項目名リスト )] values ( 値1,値2, .... )
2.insert into テーブル名 [( 項目名リスト )] select 項目名リスト from テーブルリスト where 検索条件


以下それぞれの用法を見てみましょう。


valuesを使った新しい行の追加は次のようにして行います。


【例1:valuesを使った新しい行の追加】

insert into books values(2001,'数学の本その1','数学一郎','数学出版');



「insert into books values(2001,&#x27;数学の本その1&#x27;,&#x27;数学一郎&#x27;,&#x27;数学出版&#x27;);」
「insert into books values(2001,'数学の本その1','数学一郎','数学出版');」


ここでvalues句で与えられている4つの定数は、テーブル「books」を構成している4つの項目に順序通り対応しています。


4つの項目すべてを与えなくても次のように項目名リストをテーブル名につけ加えれば、指定した項目だけに値を与えることが出来ます。


【例2:特定の項目に値を与えるinsert】

insert into books(id, title, author) values(2002,'数学の本その2','数学二郎');
insert into books(id, title, author) values(2003,'数学の本その3','数学三郎');
insert into books(id, title, publisher) values(2004,'数学の本その4','数学出版');



「insert into books(id, title, author) values(2002,&#x27;数学の本その2&#x27;,&#x27;数学二郎&#x27;); insert into books(id, title, author) values(2003,&#x27;数学の本その3&#x27;,&#x27;数学三郎&#x27;); insert into books(id, title, publisher) values(2004,&#x27;数学の本その4&#x27;,&#x27;数学出版&#x27;);」
「insert into books(id, title, author) values(2002,'数学の本その2','数学二郎'); insert into books(id, title, author) values(2003,'数学の本その3','数学三郎'); insert into books(id, title, publisher) values(2004,'数学の本その4','数学出版');」


こうした時、selectでこのテーブルの内容を表示させれば次のような出力が得られます。

select * from books;



「select * from books;」
「select * from books;」


values句で指定されなかった項目では、デフォルト値(この例ではnull)が置かれていることがわかります。


valuesを使った行の挿入は全く新しいテーブルをつくる時には必要ですが、もしも既にあるテーブルを加工して新しいテーブルをつくる場合にはselectを使った挿入が便利です。
次の例は元からあるテーブル「books」利用して新しいテーブル「books3」をつくる例です。


先に「books3」テーブルを作成しておきましょう。
以下の「books3.sql」ファイルを作成してDatabase Managerで読み込みます。


【books3.sql】

create table books3 (
    id            int,
    title         varchar(50),
    author        varchar(50),
    publisher     varchar(30),
    constraint pk_books3 primary key(id)
);



「books3.sql」ファイルの読み込み
「books3.sql」ファイルの読み込み


【例3:古いテーブルを利用して新しいテーブルをつくる】

insert into books3 select * from books where title like '%数学%';



「insert into books3 select * from books where title like &#x27;%数学%&#x27;;」
「insert into books3 select * from books where title like '%数学%';」


valuesを使った挿入では一つのinsert文で一行の挿入しか出来ませんでしたが、selectを使ったこの形式ではselectが返す複数の行が新しいテーブルに取り込まれることになります。
この例での二つのテーブルは順序を含めて対応する項目のデータのタイプが同じでなければなりません。


insertは新しい行をテーブルに挿入するのですが、既にある行の内容を書き換えたい時には「update」を使わなければなりません。


updateの一般的な形は次のようなものです

update テーブル名 set 項目名 = 式 [ , 項目名 = 式 , .... ] [ where 更新条件 ];



「books3」テーブルをupdateを用いて更新してみます。


【例4:where句無しのupdate】

update books3 set publisher = '日本数学出版';



「update books3 set publisher = &#x27;日本数学出版&#x27;;」
「update books3 set publisher = '日本数学出版';」


where句無しでupdateを行った時、指定された項目はテーブル中のすべての行で更新されます。
この例では、テーブルの内容は、次の様に更新されます。
項目「publisher」すべてが「日本数学出版」に更新されていることに注目して下さい。

select * from books3;



「select * from books3;」
「select * from books3;」


【例5:where 句で更新する行を指定】

update books3 set publisher = '(株)日本数学出版' where id=2001;



「update books3 set publisher = &#x27;(株)日本数学出版&#x27; where id=2001;」
「update books3 set publisher = '(株)日本数学出版' where id=2001;」


テーブルの内容は、where句で指定された行の指定された項目だけが更新されます。

select * from books3;



「select * from books3;」
「select * from books3;」


set句には次のように複数の項目を指定することができます。


【例6:set句に複数の項目を指定】

update books3 set title='数学の本その2 改訂版',publisher = '(株)日本数学出版' where id=2002;



「update books3 set title=&#x27;数学の本その2 改訂版&#x27;,publisher = &#x27;(株)日本数学出版&#x27; where id=2002;」
「update books3 set title='数学の本その2 改訂版',publisher = '(株)日本数学出版' where id=2002;」

select * from books3;



「select * from books3;」
「select * from books3;」


where句にさまざまな更新条件を置くことが出来ます。
基本的には既に見たselectのwhere句の使い方と同じであるので、内部にselect文を含むような複雑な更新条件を考えることが出来ます。
単純な更新条件を持つupdateの例を見てみましょう。


【例7:where 句の例】

update books3 set author='数学の大先生' where publisher like '%(株)%';



「update books3 set author=&#x27;数学の大先生&#x27; where publisher like &#x27;%(株)%&#x27;;」
「update books3 set author='数学の大先生' where publisher like '%(株)%';」


ここでは2つの「author」が更新されています。
更新条件に合致する複数行が更新されることに注意してください。
もしこの条件に合致する行が存在しなければ行の更新は行われません。

select * from books3;



「select * from books3;」
「select * from books3;」


<<前  [TOP]  次>>