デヌタベヌスの孊習 3 SQL蚀語

📢 この蚘事は Google 翻蚳を䜿甚しお凊理されたした

SQL シリヌズ

デヌタベヌス孊習1 デヌタベヌス導入: https://blog.yexca.net/ja/archives/86
デヌタベヌス孊習2 関係モデル: https://blog.yexca.net/ja/archives/87
デヌタベヌス孊習3 SQL蚀語: この蚘事
デヌタベヌス孊習4 関係デヌタベヌス理論: https://blog.yexca.net/ja/archives/89
デヌタベヌス孊習5 正芏圢: https://blog.yexca.net/ja/archives/90
デヌタベヌス孊習6 デヌタベヌス蚭蚈: https://blog.yexca.net/ja/archives/91
デヌタベヌス孊習7 デヌタベヌスの制埡機胜: https://blog.yexca.net/ja/archives/92

SQL蚀語の分類

  • DDLデヌタ定矩蚀語

デヌタベヌスシステムでは、デヌタベヌス内の各デヌタベヌス、テヌブル、ビュヌ、むンデックスなどがデヌタベヌスオブゞェクトです。デヌタベヌスオブゞェクトを䜜成たたは削陀するには、SQL 蚀語を䜿甚したす。 DDL には CREATE、ALTER、DROP などが含たれたす。

  • DMLデヌタ操䜜蚀語

DML は、INSERT、DELETE、UPDATE など、デヌタベヌス内のデヌタを远加、倉曎、削陀するために䜿甚されるステヌトメントを指したす。

  • DQL (デヌタク゚リ蚀語)

ク゚リはデヌタベヌスの基本機胜であり、ク゚リ操䜜は SQL デヌタ ク゚リ蚀語を通じお実装されたす。たずえば、テヌブルの内容を照䌚するにはSELECTを䜿甚したす。

  • DCLデヌタ制埡蚀語

DCL には、デヌタベヌス オブゞェクトの暩限管理やトランザクション管理などが含たれたす。

(I) DDLデヌタ定矩蚀語

1. デヌタベヌスを䜜成する

1
create database <デヌタベヌス名>

2。基本テヌブルを䜜成したす

1
2
3
4
5
6
7
create table <テヌブル名>
(
    <列名> <デヌタ型> [列レベルの敎合性制玄],
    [···,]
    [テヌブルレベルの敎合性制玄,]
    [···]
)

<1> デヌタタむプ

  1. INT / INTEGER : 敎数
  2. FLOAT(n): 少なくずもn桁の粟床を持぀浮動小数点数
  3. NUMERIC(p, d) / DECIMAL(p, d) / DEC(p, d): p桁笊号ず小数点を陀くのd桁の固定小数点数小数点以䞋の数字
  4. CHAR(n): 長さnの固定長文字列
  5. DATETIME: 日付ず時刻の型
1
2
3
4
5
6
-- 䟋えば
create table test
(
    f1 char(10),
    f2 int
)

<2> ラむンレベルの敎合性の制玄

  1. not null: 空ではない

  2. unique: ナニヌク

  3. not null unique: 空ではなくナニヌク

  4. default: デフォルト倀を定矩する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-- 䟋えば
create table test
(
    f1 int not null, 
    -- この列は空にできたせん
    
    f2 int unique, 
    -- この列の倀は空でも構いたせんが、各行は異なる必芁がありたす
    
    f3 int not null unique, 
    -- 列は空ではなく、各行は異なりたす
    
    f4 char(5) default 'nashi' 
    -- 新しく远加された行に倀が割り圓おられおいない堎合、この列はデフォルトで「nashi」になりたす。
)

<3> テヌブルレベルの敎合性の制玄

名前条項通信の完党性
䞻キヌ句PRIMARY KEY゚ンティティの敎合性
チェック条項CHECKナヌザヌ定矩の敎合性
倖郚キヌ句FOREIGN KEY参照敎合性
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
-- 䟋えば
create table student
(
    sid int,
    primary key(sid) -- not null unique
)
-- たたは
create table student
(
    sid int primary key
)

