データ操作言語 (DML)コマンドは、ユーザがアクセスするかデータを操作 することを可能にします。利用可能なDMLコマンドの概略を以下に示します。
Table 5-1: データ操作言語コマンド
| コマンド | 概要 |
| INSERT | テーブルにデータを入力します。 |
| SELECT | テーブルから情報を検索します。クエリーは他テーブルとのジョインなど複雑に なるかもしれません。 |
| UPDATE | テーブル中の既存レコードを更新します。 |
| DELETE | テーブル中の不必要なレコードを削除します。 |
| EMPTY | テーブル中の全レコードを削除します。 |
| CALL | ストアドプロシージャ-またはエキスプレッション(表現)を呼び出します。 |
| LOCK TABLE | トランザクション中にテーブルをロックします。 |
| SORT | 一つ以上のフィールドによりテーブルを並び替えます。 |
INSERTコマンドは、フィールド値をコマンドラインから、他のテーブル から、ファイルからまたはオペレーティングシステムコマンドの出力から直接取得し、 テーブル中にデータを格納します。
Syntax
Syntax 1:
| INSERT [INTO] table [( | | * |attr {, attr} |
|)] | |
| |VALUES [(] attr_value {, attr_value} [)] |SET TO attr_value {, attr_value} |select_command |FROM data_source | |; | | | |
Syntax 2:
| INSERT [INTO] table SET attr | |TO |= | | | | attr_value {, attr | |TO |= | | | | attr_value}; |
Syntax 3:
| INSERT [INTO] table SET | | * | attr {, attr} |
| | |
| |VALUES [(] attr_value {, attr_value} [)] |select_command |FROM data_source |; | | | |
説明
| attr_value |
| |||
| expr | フィールドに与えられた適した値。 詳細はExpressionsを参照してください。 | |||
| data_source |
| |||
| os_command | システムコマンドの出力がテーブルに直接挿入されます。 Unixにのみ有効な機能です。 | |||
| select_command | SELECT文。SELECTを 参照してください。 |
注意
バッチによる挿入(insert .. from ファイル)の場合、途中でエラーが発生すると Empressはエラーメッセージを出力し処理を中止します。その場合、途中まで レコードが挿入されてしまうので、再試行する時にはエラー個所を修正してそのデータ から始めなくてはならなくなり、非常に面倒な作業となります。この場合バッチでの 挿入を再開するベストな方法は以下の方法です。
必要な特権
例
数値、日付、文字列を持ったレコードを挿入します。
loansテーブルに1990年6月27日にKilroyが$100,00のローンを組んだ レコードを追加します。
INSERT INTO loans VALUES (10, 'Kilroy', '27 June 1990', 100.00);
データの順番が重要です。DISPLAY TABLEコマンドにリストされた フィールド名を順番に左から右へ指定してください。 順番どおりに指定しない以下のような場合。
INSERT INTO loans VALUES (10, '27 June 1990', 'Kilroy', 100.00);
名前フィールドに日付データがセットされ、日付フィールドに名前データがセット されるため、Empressは変換エラーの表示をします。
DOLLAR値を持ったレコードを挿入します。
次のコマンドは、最初の例題と同じ値を挿入することになります。 (ドル記号を2つ指定していることに注意してください。)
INSERT INTO loans (name, date, amount) VALUES ('Kilroy','27 June
1990','$$100.00';
NULL値を持ったレコードを挿入します。
personnelテーブルのcredit_limitフィールドと phoneフィールドにNULL値をセットしてレコードを挿入します。
INSERT INTO personnel (number, name, phone, credit_limit) VALUES (14,
'Martin', null, null);
部分的なフィールド値を持ったレコードを挿入します。
指定されないフィールド値には自動的にNULL値が設定されます。よって前の例題と 同様の結果となります。
INSERT INTO personnel (number, name) VALUES (14, 'Martin');
様々なシンタックスによりレコードを挿入します。
対話型でない挿入コマンドのいろいろな形式で、Martinに対して 個人番号は20、電話番号は962-2587、クレジット限度額 $500をpersonnelテーブルに入力します。
INSERT INTO personnel
SET number TO 20,
name TO 'Martin',
phone TO '962-2587',
credit_limit TO 500;
INSERT INTO personnel
(number, name, phone, credit_limit)
SET TO 20, 'Martin', '962-2587', 500;
INSERT INTO personnel
SET TO 20, 'Martin', '962-2587', 500;
INSERT INTO personnel
SET number, name, phone, credit_limit
20, 'Martin', '962-2587', 500;
INSERT INTO personnel
SET number, name, phone, credit_limit
VALUES 20, 'Martin', '962-2587', 500;
複数レコードを挿入します。
同時に複数レコードを追加します。
INSERT personnel VALUES
20, 'Martin', '962-2587', 500,
21, 'Stevens', '973-7721', 250,
22, 'DuRoche', '922-8047', 500;
他のテーブルから挿入します。
loansテーブルからjonesloansというテーブルを作成します。
INSERT INTO jonesloans
SELECT FROM loans
WHERE name = 'Jones';
作成されるテーブルはloansテーブルと同一の構造ですが、レコードは nameフィールドのデータが<Jones>のものしか存在しません。
ファイルからレコードを挿入します。
セパレータに"|"を設定し、以下のようなデータが入っている newloansファイルからレコードを挿入します。
10|Kilroy|August 24, 1990|200 5|Mosca|September 3, 1990|100 4|Scarlatti|September 23, 1990|75
以下のコマンドで上記ファイルから3レコード挿入します。
INSERT loans FROM 'newloans';
オペレーティングシステムコマンドから挿入します。
コメントが記述されたcomments.nファイルをnroffコマンドに 渡した出力を挿入します。
INSERT customers SET COMMENTS
DIRECT_FROM '!nroff comments.n';
SELECTコマンドはテーブルからデータを検索します。検索結果は スクリーン上にテーブルとして表示されます。しかしリスト形式で表示したり オペレーティングシステムに転送したりできます。 コマンドには最低でも1つ以上のテーブルを指定しなければなりません。指定できる ものには以下のようなものがあります。
Syntax 1
SELECT [|BYPASS |] [|DISTINCT|] [|* |]
|BYPASS_LOCK| |ALL | |select_item {, select_item}|
FROM table_expression {, table_expression }
[where_clause]
[GROUP BY attr {, attr}]
[having_clause]
[sort_clause]
[|LIST |] [DUMP] [|INTO| file];
|REPORT| |ONTO|
Syntax 2
SELECT [|BYPASS |] [|DISTINCT|] [|* |]
|BYPASS_LOCK| |ALL | |select_item {, select_item}|
FROM table_expression {, table_expression }
[|LIST |] [DUMP] [|INTO| file]
|REPORT| |ONTO|
[where_clause]
[GROUP BY attr {, attr}]
[having_clause]
[sort_clause];
Syntax 3
SELECT [|BYPASS |] [|DISTINCT|] [|* |]
|BYPASS_LOCK| |ALL | |select_item {, select_item}|
FROM table_expression {, table_expression }
[where_clause]
[GROUP BY attr {, attr}]
[having_clause]
[sort_clause]
INSERT [INTO] table [|(attr {, attr}) |] ;
|SET * |
|SET attr {, attr} |
|(*) |
Syntax 4
TABLE table [ sort_clause ]
[ |LIST | ] [DUMP] [ |INTO| file ];
|REPORT| |ONTO|
Syntax 5
query_expression [ |LIST | ] [DUMP] [ |INTO| file ]
|REPORT| |ONTO|
[ sort_clause ];
| select_item |
いずれか1つ。
|table.* |
|alias.* |
|expr [print_clause] |
|column_alias = expr |
|function ([DISTINCT] attr) [print_clause] |
|COUNT [|(*) |][print_clause] |
|([DISTINCT] expr)|
attrのデータタイプがbulkまたはtextの場合。
attr |DIRECT_INTO| file
|DIRECT_ONTO|
|
| table_expression | いずれか1つ。
a) table [[| ALIAS |] alias ]
| AS |
b) ( query_expression ) alias
c) table_expression CROSS JOIN table_expression
d) table_expression NATURAL |INNER | JOIN table_expression
|LEFT [OUTER] |
|RIGHT [OUTER] |
|FULL [OUTER] |
e) table_expression |INNER | JOIN table_expression
|LEFT [OUTER] |
|RIGHT [OUTER] |
|FULL [OUTER] |
| ON where_clause_condition |
| USING ( attr {, attr } ) |
|
| expr | 表現式です。詳細はExpressions を参照してください。 |
| column_alias | 出力時にフィールド名に換えて表示する名前です。 |
| function | 集計関数の1つを指定しますAVG, MAX, MIN, SUM。 複数レコードに対して実行されます。関数は指定されたフィールドに対して実行され 結果を出力します。関数SUMとAVGは数値フィールドのみ有効です。 詳細は、Functionsを参照してください。 |
| print_clause |
|PRINT| header [WIDTH integer][ |LEFT |]
|AS | |RIGHT |
|CENTRE |
|CENTER |
|LEFTRIGHT |
[WRAPMARGIN integer]
|
| sort_clause | 以下のシンタックスです。
|SORT | [ |BY|] |attr | [|ASCENDING |]
|ORDER| |ON| |attr_num | |ASC |
|column_num| |DESCENDING|
|DESC |
{, |attr | [|ASCENDING |]}
|attr_num | |ASC |
|column_num| |DESCENDING|
|DESC |
キーワードASCとDESCは、それぞれ ASCENDINGとDESCENDINGの同義語です。省略値はASCENDING です。 SORTとORDERは同義語です。 |
| having_clause | シンタックスはHAVING句を参照 してください。 |
| where_clause | シンタックスはWHERE句を参照 してください。 |
| query_expression |
1つ以上のselect_commandを含み、演算子で繋がれています。
UNIONは、EXCEPTとINTERSECTをサポートしています。 query_expressionは以下のようになります。
|select_command| { |UNION | [ALL] |select_command| }
|TABLE table | |EXCEPT | |TABLE table |
|INTERSECT|
UNIONは、全ての重複値以外に一方のselect_commandによって検索 された、すべてのレコードを返します。 UNION ALLは、重複値を含む、select_commandで検索された、両方の レコードを返します。 EXCEPTは、すべての重複値以外に、2つのselect_command オペランドによって選択された2セットのレコードの間の違いを返します。 ALLオプションは重複値を含みます。 INTERSECTは、すべての重複値以外に、2つのselect_command オペランドによって選択されたレコードの2つのセットの交差を返します。 ALLオプションは重複値を含みます。 UNION、EXCEPTあるいはINTERSECT操作の2つの select_commandオペランドは、同一でなくてはいけません。 それらのselect_itemsが同数のフィールドを持たなくてはいけないことを 意味します。また対応するフィールドは、同じデータタイプでなくてはいけません。 UNION、EXCEPT、INTERSECT操作の結合した結果は、 フィールド、フィールド名(別名)、対応するデータタイプの、第1の select_commandオペランドのselect_itemと同じ数を持っています。 |
| select_command | どちらか一方。
|
注意
フィールド名の変わりに番号が指定された場合、出力カラムの指定がある場合 には、その順番によりソートし、それ以外データディクショナリーで指定されている フィールド番号によりソートします。
表現式からソートする場合などは、column_numでのソート指定は 有効となります。例えば以下のような場合。
SELECT a * b, c, d, e * d FROM T1, ORDER BY 1;
出力はa * bの結果によってソートされます。
INSERT INTO table がSELECT文の前に指定される場合も あります(INSERT INTO table SELECT FROM table...)。
フィールドがそのとき既存のテーブルに挿入される場合、既存テーブルから 選ばれたフィールドは対応するリスト中でattrsを指定することに より、新しいテーブル中で改名することができます。これは、少数のフィールド値を 備えたレコードが既存のテーブルに加えられることを可能にします。 さらに、作成される新しいテーブル中のフィールド名およびオーダーを変更する メカニズムを提供します。
select_itemがheader(文字列、ブランクを 含んでいる場合には引用符で囲む)を含んでいる場合、新しいテーブル中の対応する フィールドは既存のテーブル中の名前ではなくheaderによって与え られた名前になります。これは既存のテーブルのフィールド名には影響しません。 headerおよびattrの両方が指定される場合、 attrは、新しく作成されたフィールド名としてヘッダーより優先 します。
GROUP BY句が使用される場合、出力はレコードからのみになります。 関数結果が各グループの下で表示される出力はエラーとなります。GROUP BY句 の使用はGROUP BY句で解説します。
検索されたテーブルにデータを挿入することができないことに注意してください。
SELECT * FROM table
[ sort_clause ]
[ |LIST | ] [DUMP] [ |INTO| file ];
|REPORT| |ONTO|
必要な特権
例
シンプルな検索
loansテーブルの検索
SELECT * FROM loans;
以下の表示を行います。
number name date amount
5 Mosca 2 February 1990 $150.00
3 Jones 7 February 1990 $33.95
10 Kilroy 16 February 1990 $250.00
17 Wladislaw 27 February 1990 $55.00
3 Jones 3 April 1990 $25.00
5 Mosca 4 May 1990 $200.00
17 Wladislaw 12 May 1990 $25.00
8 Peterson 6 June 1990 $50.00
17 Wladislaw 25 June 1990 $75.00
3 Jones 12 August 1990 $300.00
4 Scarlatti 9 September 1990 $150.00
4 Scarlatti 14 October 1990 $125.00
以下のコマンドでも同一の結果が得られます。
SELECT FROM loans;
シンプルな条件検索
1990年6月以降のローンの検索
SELECT * FROM loans WHERE date > "31 May 1990";
以下のように表示します。
number name date amount
8 Peterson 6 June 1990 $50.00
17 Wladislaw 25 June 1990 $75.00
3 Jones 12 August 1990 $300.00
10 Kilroy 27 June 1990 $100.00
4 Scarlatti 9 September 1990 $150.00
4 Scarlatti 14 October 1990 $125.00
複数の条件検索
customersテーブルからLucas、Wilson、Marshallを検索します。
SELECT * FROM customers WHERE name MATCH "*Lucas*"
OR name MATCH "*Wilson*"
OR name MATCH "*Marshall*";
以下のように表示します。
name address comments
Mr. R. Lucas 1423 Beach Drive, Can always be sold
Bayville, CA 92308 something new and
flashy - likes chrome
and colored stuff, also
little gadgets.
Mr. B. Wilson 14 Valley View Drive, Good customer - give
Bayville, CA 92308 credit if he asks for it
Ms. C. Marshall 12 Berkeley St. Suggest vacuum &
Gull Point, CA 92309 wash, she keeps 3
dogs. Look for dog hair
collecting in engine.
1つのフィールドを検索します。
特定フィールドを指定して検索できます。
SELECT name FROM personnel;
以下のように表示します。
name Kilroy Mosca Wladislaw Jones Peterson Scarlatti Jordan
複数のフィールドを指定したシンプルな条件検索。
personnelテーブルからcredit_limitフィールド値が$250.00 より多い、nameフィールドと、numberフィールドを表示します。
SELECT name, number
FROM personnel WHERE credit_limit > 250.00;
以下のように表示します。
name number Kilroy 10 Mosca 5 Jones 3
異なるオーダーのフィールドを検索します。
テーブル作成時の指定フィールド順と違う順番で、表示します。
SELECT amount, name, date FROM loans;
以下のように表示します。
amount name date
$150.00 Mosca 2 February 1990
$33.95 Jones 7 February 1990
$250.00 Kilroy 16 February 1990
$55.00 Wladislaw 27 February 1990
$25.00 Jones 3 April 1990
$200.00 Mosca 4 May 1990
$25.00 Wladislaw 12 May 1990
$50.00 Peterson 6 June 1990
$75.00 Wladislaw 25 June 1990
$300.00 Jones 12 August 1990
$150.00 Scarlatti 9 September 1990
$125.00 Scarlatti 14 October 1990
フィールドにヘッダーを付けて検索します。
PRINT句を指定しフィールドにヘッダーを付加します。文字列にブランク、 ピリオド、スラッシュ、コロン、セミコロン、タブ、改行コードが含まれる場合には 引用符で囲む必要があります。
コマンド
SELECT name PRINT Employee,
amount PRINT "Loan Amount" FROM loans;
以下のように表示します。
Employee Loan Amount Mosca $150.00 Jones $33.95 Kilroy $250.00 Wladislaw $55.00 Jones $25.00 Mosca $200.00 Wladislaw $25.00 Peterson $50.00 Wladislaw $75.00 Jones $300.00 Kilroy $100.00 Scarlatti $150.00 Scarlatti $125.00
PRINTの変わりにASを指定しても同一の結果となります。
SELECT name AS Employee,
amount AS "Loan Amount" FROM loans;
Empressの変数MSQLSELHEADがアンセットされた場合、ヘッダーの 出力は抑制されます。
計算式を含んで検索します。
計算は検索されたフィールド値に対して行なわれ、単純な表現式や複雑な表現式かもしれません。
loansテーブルに対してamountとamountの2%と amountの2%増量を表示します。
SELECT name, amount, amount * 0.02 PRINT 'interest',
amount * 1.02 PRINT 'new balance'
FROM loans;
以下のように表示します。
name amount interest new balance Mosca $150.00 3.00 153.00 Jones $33.95 0.67 34.62 Kilroy $250.00 5.00 255.00 Wladislaw $55.00 1.10 56.10 Jones $25.00 0.50 25.50 Mosca $200.00 4.00 204.00 Wladislaw $25.00 0.50 25.50 Peterson $50.00 1.00 51.00 Wladislaw $75.00 1.50 76.50 Jones $300.00 6.00 306.00 Scarlatti $150.00 3.00 153.00 Scarlatti $125.00 2.50 127.50
ドル記号付きでinterest、new balanceというヘッダーで表示 します。
SELECT name, amount,
amount * 0.02 CONVERT DOLLAR PRINT 'interest',
amount * 1.02 CONVERT DOLLAR PRINT 'new balance'
FROM loan;
以下のように表示します。
name amount interest new balance Mosca $150.00 $3.00 $153.00 Jones $33.95 $0.67 $34.62 Kilroy $250.00 $5.00 $255.00 Wladislaw $55.00 $1.10 $56.10 Jones $25.00 $0.50 $25.50 Mosca $200.00 $4.00 $204.00 Wladislaw $25.00 $0.50 $25.50 Peterson $50.00 $1.00 $51.00 Wladislaw $75.00 $1.50 $76.50 Jones $300.00 $6.00 $306.00 Scarlatti $150.00 $3.00 $153.00 Scarlatti $125.00 $2.50 $127.50
複数テーブルから検索し、結果をテーブルに格納します。
loansテーブル、personnelテーブルから検索し、 loanslistというテーブル名のテーブルを作成し結果を格納します。
SELECT name PRINT Employee, credit_limit, date, amount
FROM loans, personnel
INSERT INTO loanlist
WHERE loans.name = personnel.name;
データベース内を参照すると。
*** repairs *** auto parts customers loanlist loans personnel
以下のコマンドを実行すると。
SELECT * FROM loanlist;
以下のように表示されます。
Employee credit_limit date amount Mosca $750.00 2 February 1990 $150.00 Jones $500.00 7 February 1990 $33.95 Kilroy $500.00 16 February 1990 $250.00 Wladislaw $50.00 27 February 1990 $55.00 Jones $500.00 3 April 1990 $25.00 Mosca $750.00 4 May 1990 $200.00 Wladislaw $50.00 12 May 1990 $25.00 Peterson $250.00 6 June 1990 $50.00 Wladislaw $50.00 25 June 1990 $75.00 Jones $500.00 12 August 1990 $300.00 Scarlatti $100.00 9 September 1990 $150.00 Scarlatti $100.00 14 October 1990 $125.00
この新しく作成されたテーブルは、他のテーブル同様に使用できます。
UNIONを使用した検索
2つのテーブル、loansとloanlistの連携を取得します。SELECT name, amount FROM loans UNION SELECT Employee, amount FROM loanlist;UNIONオペレーションのオペランドが同一なくてはなりません。それは、UNION オペレーションの2つのフィールドセットが同数のフィールドを持っていることを 意味します。また対応するフィールドは同じデータタイプでなくてはなりません。
同一のテーブル構造を持つテーブルに対するUNIONを使用した検索。
loanテーブルとloanlistテーブルが同一構造であり、2つの テーブルのすべての内容の結合を得たい場合、次の指定をします。
TABLE loan UNION TABLE loanlist;
UPDATEコマンドは、テーブル中にある一つ以上のレコードのフィールド値 を変更します。 Syntax command changes attribute values in one or more existing records in a table.
Syntax
Syntax 1:
| UPDATE table SET attr | |TO |= |
| | |
attr_value {, attr | |TO |= |
| | |
attr_value} |
[where_clause];
Syntax 2:
| UPDATE table [ | |(*) |(attr {, attr}) |
|] | |
| |VALUES [(] attr_value {, attr_value} [)] |attr_value {, attr_value} [END] |SET TO attr_value {, attr_value} |FROM data_source |
|; | | | |
[where_clause];
Syntax 3:
| UPDATE table SET | | * | attr {, attr} |
| | |
| |VALUES [(] attr_value {, attr_value} [)] |attr_value {, attr_value} [END] |FROM data_source |
|; | | |
[where_clause];
説明
| attr_value |
| |||
| expr | フィールドに与えられた適した値。詳細は Expressionsを参照してください。 | |||
| data_source |
| |||
| os_command | システムコマンドの出力が、直接テーブルに挿入されます。 この機能はUnixのみ有効です。 | |||
| where_clause | シンタックスはWHERE句 を参照してください。 |
注意
必要な特権
UPDATE特権
例
シンプルな更新
loansテーブル内の全てのレコードに対して日付を、1990年1月1日 にします。
UPDATE loans
SET date = '1 Jan 1990';
特定レコードの更新
loansテーブル中のnameフィールドMoscaを Kilroyに変更します。
UPDATE loans
SET name TO 'Kilroy'
WHERE name = 'Mosca';
この更新では、2レコードしか更新しません。
AND結合した条件で更新すいます。
loansテーブル中の日付が1990年2月2日でname フィールドがMoscaのレコードのnameフィールドをKilroy に変更します。
UPDATE loans
SET name TO 'Kilroy'
WHERE name = 'Mosca'
AND date = '2 February 1990';
OR結合された条件で更新します。
loansテーブルのnameフィールドがMoscaと Jonesのレコードの、nameフィールドをKilroyに変更 します。
UPDATE loans
SET name TO 'Kilroy'
WHERE name = 'Mosca'
OR name = 'Jones';
MoscaとJonesを表す場合に、英語での記述は Mosca and Jonesとなりますが、SQLのWHERE句での指定は Mosca or Jonesと指定するということに注意してください。 WHERE句でAND結合した記述Mosca and Jonesは レコードを限定できません。
いろいろなUPDATEコマンドのシンタックス例
Moscaの電話番号を928-1796に、クレジットリミットを$250.00 に変更するには以下のコマンドを使用します。
UPDATE personnel
SET phone TO '923-1796',
credit_limit TO 250
WHERE name = 'Mosca';
UPDATE personnel
(phone, credit_limit)
SET TO '923-1796', 250
WHERE name = 'Mosca';
UPDATE personnel
(phone, credit_limit)
'923-1796', 250 END
WHERE name = 'Mosca';
UPDATE personnel
(phone, credit_limit)
VALUES '923-1796', 250
WHERE name = 'Mosca';
UPDATE personnel
VALUES 5, 'Mosca', '923-1796', 250
WHERE name = 'Mosca';
計算して更新します。
loansテーブルのamountフィールド値を2%高くして更新します。
UPDATE loans
SET amount TO amount * 1.02;
ファイルから更新します。
下に示すデータを含んでいるファイル名をnewlimitsとします。データは 1行ごとか、Empress変数MSVALSEPに設定された文字列で分離されて いる必要があります。
600 500 250 750 500 250
以下のコマンドを使用します。
UPDATE personnel
SET credit_limit
FROM newlimits;
SELECT from personnelコマンドは、以下のような表示をします。
number name phone credit_limit
10 Kilroy 426-9681 $600.00
5 Mosca 544-2243 $500.00
17 Wladislaw 723-6073 $250.00
3 Jones 667-2951 $750.00
8 Peterson 978-6060 $500.00
4 Scarlatti 961-7363 $250.00
DELETEコマンドは、テーブルから1つ以上のレコードを削除します。
Syntax
DELETE [FROM] table [where_clause];
説明
| where_clause | シンタックスはWHERE句 を参照してください。 |
注意
よって削除対象を指定する条件を設定する際には、十分注意する必要があります。
必要な特権
DELETE特権
例
シンプルな削除
loansテーブルのnameフィールドがJonesのレコードを全て削除 します。
DELETE FROM loans
WHERE name = 'Jones';
Jonesという名前のレコードを全て削除します。
AND結合した条件で削除します。
WHERE句にレコードを特定するための条件を与えて削除します。 loansテーブルのnameフィールドがJonesで、 dateフィールドが1990年8月12日のレコードを削除します。
DELETE FROM loans
WHERE name = 'Jones'
AND date = '12 August 1990';
最も安全な方法はWHERE句の中で全フィールドを指定することです。
EMPTYコマンドは指定されたテーブル中の、全レコードを削除します。
Syntax
EMPTY table;
注意
必要な特権
EMPTY特権
例
loansテーブル内の全レコードを削除します。
EMPTY loans;
CALLコマンドは、表現式を評価したり、ストアドプロシージャを呼び出し ます。
Syntax
| CALL | |expr |procedure_name [([expr {,expr}])] |
| [ | |
|INTO |ONTO |
| filename ]; | |
注意
CALLコマンドでの表現式には、テーブル名、フィールド名は指定 できません。
対話型SQLではCALLコマンドによるデータタイプの変換はでき ません。
プロシージャまたはファンクションのみ呼び出すことができます。集計関数や オペレータが呼び出された場合には、エラーメッセージを出力します。
必要な特権
なし
例
ストアドプロシージャlog_eventを呼び出します。
CALL log_event;
本日から32日後の日付を取得します。
CALL TODAY + 32 DAYS;
いくつかの数学関数を呼び出します。
CALL sin(30); CALL cos(60);
しばしば、ある期間内のデータ(テーブルからの読込みまたは更新)について保証 しなくてはならない場合があります。これは、トランザクションの間に LOCK TABLEコマンドを使用して、他からのテーブルアクセスを制限すること により行うことができます。LOCK TABLEコマンドを発行することにより直ち に機能します。
Syntax
| LOCK table [IN] | |EXCLUSIVE |EXCL |SHARE |
| [MODE]; | | |
注意
必要な特権
共有モードでは、SELECT特権とUPDATE特権が必要 です。
排他モードでは、UPDATE特権、INSERT特権、 DELETE特権が必要です。
例
トランザクションが既に開始されていて、トランザクション中は排他 モードでloansテーブルをロックする場合。
LOCK loans EXCLUSIVE;
他のプロセスがloansテーブルにアクセス中であった場合、以下の メッセージが表示されます。
*** Lock Busy *** table 'loans' lock busy
SORTまたはORDERコマンドは、テーブルのデータを並べ替え ます。この並べ替えは1つのフィールドでも複数のフィールドでも行なえ、フィールド ごとに昇順または降順の指定ができます。省略時は昇順です。
Syntax
| |SORT |ORDER |
| table [ | |
|BY |ON |
|] attr [ | |ASCENDING |ASC |DESCENDING |DESC |
|] {, attr [ | | | |
|ASCENDING |ASC |DESCENDING |DESC |
|]}; | | | |
注意
必要な特権
SORT特権
例
personnelテーブルをnumberフィールドの昇順にソートします。
SORT personnel BY number; ORDER personnel BY number;
ソート後のテーブルを検索します。
SELECT FROM personnel;
以下のように表示されます。
number name phone credit_limit 3 Jones 667-2951 $500.00 4 Scarlatti 961-7363 $100.00 5 Mosca 544-2243 $750.00 8 Peterson 978-6060 $250.00 9 Jordan 964-3335 $250.00 10 Kilroy 426-9681 $500.00 17 Wladislaw 723-6073 $50.00