記事ディレクトリ
補遺を確認してください。
結合クエリ。
複合クエリは、演算子を使用UNION
してさまざまなクエリからのデータを組み合わせ、包括的な情報を持つクエリ結果を形成することです。UNION
この操作では重複するデータ行が自動的に削除されますが、結合クエリに参加する各サブクエリで使用されるテーブル構造は同じである必要があります。つまり、各サブクエリのデータ数と対応するデータ型は同じである必要があります。
[例] SC
データテーブルから学生IDがS1 SC
の学生の学生IDと合計スコアをクエリし、テーブルから学生IDがS5の学生の学生IDと合計スコアをクエリして、2つのクエリ結果を1つにマージします。結果セット。
SELECT SNo AS 学号,SUM(Score) AS 总分
FROM SC
WHERE SNo='S1'
GROUP BY SNo
UNION
SELECT SNo AS 学号,SUM(Score) AS 总分
FROM SC
WHERE SNo='S5'
GROUP BY SNo
クエリ結果をデータテーブルとして保存します。
ステートメントSELECT ...INTO
を使用して、クエリ結果を新しいデータテーブルまたは一時テーブルに保存します。
[例]データテーブルからSC
生徒IDと全生徒の合計スコアをクエリし、クエリ結果を新しいデータテーブルに保存しますCal_Table
。
SELECT SNo AS 学号,SUM(Score) AS 总分
INTO Cal_Table
FROM SC
GROUP BY SNo
この例では、クエリの結果は新しく作成されたデータテーブルCal_Tableに保存されます。2行目のステートメントをに変更するINTO #Cal_Table
と、クエリの結果は一時テーブルに保存され、メモリにのみ保存されます、データベースに保存されていないため、存在時間が非常に短い。
データテーブルにデータを追加します。
SQLが提供するデータ操作関数には、主に次の3つの関数が含まれます。
- データを追加する
- データを変更する
- データを削除する
まず、データの追加に使用するSQLコマンドはINSERT INTO
であり、次の状況に分類できます。
- [データの行を追加]構文形式は次のとおりです。
INSERT INTO NAME_OF_TABLE (Col_1,Col_2,...,Col_n)
VALUES (Val_1,Val_2,...,Val_n)
その中にNAME_OF_TABLE
は、新しいレコードが追加されるテーブルがあります。次のn列はオプションで、VALUES
追加するデータのnフィールドを指定し、句は追加するデータの特定の値を指定します。n列名の出現順序は、データテーブルが定義されているときの順序と正確に同じVALUES
である必要はありませんが、句の特定の値は、前に表示されるn列の順序と一致している必要があり、データ型は1対1で対応することに注意してください。
【例】向S
表中添加一条学生记录,学号:S7;姓名:郑东;性别:女;年龄:21;系别:计算机。
INSERT INTO S (SNo,SN,Sex,Age,Dept)
VALUES ('S7','郑东',21,'女','计算机')
注意!必须用逗号将VALUES
子句中的数据隔开,字符型的数据要用单引号括起。如果INTO
子句中没有指定列名的顺序,则新添加的记录必须在每个定义好的属性列上均有值,且VALUES
子句中值的排列顺序要和表中各个属性列的排列顺序一致。
【例】在选课关系表中添加一条记录(S7,C1).
INSERT INTO SC (SNo,CNo)
VALUES ('S7','C1')
将VALUES
子句中的值按照INTO
子句中指定列名的顺序添加到表中,对于INTO
子句中没有出现的列,例如本题中的Score属性
,则系统会将新数据记录在该列上的值赋为NULL。但有一些表中的属性列,在定义时添加了NOT NULL
约束,插入时就必须给这样的列赋值。
- 【添加多行数据】这一操作多用于表间的复制,即将一个表中的数据抽取数行添加到另一个表中,可以通过子查询来实现。
【例】求出各系教师的平均工资,并且将结果置于新建立的表AvgSal
中。
//First,construct the table AvgSal.
CREATE TABLE AvgSal
(Department VARCHAR(20),
Average SMALLINT)
//Second,append data into AvgSal.
INSERT INTO AvgSal
SELECT Dept,AVG(Sal)
FROM T
GROUP BY Dept
修改数据表中的数据.
SQL提供UPDATE
语句来对数据表中的一行或多行记录的某些属性值进行修改,其完整的语法格式如下:
UPDATE NAME_OF_TABLE
SET NAME_OF_COLUMN=EXPRESSION
WHERE EXPRESSION
显然地,NAME_OF_TABLE
是要修改的表,SET
子句给出要修改的属性列以及修改后的属性值,WHERE
子句指定待修改记录应当满足的条件。
【例】将刘伟老师转到信息系。
UPDATE T
SET Dept='信息'
WHERE TN='刘伟'
【例】将所有学生的年龄增加一岁。
UPDATE S
SET Age=Age+1
【例】将工资小于等于1000元的那些职称为讲师
的教师的工资提高20%.
UPDATE T
SET Sal=1.2*Sal
WHERE Sal<=1000 AND Prof='讲师'
【例】将讲授C5课程的教师的津贴提高100元。
UPDATE T
SET Comm=Comm+100
WHERE TNo IN (
SELECT TNo
FROM T,TC
WHERE T.TNo=TC.TNo AND CNo='C5'
)
【例】将所有教师的工资修改为平均工资的1.2倍。
UPDATE T
SET Sal=(SELECT 1.2*AVG(Sal) FROM T)
从数据表中删除数据.
SQLには、DELETE
データを削除するためのステートメントが用意されています。データベースを削除したり、基本テーブルを削除したりする場合のDROP
ステートメントとは異なります。DELETE
ステートメントの基本的な構文形式は次のとおりです。
DELETE
FROM NAME_OF_TABLE
WHERE CONDITION
そのうちNAME_OF_TABLE
、WHERE
削除するデータテーブルを参照し、句は削除するレコードが満たすべき条件を指定します。
【例】劉偉先生の記録を削除する。
DELETE
FROM T
WHERE TN='刘伟'
[例]すべての教師の教育記録を削除します。
DELETE
FROM TC
TCは既に空のテーブルですが、その定義はまだ存在しています。つまり、TCテーブルは削除されておらず、データを追加できます。
【例】劉偉先生の講義録を削除する。
DELETE
FROM TC
WHERE TNo=(SELECT TNo FROM T WHERE TN='刘伟')