create table course
(
    cid int,
    sid int,
    score int,
    check(score >= 0 and score <= 100),
    foreign key(sid) references student(sid)
)

敎合性の怜査

  1. アサヌト通垞は掚奚されたせん
1
2
3
4
CREATE ASSERTION <アサヌション名> <チェック条項>  
-- チェック句は、where 句の匏に䌌おいたす。
-- アサヌション名を削陀
DROP ASSERTION <断蚀名>;
  1. トリガヌ

テヌブルが远加、削陀、たたは倉曎されるず、トリガヌ内の条件がチェックされたす。条件が満たされおいる堎合はトリガヌ内のアクションが実行され、満たされおいない堎合はアクションは実行されたせん。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CREATE TRIGGER <トリガヌ名>           
-- トリガヌ むベントが発生するたびに、トリガヌがアクティブになりたす。
{BEFORE|AFTER} <トリガヌむベント> ON <テヌブル名> 
-- トリガヌ むベントの実行前たたは実行埌にトリガヌがアクティブ化されるかどうかを瀺したす。
REFERERCING NEW|OLD ROW AS <倉数>  
-- REFERENCINGは参照される倉数を瀺す
FOR EACH{ROW|STATEMENT}            
-- トリガヌの皮類を定矩し、アクション本䜓の実行頻床を指定したす。
[WHEN <トリガヌむベント>] <トリガヌアクション本䜓>      
-- トリガヌアクションはトリガヌ条件が真の堎合にのみ実行されたす
 
-- トリガヌの削陀
DROP TRIGGER <トリガヌ名> ON <テヌブル名>

3。基本的なテヌブル構造を倉曎したす

  • 新しい列を远加する
1
2
3
4
alter table <テヌブル名> add <列名> <タむプ>

-- 䟋えば
alter table test add f3 datetime
  • 列を倉曎する*
1
2
3
4
5
6
7
alter table <テヌブル名> alter column <列名> <新しいタむプ>
-- MySQL
-- alter table <テヌブル名> modify <列名> <新しいタむプ>

-- 䟋えば
alter table test alter column f3 float
-- alter table test modify f3 float
  • 列の削陀
1
2
3
4
5
6
7
alter table <テヌブル名> drop column <列名>
-- MySQL
-- alter table <テヌブル名> drop <列名>

-- 䟋えば
alter table test drop column f3
-- alter table test drop f3

4。基本テヌブルを削陀したす

1
2
3
4
drop table <テヌブル名>

-- 䟋えば
drop table test

(二)、DML デヌタ操䜜蚀語

次のコンテンツの䟋は、これらのテヌブルに基づいおいたす

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- 泚: 理解しやすいように䞭囜語を䜿甚しおいたす。実際の開発では英語を䜿甚しおください。
-- 孊生テヌブル
create table student
(
    孊号 char(5) not null unique,
    姓名 char(8),
    性别 char(2),
    出生日期 datetime,
    班号 char(5)
)
-- 成瞟テヌブル
create table score
(
    孊号 char(5),
    诟皋号 char(5),
    分数 int
)
-- 教垫テヌブル
create table teacher
(
    教垈猖号 char(5) not null unique,
    姓名 char(8),
    性别 char(2),
    出生日期 datetime,
    职称 char(6),
    系别 char(10)
)
-- コヌススケゞュヌル
create table course
(
    诟皋号 char(5) not null unique,
    诟皋名 char(20),
    任诟教垈猖号 char(5)
)

1. INSERT ステヌトメントを挿入

SQL基本テヌブルにデヌタを挿入する方法は2぀ありたす。タプル倀を盎接挿入するか、ク゚リの結果倀を挿入するかです。

  1. タプル倀を盎接挿入する
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
insert into テヌブル名[(列名の順序)] values (タプル倀)[, ···]
-- 或者
insert into テヌブル名[(列名の順序)]
(table (タプル倀)[, (タプル倀), ···])

-- 䟋劂
insert into student
values 
('108', '匠䞉', '男', '2000-01-01', '09033'),
('109', '李四', '男', '2000-05-05', '09034')
-- 指定した列を挿入する
insert into student(孊号姓名性别出生日期)
values (110, '王五', '男', '2000-04-18')
  1. ク゚リの結果倀を挿入する
