デジタル化、ビッグデータ、クラウドコンピューティングが増加している今日の世界では、データ管理はソフトウェアエンジニアが持つことができる最も重要なスキルの1つです。この目的のために、最も強力なデータベースツールの1つはSQLです。
SQL(Structured Query Language)は、データ構造オブジェクトを操作するために使用される標準のプログラミング言語です。これらは、リレーショナルデータベース管理システム(RDBMS)に含まれているデータを操作します。よく知られているRDBMSには、MySQLとPostgreSQLがあります。
このガイドでは、SQL言語のサブセットと、SELECT
などの基本的なSQLコマンドの使用方法について学習します。 、INSERT
、UPDATE
、およびDELETE
。
SQLのサブセット
以下のリストには、さまざまなSQLコマンドのさまざまな言語サブセットが含まれています。各サブセットには独自の機能と目的があります。
- データ定義言語 (DDL):これにより、データベーステーブル内のデータを実際に操作することなく、データベーススキーマ定義(つまり、テーブルとインデックス)を作成、削除、および更新できます。
- データクエリ言語 (DQL):DQLは、
SELECT
を使用してデータベースからデータを取得するために使用されます ステートメント。 - データ操作言語 (DML):このサブ言語では、
INSERT
を使用してデータベースでデータを操作できます。 、UPDATE
、およびDELETE
ステートメント。
このガイドでは、学校のサンプルデータベースを使用して、上記の各サブセットのSQLコマンドをさらに示します。学校のデータベースには、学生、コース、成績などのテーブルがいくつかあります。 Student
の定義 テーブルには、学生のSSNumber
の列が含まれています 、Firstname
、およびLastname
、およびCourseTaken
の定義 テーブルには、SSNumber
の列が含まれています 、CourseId
、NumericGrade
、およびYearTaken
。
この例では、学校に3人の生徒がいて、それぞれが2つのコースを完了していると想定しています。サンプルデータを次の表に示します。
SSNumber | LastName | FirstName | CourseId | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Smith | John | CSC101 | 98 | 2021 |
111111111 | Smith | John | ENG101 | 95 | 2022 |
222222222 | ジョーンズ | メアリー | CSC101 | 100 | 2022 |
222222222 | ジョーンズ | メアリー | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
SQLコマンドを使用したテーブルの作成、変更、および削除
コマンドラインから、CREATE TABLE
を使用します コマンドの後にテーブルの名前とテーブルデータが続きます。以下のコマンドは、Student
を作成します テーブル。
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
括弧は、各行のデータにラベルを付ける列から始めて、テーブルデータを囲みます。次の列は、この行が保持するデータ型を示しています。 CHAR
固定長の文字列データ型とVARCHAR
を示します 可変長文字列データ型を示します。最後の列のNOT NULL
属性は、NOT NULL
のいずれかが発生した場合に、レコードをテーブルに追加できないようにします。 列にはデータが関連付けられていません。
注 CREATE TABLE
ステートメントは末尾のセミコロン(;)で区切られますが、一部の商用リレーショナルデータベースシステムではその区切り文字が必要ない場合があります。
注 特に明記されていない限り、このガイドで示されているすべてのデータベースコマンドは、両方の MySQLで適切に機能します。 およびPostgreSQL 。
CourseTaken
を作成するには テーブルで、次のコマンドを実行します:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
YearTaken
列は意図的にCourseTaken
に含まれていません ALTER TABLE
の使用法を示す表 指図。 YearTaken
を追加するには CourseTaken
の列 テーブルの場合、CourseTaken
を削除する必要はありません 完全にテーブル。代わりに、DDL ALTER TABLE
を使用できます 指図。次のコマンドは、CourseTaken
を変更します 不足している列をテーブルに追加してテーブルを作成します。
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
上記のコマンドは、以前と同様の構文に従います。テーブル名と、行名、行データ型、NOT NULL
の3つの引数が必要です。 属性。 CourseTaken
を削除する場合 テーブル全体で、DDL DROP TABLE
を発行します コマンドの後にテーブル名が続きます。
DROP TABLE CourseTaken;
注意 テーブルを削除すると、テーブル内のすべてのデータが削除されます。
SQLのテーブルにデータを挿入する方法
データをテーブルに挿入するには、SQL INSERT INTO
を使用します 声明。このコマンドを呼び出すには、データを挿入するテーブル名と行名のリスト(括弧内)を指定します。この後にVALUES
が続きます キーワードと挿入したい実際の値(括弧内)。値は、呼び出された順序で行に挿入されます。
注
- SQLコマンドは複数行に分割できます。 SQLコマンドの終わりは、セミコロン(
;
)で区切られます。 。- 文字データは、開始アポストロフィと終了アポストロフィ(
‘
)で区切られます。 )、数値データはそうではありません。
次のINSERT
コマンドは、Student
に3行を挿入します テーブル。これらのコマンドは複数のINSERT
を使用します ステートメント。
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('111111111', 'Smith', 'John');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('222222222', 'Jones', 'Mary');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('333333333', 'Hansen', 'Robert');
同様に、以下に示すように、単一のSQLクエリでテーブルに複数の行を挿入することもできます。
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
注
INSERT INTO
を使用できます PostgreSQLでも同様のコマンド テーブルに行を追加します。値がテーブル定義の列の順序と一致していることを確認してください。INSERT INTO student VALUES ('111111111', 'Smith', 'John');
テーブルからデータを削除
テーブルからデータを削除するには、SQL DELETE FROM
を使用します 声明。 WHERE
を使用する 条件を指定する句。複数の条件がある場合は、AND
を使用します。 WHERE
とともに句 。
たとえば、次のコマンドはCourseTaken
からレコードを削除します SSNumberのテーブル 333333333
およびCourseId POL101
。
注意 WHERE
を省略した場合 句を指定すると、テーブル内のすべてのレコードが削除されます。
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
テーブル内のデータを更新するSQLコマンド
テーブル内の既存のレコードを更新するには、SQL UPDATE
を使用します 指図。 SET
句は、特定の列とWHERE
に新しい値を設定(更新)するために使用されます 句は、選択した行を更新するために使用されます。
たとえば、次のコマンドはNumericGrade
を更新します CourseTaken
の列 SSNumberのレコードのテーブル 222222222
およびCourseId EEE101
。
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
テーブルからデータを取得するSQLコマンド
リレーショナルデータベースシステムの真の力は、SQL SELECT
を介してマルチテーブルスキーマの情報を取得できることです。 コマンド、および共通キーを介してテーブルを結合する機能。この入門ガイドでは、キーとそれらのキーを使用したインデックスの作成については説明していませんが、SSNumber
を使用しています。 情報を生成するためにテーブルを関連付ける(または結合する)ための手段(キー)としての各テーブルの列。次の例は、SQL SELECT
を使用するさまざまなユースケースを示しています。 コマンドラインからのコマンド。
例1: 学校のすべての生徒のリストを取得します。
SELECT * from Student;
出力:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
例2: 受講したすべての学生とコースのリストを取得します。
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
出力:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
注 上記のコマンドでは、2つのテーブル Student
およびCourseTaken
必要な情報を取得するために結合されます。SELECT
の列名 およびWHERE
わかりやすくするために、句の前にはテーブル名が付いています。ただし、SSNumber
の場合 列の場合、両方のテーブルが同じ列名を共有するため、適切なテーブル名のプレフィックスを指定する必要があります。FROM
句は、このクエリで使用されているテーブルを示します。
例3: CourseIdを使用して学生のリストを取得します CSC101
そして彼らがこのコースを受講した年。
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
出力:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
例4: 90
を超えるコースの成績を持っている学生の名前、受講したコース、および受け取った成績のリストを取得します 。
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
出力:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
注 AND
上記のコマンドの句を使用すると、条件付きの成績スコアテストで結果をフィルタリングできます。
結論
SQLコマンドに関するこのガイドは、データベーススキーマを作成し、それらのデータベース内のデータを操作する方法についての入門的な入門書です。ここで紹介する概念は、リレーショナルデータベースシステムの使用法に関しては表面的なものにすぎませんが、基本的かつ重要なコマンドと概念の出発点として適しています。