markdown
SQL の基本md eb2aeb2
lecture/information/database/sql-basics.lecture.n.md
Download PDF

SQL の基本きほん

date2026-07-14document_iddoc_d0ef3cd6db05369d421cd6e8e99cef4fdescriptionSQLの宣言的な問い合わせ、NULLと三値論理、結合、更新、制約、トランザクション、安全なパラメータ処理を説明する。prerequisitesデータベースの基本type講義statusactiverelateddata/lecture/information/database/database-portal.lecture.n.md / data/lecture/information/database/database-basics.lecture.n.md / data/lecture/information/software-engineering/software-engineering-portal.lecture.n.md
informationdatabaseundergraduatelecture
data/lecture/information/database/database-basics.lecture.n.md

1導入どうにゅう

この講義こうぎでは、関係かんけいデータベースにたいするわせと更新こうしん宣言的せんげんてき記述きじゅつする SQLStructured Query Language基本きほん説明せつめいする。前講義ぜんこうぎ導入どうにゅうしたひょうぎょうれつしゅキー、外部がいぶキーを、SQL の構文こうぶん対応たいおうさせる。

SQL は、データへ到達とうたつする手順てじゅんではなく、必要ひつよう結果けっか条件じょうけん記述きじゅつする。索引さくいん利用りよう結合順序けつごうじゅんじょなどの実行計画じっこうけいかくは、通常つうじょう、データベース管理かんりシステムが決定けっていする。この宣言性せんげんせいにより、論理的ろんりてきわせと物理的ぶつりてき実行方法じっこうほうほう分離ぶんりできる。

2SELECT、FROM、WHERE

基本的きほんてきわせは、SELECTFROMWHERE三要素さんようそから構成こうせいされる。

  • FROM は、わせの対象たいしょうとなるひょう指定していする。
  • WHERE は、各行かくぎょう条件式じょうけんしきによって選択せんたくする。この操作そうさ選択せんたくSelectionまたはフィルタリングという。
  • SELECT は、結果けっかふくめるれつまたはしき指定していし、おおむ射影しゃえいProjection対応たいおうする。ただし、SQLは既定きてい重複行ちょうふくぎょう保持ほじし、SELECT DISTINCT指定していした場合ばあい重複ちょうふく除去じょきょする。これは関係代数かんけいだいすう集合しゅうごうとしての射影しゃえいとの相違そういである。

論理的ろんりてきには FROM対象たいしょうさだめ、WHEREぎょう選択せんたくし、SELECTれつ射影しゃえいすると解釈かいしゃくできる。これは概念上がいねんじょう役割やくわりであり、データベース管理かんりシステムがこの順序じゅんじょ物理的ぶつりてき処理しょりするとはかぎらない。

sql
SELECT student_id, name
FROM students
WHERE department = 'Computer Science';

このわせは、students ひょうから所属しょぞくComputer Science であるぎょう選択せんたくし、その student_idname結果列けっかれつとして指定していする。重複行ちょうふくぎょうDISTINCT指定していしないかぎ保持ほじされる。

3結果けっか順序じゅんじょ

SQL のわせ結果けっかには、ORDER BY指定していしないかぎ順序じゅんじょ保証ほしょうがない。同一どういつわせでも、実行計画じっこうけいかくやデータの配置はいちによって表示順ひょうじじゅん変化へんかる。

sql
SELECT student_id, name
FROM students
ORDER BY student_id ASC;

再現可能さいげんかのう順序じゅんじょ必要ひつよう場合ばあいは、同順位どうじゅんい解消かいしょうできるれつまで ORDER BY指定していする。

4NULL と三値論理さんちろんり

NULL は、あたい存在そんざいしない、または不明ふめいであることをあらわ標識ひょうしきであり、空文字列からもじれつ数値すうちの 0 ではない。NULLふく通常つうじょう比較ひかくは、TRUE または FALSE ではなく UNKNOWN となる。SQL の条件式じょうけんしきは、この三値論理さんちろんりThree-valued logicしたがう。

WHERE結果けっかのこすのは、条件式じょうけんしきTRUE となるぎょうだけである。FALSEUNKNOWNぎょう除外じょがいされる。したがって、NULL検査けんさには = NULL ではなく IS NULL または IS NOT NULL使用しようする。

sql
SELECT student_id, name
FROM students
WHERE email IS NULL;