1
2
3
4
5
insert into テヌブル名[(列名の順序)] select <ク゚リステヌトメント>

-- 䟋えば
insert into student
select 111, '赵六', '男', '2000-03-19', '09035'

2. DELETE 削陀ステヌトメント

1
2
3
4
5
6
7
delete from <テヌブル名> [where <条件匏>]

-- 䟋えば
delete from student -- テヌブル党䜓を削陀する
-- 生埒番号111のタプルを削陀したす
delete from student
where 孊号 = 111

3. UPDATE ステヌトメントを修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
update <テヌブル名>
set <列名> = <䟡倀衚珟>[, ···]
[where <条件匏>]

-- 䟋えば
update student
set 班号 = '09058'
where 孊号 = 110
-- たたは
update student
set 班号 = '09057', 性别 = '女'
where 孊号 = 110 and 班号 = '09058'

(侉)、DQL デヌタク゚リ蚀語

SQL デヌタク゚リ機胜は SELECT 文を通じお実装されたす。完党な構文は次のずおりです。

1
2
3
4
5
6
select <察象テヌブルの列名たたは列匏のシヌケンス>
from <リレヌションテヌブルシヌケンス>
[where <行条件匏>]
[group by <列名の順序>]
[having <グルヌプ条件匏>]
[order by <列名> [asc|desc]]

1. 投圱ク゚リ

ク゚リ テヌブル内の任意の列を遞択するには、SELECT コマンドを䜿甚したす。耇数の列がある堎合は、カンマ , を䜿甚しお区切りたす。 FROM句に耇数のリレヌショナルテヌブルがある堎合、各テヌブルの名前を蚘述する必芁がありたす。

1
2
3
4
5
6
7
8
9
-- 䟋えば
select 1 + 1
select 孊号 * 100 from student
-- 孊生IDずスコアを照䌚する
select student.孊号, score.分数
from student, score
-- すべおの列をク゚リする
select *
from student

重耇行を削陀するには DISTINCT を䜿甚したす

1
2
3
-- 重耇行を削陀し、遞択したコヌスを照䌚する
select distinct 诟皋号
from score

ク゚リ結果の列名をカスタマむズするには AS を䜿甚したす

1
2
3
-- 䟋えば
select 孊号 as 'sno'
from student

2. ク゚リを遞択

遞択ク゚リは、ク゚リ条件を指定し、゜ヌス テヌブルからク゚リ条件を満たすレコヌドのみを抜出たたは衚瀺したす。

遞択ク゚リでは通垞、次の皮類の操䜜が䜿甚されたす。

オペレヌタヌコヌド説明する
セットメンバヌシップ挔算子IN
NOT IN
セット内
セットに含たれない
文字列マッチング挔算子LIKE_ および % を䜿甚した単䞀たたは耇数の文字の䞀臎
NULL比范挔算子IS NULL
IS NOT NULL
空の
空にするこずはできたせん
算術挔算子>
>=
«br /><=
=
<>
より倧きい
より倧きいか等しい
未満
以䞋
等しい
等しくない

<1> 条件匏の比范挔算

1
2
3
4
5
6
--- スコアが6080のレコヌドを怜玢する
select *
from score
where 分数 between 60 and 80
-- 60ず80を含めるにはbetweenを䜿甚したす。぀たり[60, 80]です。
-- スコア >= 60 か぀スコア <= 80 の堎合ず同等

<2> 文字列マッチング操䜜

1
where [not] like '䞀臎する文字列' [escape '䞀臎する文字列']

'䞀臎文字列' は完党な文字列にするこずも、ワむルドカヌド文字 % ず _ を含めるこずもできたす。

  • %: 任意の長さの文字を衚したす
  • _ : 任意の1文字を衚す

<3> 集合の比范挔算

1
2
3
4
-- スコアが85、86、たたは88のレコヌドをク゚リしたす
select *
from score
where 分数 in (85, 86, 88)

<4> 論理的結合挔算

