序文
この記事では、主に SQL 言語でのデータ更新の構文を説明し、例を使用して関連する知識を図解して説明します。
1. データ更新用データの挿入
1. 単一のタプルを挿入します
単一のタプルを挿入することは、テーブルにデータ行を挿入することとして理解できます。
(1) 発言形式
機能: 指定されたテーブルに新しいタプルを挿入します。
INSERT
INTO <表名> [(<属性1>[,<属性2>...])]
VALUES (<常量1>[,<常量2>]...);
(2) 文法的説明
INTO 句
- データを挿入するテーブル名と属性列を指定します
- 属性列の順序は、テーブル定義の順序と異なる場合があります。
- 属性列が指定されていません:完全なタプルが挿入され、属性列の属性がテーブル定義と同じ順序であることを示します。
- いくつかの属性列を指定します: 挿入されたタプルは残りの属性列で null 値を受け取ります (ORACLE は適用されません)
VALUES 句
- 指定された値は INTO 句と一致する必要があります
- 値の数
- 値の種類
ルールを挿入する
DBMS は、INSERT ステートメントを実行するときに、挿入されたタプルがテーブルに定義された整合性ルールに違反しているかどうかをチェックします
。
b. 参照整合性
c. ユーザー定義の整合性
- NOT NULL制約のある属性列に非NULL値を提供するかどうか
- UNIQUE制約のある属性列に一意の値を提供するかどうか
- 範囲制約のある属性列に指定された属性値が値の範囲の範囲内にあるかどうか
(3) 例を挙げて説明する
まず、現在のテーブルの整合性が次のように示されます。
1. DEPT テーブルには、DEPTNO、DNAME、および LOC という 3 つのフィールドがあります。
2. DEPTNO は主キーであり、空にすることはできません
3. DNAME と LOCnull にすることもできます
4. DEPTNO の文字タイプは次のとおりです。2桁の整数、DNAME および LOC は、弦
例 1:
単一のタプルをテーブルに挿入します。
INSERT
INTO DEPT
VALUES ('50','MARKETING','BEIJING');
結果:
例 2:
現在、同社はテクノロジー部門を設立する予定である(部門番号は60、部門名はTECHNOLOGY、どの都市に定住するかはまだ決まっていない)。
挿入方法 1:
INSERT
INTO DEPT
VALUES ('60','TECHNOLOGY','');
挿入方法 2:
INSERT
INTO DEPT
VALUES ('60','TECHNOLOGY',NULL);
間違いやすい
NULL 値にはさらに一重引用符が含まれており、挿入された NULL 値の代わりに NULL という単語が挿入されることを示します。
正しいコード:
INSERT
INTO DEPT
VALUES ('60','TECHNOLOGY',NULL);
エラーコード:
INSERT
INTO DEPT
VALUES ('60','TECHNOLOGY','NULL');
間違ったコードは、NULL を文字列としてテーブルに書き込むことと同じであることがわかりました。
2. サブクエリ結果の挿入
サブクエリの結果を指定されたテーブルに挿入します
(1) 発言形式
INSERT
INTO <表名> [(<属性1>[,<属性2>...])]
子查询;
(2) 文法的説明
INTO 句 (単一のタプルの挿入に似ています)
- データを挿入するテーブル名と属性列を指定します
- 属性列の順序は、テーブル定義の順序と異なる場合があります。
- 属性列が指定されていません: 完全なタプルが挿入されることを示します
- いくつかの属性列を指定します: 挿入されたタプルは残りの属性列で null 値を受け取ります (ORACLE は適用されません)
サブクエリ
SELECT 句のターゲット列は INTO 句と一致する必要があります
- 値の数
- 値の型
クエリルール
DBMS は、INSERT ステートメントを実行するときに、挿入されたタプルがテーブルに定義された整合性ルールに違反しているかどうかをチェックします
。
b. 参照整合性
c. ユーザー定義の整合性
- NOT NULL制約のある属性列に非NULL値を提供するかどうか
- UNIQUE制約のある属性列に一意の値を提供するかどうか
- 範囲制約のある属性列に指定された属性値が値の範囲の範囲内にあるかどうか
(3) 例を挙げて説明する
例 1: 各部門の従業員の平均給与を保存する新しいテーブルを作成します。
データはテーブル EMP:
idea:に保存されます。
-
最初のステップは、テーブルフィールド DEPTNO および AVGSAL を含むテーブルを作成することです。
-
2 番目のステップでは、EMP テーブル内の部門の平均給与をクエリし、見つかった値を新しく作成したテーブルに挿入します。
CREATE TABLE DEPT_AVGSAL
(
DEPTNO NUMBER(2,0) NOT NULL,
AVGSAL NUMBER(6,2) NOT NULL,
CONSTRAINT DEPT_AVGSAL_PK PRIMARY KEY
(
DEPTNO
)
ENABLE
);
INSERT
INTO DEPT_AVGSAL(DEPTNO,AVGSAL)
SELECT DEPTNO,AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
結果は次のとおりです。
2. データ更新のためのデータ修正
1. タプルの値を変更する
WHERE句の条件を満たす、指定されたテーブル内のタプルを変更します。
(1) 文法形式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
(2) 文法的説明
SET句
変更方法を指定する
- 変更する列
- 変更後の値
WHERE子句
変更するタプルを指定します
- デフォルトは、テーブル内のすべてのタプルを変更することを意味します
文法規則
DBMS は、変更ステートメントを実行するときに、その変更操作がテーブルに定義された整合性ルールに違反しているかどうかをチェックします
。
b. メインコードは変更できません。
c. ユーザー定義の整合性
- NOT NULL 制約
- 一意の制約
- 範囲制約
(3) 例を挙げて説明する
例 1: セクター調整
SMITH の部門を MARKETING (部門番号 50) に調整します。
元のテーブルは次のとおりです。
UPDATE EMP
SET DEPTNO=50
WHERE ENAME='SMITH';
2. 複数のタプルの値を変更する
文法形式と規則は、単一タプルの値の変更と一致するため、詳細は説明しません。
(1) 説明例
例 1: 給与は従業員に支払われます
全員の給与を 100 元増やし、研究部門 (部門番号を 20 と仮定) の従業員の月次ボーナスを 100 元に設定します。元のデータは次のとおりです。2 つのステップで操作し
ます
。
UPDATE EMP
SET SAL=SAL+100;
UPDATE EMP
SET COMM=100
WHERE DEPTNO=20;
結果:
3. 副問合せ付き修飾文
(1) 文法構造
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
WHERE (子查询);
(2) 例を挙げて説明する
例1:部門番号が分からないままボーナスを発行した場合
すべてのデータは前の例と一致しています。ここにはコードのみを記載します。あまり繰り返しません。
UPDATE EMP
SET COMM=200
WHERE(
SELECT DEPTNO
FROM EMP
WHERE DNAME='ACCOUNTING'
);
3. データ更新のためのデータ削除
1. タプルの値を削除する
指定されたテーブル内のWHERE句の条件を満たすタプルを削除します。
(1) 文法形式
DELETE
FROM <表名>
[WHERE <条件>];
(2) 文法的説明
FROM句
どのテーブルから削除するかを指定します
WHERE子句
- 削除するタプルが満たす条件を指定します
- デフォルトは、テーブル内のすべてのタプルを変更することを意味します
(3) 例を挙げて説明する
例1: 従業員情報を削除する
従業員 MARTIN が退職したため、彼の基本情報を削除する必要があります
DELETE
FROM EMP
WHERE ENAME='MARTIN';
2. 複数のタプルの値を削除する
文法形式と規則は、単一タプルの値の変更と一致するため、詳細は説明しません。
(1) 説明例
例1:部門の解散
会社は従業員を解雇し、研究部門を解散し(部門番号を 20 とする)、研究部門の情報をすべて削除します。
DELETE
FROM EMP
WHERE DEPTNO=20;
3. サブクエリ付きステートメントの削除
(1) 文法形式
DELETE
FROM <表名>
WHERE (子查询);
(2) 例を挙げて説明する
例1:部門番号が分からないまま部門を解散する場合
会社は従業員を解雇し、会計部門を解散し(部門番号は不明であると仮定します)、会計部門のすべての情報を削除します。
DELETE
FROM EMP
WHERE(
SELECT DEPTNO
FROM EMP
WHERE DNAME='ACCOUNTING';
)
4. 削除しやすい箇所
(1) 整合性制約の違反
(2) DELETE は CASCADE をサポートしていません
要約する
読者は記事の不適切な部分を修正してください。
SQL 言語の基本的な知識を理解するには、
SQL 言語の概要と SQL 言語のデータ定義を参照してください
。 SQL 言語 - データ クエリ