SQL基礎: 構造化クエリ言語入門
構造化クエリ言語(SQL)は、関係データベースを扱うために広く使用されている最も一般的なツールである。1970年代に開発され、現在では、データアナリスト、データベース管理者、および他のデータを扱うプロフェッショナルにとって必須のスキルと見なされています。この記事では、SQL基本事項の簡単な紹介を提供し、この強力なツールを使い始めるための手助けをします。
SQLとは?
上記のように、SQLは構造化クエリ言語(Structured Query Language)の略で、関係データベースからデータを管理・操作・抽出するために用いられる特定のドメイン向けの言語です。関係データベースは、テーブルにデータを格納し、これらのテーブルをキーまたは外部キーを通じて関連付けることができます。SQLは、ユーザーがこれらのテーブルとその関係性と対話することを可能にし、大量のデータを管理するための非常に貴重なツールです。
SQLを必要とする人々
ソフトウェア開発者やアナリスト、データサイエンティスト、データベース管理者など、SQL(構造化クエリ言語)を広く利用しています。金融システム、カスタマーリレーションシップマネジメントツール、在庫管理ソフトウェア、データウェアハウジングソリューションなど、大規模または複雑なデータセットを扱う必要がある場合、効率的にデータを管理し分析するためにSQLを使用することが必要です。現在、多くの企業では、データ分析またはデータベース管理に関わる職種にSQLの専門技術が必要とされています。
SQLの主要なコンセプト
SQLの操作方法について深堀りする前に、以下の重要な概念を理解することが重要です。
- テーブル: テーブルは行や列に整理されたデータの集合です。
- 行: 各行はテーブル内の単一のレコードを表します。
- 列: 各列は、テーブル内のレコードの特定の属性を表します。
- キー: キーは、テーブル内の行をユニークに識別する属性または属性の組み合わせです。
- 外部キー: 外部キーとは、1つのテーブルの属性で、他のテーブルの主キーを参照するものです。
基本的なSQLコマンド
SQLのキーとなる概念に慣れたら、SQLコマンドを書き始める準備ができます。ここでは、始めるためのいくつかの基本的なSQLコマンドを紹介します。
- SELECT:このコマンドはデータベースからデータを抽出するために使用されます。条件に基づいてテーブルから1つまたは複数の列を取得します。
例:SELECT column_name FROM table_name;
- INSERT:このコマンドはデータベースに新しいデータを挿入するために使用されます。指定された値を持つ新しい行がテーブルに追加されます。
例:INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
- UPDATE:このコマンドは、データベース内の既存のデータを更新するために使用されます。選択した行の値が変更されます。
例:UPDATE table_name SET column_name = new_value WHERE some_column = some_value;
- DELETE:このコマンドはデータベースからデータを削除するために使用されます。条件に基づいて1つまたは複数の行がテーブルから削除されます。
例:DELETE FROM table_name WHERE some_column = some_value;
- CREATE:このコマンドはデータベースに新しいテーブルまたはビューを作成するために使用されます。
例:CREATE TABLE table_name (column1 datatype(length), column2 datatype(length), column3 datatype(length));
- DROP:このコマンドは、既存のテーブル、ビュー、データベース、またはインデックスを削除するために使用されます。
例:DROP TABLE table_name;
Mysql 開発環境
MacOS用
macOSでMySQL開発環境を構築するには、次の手順に従ってください。
- Homebrewをインストールします。Homebrewは、システム上にソフトウェアパッケージを簡単にインストールおよび管理できるmacOSのパッケージマネージャーです。 Homebrewをインストールするには、ターミナルを開いて次のコマンドを実行してください。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- MySQLをインストールします。 Homebrewをインストールした後、MySQLをインストールするために使用できます。 ターミナルで次のコマンドを実行してください。
brew install mysql
- MySQLを開始します。 インストールが完了したら、以下のコマンドを実行してMySQLサーバーを開始してください。
mysql.server start
4.インストールをセキュリティ強化する必要があります。 それを行うには、次のコマンドを実行してください。
mysql_secure_installation
インストールのセキュリティに関するいくつかの質問が表示されます。
- MySQLにログインします。 MySQLにログインするには、以下のコマンドを入力してください。
mysql -u root -p
正しいパスワードを入力すると、MySQLにログインでき、データベースやテーブルを操作できます。
Windows
Example
CREATE TABLE
基本レベル
以下は、"users" テーブルを作成する例で、"id"、"name"、"age"、"email" の各列があります。
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100)
);
この例では、4つの列を持つ "users" テーブルを作成しています。 "id" 列はテーブルのプライマリーキーとして機能する整数です。 "name" 列は、最大50文字まで格納できる可変長の文字列です。"age" 列は、ユーザーの年齢を格納する整数です。最後に、 "email" 列は、最大100文字まで格納できる可変長の文字列で、ユーザーに関連する電子メールアドレスを表します。
中級レベル
ブログサービス用に users
と posts
テーブルを作成する SQL コマンドの例:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE posts (
id INT NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
この SQL コードは、2つのテーブル、 users
と posts
を必要な列とともに作成します。 users
テーブルには id
、username
、email
、および password
の列が含まれています。一方、 posts
テーブルには、id
、user_id
、title
、body
、created_at
、および updated_at
の列が含まれています。posts
テーブルの user_id
フィールドは、 users
テーブルの id
フィールドを参照しています。
DROP TABLE
「users」テーブルを使用したSQL DROP TABLE実装の例:
DROP TABLE users;
このステートメントは、データベースから「users」テーブルとその中に含まれるすべてのデータを永久に削除します。テーブルが削除されたら、データを取得する方法はありません。テーブルを削除するなど、潜在的に破壊的な操作を実行する前にデータをバックアップすることが重要です。
SELECT
「users」という名前のテーブルには、「id」、「name」、「age」、「email」という列があります。そして、18歳以上の年齢の列を持つテーブルからレコード全体を選択したい場合、次のSQLクエリを書くことができます。
SELECT * FROM users WHERE age >= 18;
これにより、「age」が18以上のすべてのレコードが返されます。「」シンボルは、テーブルからすべての列を選択することを意味します。特定の列のみを選択したい場合は、「」を選択したい列の名前に置き換えることができます(たとえば、「SELECT name、email FROM users WHERE age> = 18」とすることができます)。
SELECT INNER JOIN
SQLのSELECT INNER JOINコマンドを実装する例です。usersとpostsのテーブルがある場合、同時にユーザーとポストの情報を取得します。
SELECT
users.name,
posts.title,
posts.content
FROM
users
INNER JOIN
posts
ON
users.id = posts.user_id;
このクエリは、1つ以上の投稿をしたすべてのユーザーと、それらの投稿のタイトルと内容を返します。ユーザーが投稿を書いていない場合、結果に含まれません。
LEFT JOIN
SQLのSELECT LEFT JOINコマンドを実装する例です。usersとpostsのテーブルがある場合、左側がusersで右側がpostsであるような全レコードを取得します。
"users"と "posts"という2つのテーブルがあります。 "user_id"が一致する"posts"テーブルからのレコードと共に "users"テーブルのすべてのレコードを取得したい場合。また、ユーザーに記事がない場合でも、その情報を返すことを望みます。
SELECT
users.id,
users.name,
posts.title,
posts.body
FROM
users
LEFT JOIN
posts
ON users.id = posts.user_id;
このクエリでは、LEFT JOIN
は共通の列user_id
に基づいて、users
テーブルからすべてのレコードと posts
テーブルから対応するレコードを返します。もし投稿をしていないユーザーがいた場合は、投稿に関連する列の値にNULL値が含まれることになります。
注意:LEFT JOIN
では、左側のテーブル(users
)が選択され、右側のテーブル(posts
)から関連する行が選択されます。右側に一致しないレコードがある場合、NULL値が右側の列の値の代わりにそこにあります。
RIGHT JOIN
SQLのSELECT RIGHT JOINコマンドを実装する例です。usersとpostsのテーブルがある場合、右側がusersで左側がpostsであるような全レコードを取得します。
前提として、users
テーブルにはid
、username
、email
、joined_at
の列があり、posts
テーブルにはid
、title
、content
、そしてuser_id
の列があります。
users
テーブルからすべての行を取得し、user_id
列で一致する場合に対応するposts
テーブルの行を含める場合は、次のSQLクエリを使用できます。
SELECT *
FROM users
RIGHT JOIN posts
ON users.id = posts.user_id;
これにより、 users
テーブルからすべての行、posts
テーブルからuser_id
列でusers
テーブルのid
列と一致する行が含まれるすべての行が返されます。posts
の特定の行に対応するusers
の行が見つからない場合は、users
の列にはNULL
値が含まれます。
INSERT INFO
"users"テーブルに新しい行を追加するためのSQL INSERT INTO文の例:
1つのレコードを挿入する場合:
INSERT INTO users (id, name, age, email)
VALUES (1, 'John Smith', 25, 'john@example.com');
注:id列を指定しない場合、データベースの構成に応じて、プライマリキー列の値が自動的に生成される場合があります。
一度に複数のレコードを挿入する場合:
INSERT INTO users (name, age, email) VALUES
('Sarah Johnson', 29, 'sarah@example.com'),
('Michael Brown', 32, 'michael@example.com'),
('Lisa Davis', 24, 'lisa@example.com');
これにより、指定された値を持つ3つの新しい行がusersテーブルに挿入されます。
UPDATE
SQL UPDATEの実装の例:
id 1のユーザーの名前を更新したいとします。 次のSQLステートメントを使用してそれを達成できます。
UPDATE users
SET name = 'John'
WHERE id = 1;
これにより、idが1に等しい場所でユーザーの名前が「John」に更新されます。
同様に、複数の列を更新する必要がある場合は、次の構文を使用できます。
UPDATE users
SET name = 'John', age = 30, email = 'john@example.com'
WHERE id = 1;
このステートメントのSET句で指定されたものと同じく、idが1のuserの"name"、"age"、"email"カラムが更新されます。
DELETE
"users" テーブルのSQL DELETE実装の例:
DELETE FROM users WHERE id = 1;
このクエリは、“id”列が1の行を“users”テーブルから削除します。 "users"テーブルからすべての行を削除する場合は、WHERE句を単純に省略できます:
DELETE FROM users;
DELETEコマンドを使用する際には慎重に行う必要があります。データは永久にテーブルから削除されるため、削除ステートメントを実行する前にデータをバックアップし、条件を二重に確認することが重要です。
まとめ
SQLは、関係データベースからデータを管理し、操作し、取得するための非常に強力なツールです。 この記事ではSQLの基礎について触れただけですが、堅固な基盤を築くことができます。 初心者でも経験豊富なプロフェッショナルでも、SQLを学習することでデータと分析の作業効率が上がります。 SQLコマンドを試行錯誤し、練習し続けて、この有用なツールのマスターになってください。