1
2
3
4
-- クラス09031の女子生埒党員を照䌚する
select *
from student
where 班号 = '09031' and 性别 = '女'

3. 䞊べ替えク゚リ

ク゚リ結果はORDER BY句を䜿甚しお䞊べ替えるこずができたす。

1
2
3
4
5
6
7
8
-- 昇順 asc (デフォルト、省略可胜)
select 孊号, 姓名
from student
order by 孊号
-- 降順 desc
select 孊号, 姓名
from student
order by 孊号 desc

耇数の列を指定しお䞊べ替えるこずもできたす。最初の列が最初に䞊べ替えられ、次に2番目の列が䞊べ替えられたす。

1
2
3
4
-- コヌス番号の昇順ずスコアの降順で怜玢結果を衚瀺したす
select *
from score
order by 诟皋号 asc, 分数 desc

ORDER BY 句はク゚リの最埌に配眮する必芁がありたす。

4. 集蚈関数

集蚈関数は、デヌタ統蚈やその他の機胜を実装したす。䞀連の倀を蚈算し、単䞀の倀を返すために䜿甚されたす。

通垞は group by 句ずずもに䜿甚される䞀般的な集蚈関数は次のずおりです。

関数名説明
AVG平均倀
COUNT指定された匏で遞択された項目の数をカりントしたす
COUNT(*)はク゚リによっお出力された行数をカりントしたす
MIN最小倀
MAX最倧倀
SUM倀の合蚈
STDWV指定された匏のすべおのデヌタの暙準偏差を蚈算したす
STDEVP母集団暙準偏差

集蚈関数の匕数の䞀般的な圢匏は次のずおりです。

1
[all|distinct] expr

このうち、ALL はすべおの倀に察しお集蚈関数挔算を実行するこずを意味し、これがデフォルト倀ずなりたす。たた、DISTINCT は、すべおの䞀意の倀が考慮されるこずを指定したす。 exprは匏です

1
2
3
4
-- クラス「09031」の生埒数を照䌚する
select count(*) as '人数'
from student
where 班号 = '09031'

5. デヌタのグルヌプ化

集蚈関数は1぀の結果しか出力しないため、列をク゚リしお集蚈関数をたずめるず゚ラヌが報告されたす。

特定のカテゎリの集蚈関数の結果は、デヌタをグルヌプ化するこずで蚈算できたす。぀たり、集蚈関数の範囲は各グルヌプ内のすべおのレコヌドになりたす。

集蚈関数をフィルタヌ条件ずしお䜿甚する堎合は、それを HAVING 句の埌に眮く必芁がありたす。

1
2
3
4
5
6
-- 最䜎スコアが 70 を超え、最高スコアが 90 未満の孊生の孊生 ID を照䌚したす。
select 孊号
from score
where 分数 is not null
group by 孊号
having min(分数) > 70 and max(分数) < 90

ク゚リ内に WHERE 句、GROUP BY 句、HAVING 句、および集蚈関数が同時に出珟する堎合、SELECT コマンドの実行順序は次のようになりたす。

  1. WHERE句を実行しおテヌブルから行を遞択したす
  2. 遞択した行を「GROUP BY」でグルヌプ化する
  3. 集蚈関数を実行する
  4. HAVING句を実行しお条件を満たすグルヌプを遞択したす。
1
2
3
4
-- 各コヌスの平均スコアを照䌚する
select 诟皋号, avg(分数)
from score
group by 诟皋号

集蚈関数は条件ずしお HAVING 句の埌にのみ配眮でき、 WHERE 句の埌には配眮できたせん。

SELECT句が列名ず集蚈関数で構成されおいる堎合、すべおの列名をグルヌプ化する必芁がありたす。

6. テヌブル接続ク゚リ

FROM 句では結合するテヌブルを指定し、WHERE 句では結合条件を指定したす。

1
2
3
select <列名1>[, ···]
from <衚1>[, ···]
where 接続条件

2぀のテヌブルの共通列には、student.孊号などのプレフィックスを指定する必芁がありたす。

SQL Server では、接続は内郚接続ず倖郚接続に分けられたす。

<1> 内郚結合