5JOIN とキー

別々べつべつひょう格納かくのうされた関連かんれんデータは、JOIN によって結合けつごうできる。れいとして、students.student_idしゅキー、enrollments.student_id をそれを参照さんしょうする外部がいぶキーとする。

sql
SELECT s.student_id, s.name, e.course_id
FROM students AS s
JOIN enrollments AS e
  ON e.student_id = s.student_id
WHERE e.status = 'enrolled';

ONふたつのひょうぎょう対応たいおうさせる結合条件けつごうじょうけん指定していする。しゅキーの一意性いちいせい外部がいぶキーの参照整合性さんしょうせいごうせいにより、この対応関係たいおうかんけいをデータベースがわ検証けんしょうできる。ただし、JOIN 自体じたい外部がいぶキーが宣言せんげんされていなくても実行可能じっこうかのうである。

6更新こうしん制約せいやく、トランザクション

SQL は、INSERTぎょう追加ついかし、UPDATE既存行きそんぎょう変更へんこうし、DELETEぎょう削除さくじょする。

sql
INSERT INTO enrollments (student_id, course_id, status)
VALUES (1001, 'CS101', 'enrolled');

UPDATE enrollments
SET status = 'completed'
WHERE student_id = 1001 AND course_id = 'CS101';

DELETE FROM enrollments
WHERE student_id = 1001 AND course_id = 'CS101';

PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECK などの制約せいやくConstraintは、許容きょようされるデータの条件じょうけんをスキーマに記録きろくし、不正ふせい更新こうしん拒否きょひする。ただし、制約せいやく具体的ぐたいてき機能きのう構文こうぶんにはデータベース製品せいひんによる差異さいがある。

複数ふくすうぶん一体いったい処理しょりとしてあつか場合ばあいは、トランザクションTransaction使用しようする。COMMIT はトランザクションの変更へんこう確定かくていし、ROLLBACK未確定みかくてい変更へんこう取消とりけす。これにより、処理しょり途中とちゅうだけが反映はんえいされた状態じょうたい回避かいひできる。ただし、トランザクションの分離ぶんりレベルや自動確定じどうかくてい既定値きていち実装じっそうによってことなる。

7パラメータ安全性あんぜんせい

利用者りようしゃ入力にゅうりょくを SQL 文字列もじれつ直接連結ちょくせつれんけつすると、入力にゅうりょくが SQL の構文こうぶんとして解釈かいしゃくされる SQL インジェクションをまねる。あたいは、使用しようするドライバが提供ていきょうするパラメータされたわせへ別途べっとわたす。

sql
SELECT student_id, name
FROM students
WHERE email = ?;

? はパラメータの概念例がいねんれいであり、実際じっさいのプレースホルダ構文こうぶんはドライバやデータベース製品せいひんによってことなる。パラメータあたいと SQL 構文こうぶん分離ぶんりするが、表名ひょうめい列名れつめいなどの識別子しきべつし任意にんい安全化あんぜんかするものではない。識別子しきべつし動的どうてき選択せんたくする場合ばあいは、許可きょかリストによる検証けんしょうなどが必要ひつようである。また、認可にんか最小権限さいしょうけんげん機密情報きみつじょうほう保護ほご別途必要べっとひつようとなる。

8要点ようてん

  • SQL は、必要ひつよう結果けっか宣言せんげんし、その物理的ぶつりてき実行方法じっこうほうほうをデータベース管理かんりシステムへゆだねる。
  • WHEREぎょう選択せんたくし、SELECT結果けっかれつしき指定していする。SQLは既定きてい重複行ちょうふくぎょう保持ほじする。NULLふく条件じょうけんには三値論理さんちろんり適用てきようされる。
  • JOIN複数ふくすうひょう関連付かんれんづけ、キーと制約せいやくはデータの整合性せいごうせいささえる。
  • 更新こうしんはトランザクションによって一体いったいとして管理かんりでき、外部入力がいぶにゅうりょくはパラメータして SQL 構文こうぶんから分離ぶんりする。
  • ORDER BY のない結果けっか順序じゅんじょ保証ほしょうはない。

9つぎすす講義こうぎ

data/lecture/information/software-engineering/software-engineering-portal.lecture.n.md
raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
copy encoded share link
path をコピー
copy share link
copy encoded share link
copy share link
copy encoded share link
タブを全て閉じる