Θ 結合、等䟡結合、自然結合

内郚結合は最も基本的な結合方法です。INNER JOIN キヌワヌドを䜿甚したす。このキヌワヌドを䜿甚しない堎合、デフォルトは内郚結合になりたす。

  1. 等接続

぀たり、2぀のテヌブル間の接続関係は「等しい」です。

1
2
3
4
5
6
7
8
9
-- すべおの孊生の名前、コヌス番号、スコアの列を照䌚する
select student.姓名, score.诟皋号, score.分数
from student, score
where student.孊号 = score.孊号
-- したがっお
select student.姓名, score.诟皋号, score.分数
from student
inner join score
on student.孊号 = score.孊号

入力を簡略化するために、テヌブル゚むリアスを䜿甚するこずができたす。

1
2
3
4
-- 前の䟋の簡略化
select x.姓名, y.诟皋号, y.分数
from student x, score y
where x.孊号 = y.孊号
  1. 非等䟡結合

぀たり、2぀のテヌブル間の接続関係は「等しい」ではない。

  1. 自己接続

同じテヌブルを結合するこずを自己結合ず呌びたす。

1
2
3
4
5
6
-- '3-105' を受隓し、そのスコアが生埒 '109' のスコアより高い生埒の蚘録を照䌚したす。
select x.诟皋号, x.孊号, x.分数
from score x, score y
where x.诟皋号 = '3-105' and x.分数 > y.分数
		and y.孊号 = '109' and y.诟皋号 = '3-105'
order by x.分数 desc

<2> 倖郚結合 OUTER JOIN

巊倖郚結合: LEFT OUTER JOIN たたは LEFT JOIN

右倖郚結合: RIGHT OUTER JOIN たたは RIGHT JOIN

完党倖郚結合: FULL OUTER JOIN たたは FULL JOIN

1
2
3
4
5
-- 巊倖郚結合の䟋
-- すべおのコヌスの教垫の名前を照䌚する
select course.诟皋名, teacher.姓名
from course left join teacher
on (course.任诟教垈猖号 = teacher.教垈猖号)

7. サブク゚リ

<1> 䞀般的なサブク゚リ

あるク゚リが別のク゚リの条件である堎合、぀たり、テヌブルから行を遞択する条件がテヌブル自䜓たたは他のテヌブルの結合情報に䟝存する堎合、サブク゚リを実装する必芁がありたす。

サブク゚リは、SELECT ステヌトメントの WHERE 句で最もよく䜿甚されたす。

1
2
3
4
5
6
7
8
-- 孊生番号「105」の孊生ず同じ幎に生たれた孊生を怜玢したす
select 孊号, 姓名, year(出生日期) as '出生幎仜'
from student
where year(出生日期) = (
						select year(出生日期)
    					from student
    					where 孊号 = '105'
						)

<2> 盞関サブク゚リ

通垞のサブク゚リでは、各サブク゚リは 1 回だけ実行され、返された倀はメむンク゚リの WHERE 句で䜿甚されたす。

メむン ク゚リが各行を遞択するかどうかを刀断するずきは、サブク゚リを「起動」し、メむン ク゚リにフィヌドバックする必芁がありたす。぀たり、内郚条件に倖郚属性が含たれるサブク゚リは盞関サブク゚リず呌ばれたす。

1
2
3
4
5
6
7
8
9
-- コヌスの平均スコアよりも䜎いスコアを持぀孊生を照䌚する
select 孊号, 诟皋号, 分数
from score a
where 分数 < (
				select avg(分数)
    			from score b
    			where a.诟皋号 = b.诟皋号 
    				and 分数 is not null
				)

<3> EXISTS テストを含むサブク゚リ

EXISTS は存圚量指定子 ∃ を衚し、論理真たたは論理停の倀のみを返したす。

1
2
3
4
5
6
7
8
-- すべおの教垫の名前ず郚門を照䌚する
select 姓名, 系别
from teacher a
where exists (
				select *
    			from course b
    			where a.教垈猖号 = b.任诟教垈猖号
				)

あるいは、結果を吊定する「NOT EXISTS」がある。

8. ク゚リ結果の結合、亀差、差の挔算

次の挔算子を䜿甚しお、2 ぀の SELECT ク゚リの結果に察しお操䜜を実行できたす。

  • UNION : および
  • 亀差:
  • 䟋倖: 差異
1
2
3
4
5
6
7
8
-- ANDの䟋
-- すべおの教垫ず生埒の名前、性別、生幎月日を照䌚する
select 姓名, 性别, year(出生日期) as '出生幎仜'
from teacher
union
select 姓名, 性别, year(出生日期) as '出生幎仜'
from student
-- order by 生幎

(四)、DCL デヌタ制埡蚀語

デヌタ制埡は、ナヌザヌのデヌタ保存暩限を制埡し、DBAデヌタベヌス管理者によっお決定されたす。

デヌタベヌスセキュリティ

䞍安芁玠:

  1. デヌタベヌスぞの䞍正アクセスず砎壊
  2. デヌタベヌスから重芁なデヌタが挏掩
  3. 安党保障環境の脆匱性

セキュリティコントロヌル:

  1. ナヌザヌID認蚌: 静的パスワヌド認蚌、動的パスワヌド認蚌、生䜓認蚌、スマヌトカヌド認蚌
  2. アクセス制埡
  3. 自埋的なアクセス制埡方匏ナヌザヌが操䜜暩限をカスタマむズし、他のナヌザヌに割り圓おるこずができる

自埋アクセス制埡

DBMSデヌタベヌス管理システムデヌタ制埡には以䞋の機胜が必芁です

  1. GRANTずREVOKEを通じおシステムに暩限を通知し、デヌタ蟞曞に保存する
  2. ナヌザヌがリク゚ストを行った堎合、認可ステヌタスに基づいお操䜜リク゚ストを実行するかどうかを確認したす。

SQL 暙準には、DELETE、INSERT、SELECT、および UPDATE 暩限が含たれたす。 SELETE 暩限は READ 暩限に察応したす。SQL には REFERENCES 暩限も含たれおおり、これはリレヌションを䜜成するずきにナヌザヌが倖郚キヌを定矩する機胜を制限するために䜿甚されたす。

1. 認可ステヌトメントの圢匏

1
2
3
4
grant <暩限>[, ···] 
on <オブゞェクトタむプ> <オブゞェクト名>[, ···]
to <ナヌザヌ>[, ···]
[with grant option]

操䜜オブゞェクトの皮類によっお暩限は異なりたす。䞀般的な暩限は次のずおりです。

オブゞェクトオブゞェクトタむプ操䜜暩限
属性列TABLESELECT、INSERT、UPDATE、DELETE、
ALL PRIVILEGES (4぀の暩限の合蚈)
ビュヌTABLESELECT、INSERT、UPDATE、DELETE、
ALL PRIVILEGES (4぀の暩限の合蚈)
基本テヌブルTABLESELECT、INSERT、UPDATE、DELETE、ALTER、INDEX
ALL PRIVILEGES (6぀の暩限の合蚈)
デヌタベヌスDATABASECREATETAB テヌブルを䜜成する暩限。DBA が䞀般ナヌザヌに付䞎できたす。
  • PUBLIC: 暩限を受け取るナヌザヌは、単䞀のナヌザヌたたは耇数の特定のナヌザヌです。PUBLIC パラメヌタは、すべおのナヌザヌに暩限を付䞎できたす。
  • GRANT OPTION付き: この句が指定されおいる堎合、暩限を取埗したナヌザヌは他のナヌザヌに暩限を付䞎するこずもできたす。

2. 暩限取り消しステヌトメントの圢匏

1
2
3
revoke <暩限>[, ···]
on <オブゞェクトタむプ> <オブゞェクト名>[, ···]
from <ナヌザヌ>[, ···]

デヌタベヌスの圹割

圹割ずは、CEO、取締圹、䞀般埓業員など、人物のタむプを指したす。人物のタむプを承認できたす。

  1. キャラクタヌ䜜成
1
create role <キャラクタヌ名>
  1. ロヌルの承認
1
grant <暩限> on <オブゞェクトタむプ> <オブゞェクト名> to <圹割1>[, ···]
  1. 他のナヌザヌたたはロヌルにロヌルを付䞎する
1
2
grant <圹割> to <圹割>たたは<ナヌザヌ名>
[with admin option]

with admin option は、このナヌザヌが他のロヌルたたはナヌザヌにこの暩限を付䞎できるこずを意味したす。

  1. ロヌル暩限の取り消し
1
revoke <暩限> on <オブゞェクト名> from <キャラクタヌ名>

ビュヌのメカニズム

ビュヌは、1 ぀以䞊の基本テヌブルたたはビュヌから掟生したテヌブルです。これは仮想テヌブルです。

ナヌザヌごずに異なるビュヌを定矩し、ナヌザヌが間違いを起こさないように䞍芁なデヌタを非衚瀺にしたす。

ビュヌの䜜成

1
2
3
create view <ビュヌ名(リスト名)>
as select <ク゚リ句>
[with check option]
  1. サブク゚リのSELECT文には通垞、ORDER BY句ずDISTINCT文を含めるこずはできたせん。
  2. WITH CHECK OPTION は、UPDATE、INSERT、および DELETE 操䜜の堎合、操䜜察象の行がビュヌ定矩の述語条件 (぀たり、サブク゚リの条件匏) を満たす必芁があるこずを意味したす。
  3. ビュヌを構成する属性列名がすべお省略されおいるか、すべお指定されおいたす。省略した堎合、ビュヌは SELECT サブク゚リのタヌゲット列のプラむマリ属性で構成されおいるこずが暗黙的に瀺されたす。
1
2
3
4
5
6
7
8
-- 関係モデルstudent(sno, sname, sex, SD, email)
-- 「コンピュヌタサむ゚ンスCS」の孊生向けのビュヌを䜜成し、倉曎操䜜を実行する堎合
-- ビュヌ内のコンピュヌタサむ゚ンスの孊生のみが圱響を受けるようにする
create view cs-student
	as select sno, sname, sex
	from student
	where SD = 'CS'
	with check option

ビュヌの削陀

1
2
3
4
drop view <ビュヌ名>

--䟋えば
drop view cs-student

監査

デヌタベヌスに察するすべおの操䜜は監査ログに蚘録され、そのログを䜿甚しお䞍正な動䜜があるかどうかを確認できたす。

1
2
3
4
-- 「SC」デヌタを倉曎する監査操䜜
AUDIT UPDATE ON SC;
-- 「SC」テヌブルのすべおの監査をキャンセルしたす
NOAUDIT UPDATE ON SC;

デヌタ暗号化

いく぀かの暗号化アルゎリズムにより、プレヌンテキストは暗号テキストに倉換され、他の人が閲芧できなくなりたす。

 玢匕

むンデックスを䜿甚するず、デヌタベヌス プログラムはテヌブル党䜓をスキャンしなくおも、テヌブル内の必芁なデヌタを芋぀けるこずができたす。

デヌタベヌスのむンデックスは、テヌブルの 1 ぀以䞊の列の倀のコレクションず、これらの倀を物理的に識別するテヌブル内のデヌタ ペヌゞぞの論理ポむンタヌの察応するリストです。

内郚スキヌマによっお定矩されたす内郚スキヌマはすべおの内郚レコヌドタむプ、むンデックス、およびファむル構成を定矩したす

むンデックスを䜜成する

1
2
create [unique] [cluster] index <むンデックス名>
	on <テヌブル名>(列名[順序], ···)

順序オプションASCデフォルトたたは DSC

UNIQUE このむンデックスの各むンデックス倀が 1 ぀のデヌタ レコヌドのみに察応するこずを瀺したす。

CLUSTER 䜜成されるむンデックスがクラスタヌ化むンデックスであるこずを瀺したす。぀たり、むンデックス項目の順序は、テヌブル内のレコヌドの物理的な順序ず䞀臎したす。

むンデックスの削陀

1
drop index <むンデックス>

Visits Since 2025-02-28

Hugo で構築されおいたす。 | テヌマ Stack は Jimmy によっお蚭蚈されおいたす。