SQL ( 構造 化 クエリ 言語 ) は、削除、作成、更新、読み取りなどのリレーショナル データベース操作を管理するためのコマンドのセットです。
SQL は、1987 年以来リレーショナル データベースで使用されている国際標準です。SQL コマンドには次の 4 種類があります。
- データ定義言語 (DDL) – これらのコマンドはデータベースの構造 を定義します 。たとえば、ドロップ、名前変更、変更、作成などです。これらはデータベース構造に影響を与えます。たとえば、データベースを作成したり、テーブルの名前を変更したりします。
- データ操作言語 (DML) – これらのコマンドは、データを操作するために使用されます。たとえば、挿入、選択、更新、削除などです。これらはテーブルやデータベース構造には影響しませんが、テーブルに存在するデータには影響します。たとえば、新しい行を挿入したり、行内の値を更新したりします。
- トランザクション制御言語 (TCL) – これらのコマンドは、データベース内のトランザクション処理を制御します。たとえば、ロールバック、保存、コミットなどです。これらのコマンドはデータベースに永続的な影響を与えます。たとえば、1 つのプロセスが失敗した場合でも、トランザクション全体を前の状態にロールバックします。
- データ制御言語 (DCL) – データ制御コマンドは、ユーザーを承認し、必要な権限のみをユーザーまたはグループに付与するために使用されます。たとえば、あるユーザーは読み取り専用権限を持つことができ、別のユーザーは読み取りと書き込み権限を持つことができます。アクセス制御は、grant、deny、および revoke コマンドを使用して行われます。
以下は、最も便利なコマンドを含む SQL チートシートです。チートシートは、正しい構文と予想されるクエリ結果を含む必要なコマンドをすばやく参照するのに役立ちます。他の 2 つのタイプは非常に簡単に使用できるため、このチートシートでは DDL および DML コマンドに焦点を当てます。
データ定義と操作のクエリ
| 指示 | 説明 | 例 |
| 追加 | 列または制約 (指定に従って) を既存のテーブルに追加します。 |
ALTER TABLE employee ADD last_name varchar2(255); ALTER TABLE employee ADD CONSTRAINT emp_det PRIMARY KEY (id, last_name);
ALTER TABLE employee ADD last_name varchar2(255); ALTER TABLE employee ADD CONSTRAINT emp_det PRIMARY KEY (id, last_name);
|
| 他の机 | 指定されたテーブルを変更して、テーブルの列を追加、更新、または削除します。 |
ALTER TABLE employee ADD last_name varchar2(255);
ALTER TABLE employee DROP COLUMN last_name;
|
| 列の変更 | 列のデータ型を変更します。たとえば、employee テーブルの join_date 列の型を varchar2 から datetime に変更します。 |
ALTER TABLE employee ALTER COLUMN joining_date datetime;
|
| 全て | SELECT、WHERE、HAVING で使用される論理演算子。すべての値がサブクエリ条件を満たす場合に true を返します。 |
SELECT employee_name, joining_date from employee WHERE employee_id = ALL (select employee_id from department_details WHERE department = 'R&D');
|
| そして | WHERE 句のすべての条件が満たされた場合にのみ true を返す論理演算子。 |
SELECT employee_name, salary from employee WHERE city = 'California' AND salary > 2000;
|
| どれでも | 論理演算子。サブクエリ値の 1 つでも where 句の条件を満たす場合に true を返します。 |
SELECT employee_id, employee_name from employee WHERE employee_id = ANY (select employee_id from department_details WHERE department = 'HR' OR department = 'R&D');
|
| として | クエリの実行時までテーブルまたは列の別名を作成します。これは、名前が複数回使用される場合、特にテーブルの結合中に便利です。 |
SELECT count(employee_id) AS employees_from_houston from employee WHERE city = 'Houston';
|
| ASC | ORDER BY 句で使用され、データを asc 終了順序で返します。 ORDER BY 自体は、デフォルトで結果を昇順に並べ替えます。 |
SELECT employee_name, joining_date, salary from employee ORDER BY employee_name ASC;
|
| 間 | 範囲内の値を選択するには |
SELECT employee_name, joining_date, department_id from employee WHERE salary BETWEEN 40000 AND 100000;
|
| 場合 | 一連のステートメントで構成されます。 true であるステートメントの値を返します。どの条件も満たされない場合は、ELSE 部分の条件が実行されます。他にない場合は、NULL を返します。 |
SELECT order_amount, customer_id, contact_email CASE WHEN order_amount > 3000 THEN "Eligible for 40% discount" WHEN order_amount between 2000 and 3000 THEN "Eligible for 25% discount" ELSE "Eligible for 5% discount" END FROM order_details;
|
| データベースの作成 | 指定された名前で新しいデータベースを作成します |
CREATE DATABASE movies_development;
|
| テーブルの作成 | 指定されたテーブル名、列名、型を使用して新しいテーブルを作成します。 |
CREATE TABLE movie_info (movie_name varchar2(255), release_date datetime, lead_actor varchar2(255), music_director varchar2(255));
|
| デフォルト | CREATE または ALTER TABLE コマンドで使用される、指定された列のデフォルト値を設定します。 |
CREATE TABLE employee (joining_date SET DEFAULT CURRENT_DATE);
ALTER TABLE product ALTER is_available SET DEFAULT true;
|
| 消去 | 指定されたテーブルからデータを削除します |
DELETE from employee where employee_id = 345;
|
| 説明 | ORDER BY 句で使用され、de sc 終了順序でデータを返します。 |
SELECT employee_name, joining_date, salary from employee ORDER BY employee_name DESC;
|
| ドロップカラム | 指定されたテーブルから指定された列を削除します。 |
ALTER TABLE employee DROP COLUMN employee_name;
|
| データベースを削除 | データベース全体を削除します |
DROP DATABASE movies_development;
|
| デフォルトを削除 | 指定された列のデフォルト値を削除します |
ALTER TABLE employee ALTER COLUMN is_available DROP DEFAULT;
|
| ドロップテーブル | 指定されたテーブルを削除します |
DROP TABLE employee;
|
| 存在します | サブクエリにレコードが存在するかどうかを確認し、1 つ以上の結果が見つかった場合は true を返します。 |
SELECT employee_id, contact_number FROM employee WHERE EXISTS (SELECT employee_id, department FROM department WHERE employee_id = 345 AND department = 'HR');
|
| から | データを選択または削除するテーブルを指定します |
SELECT * FROM employee; DELETE FROM employee where employee_id = 345;
|
| グループ化 | 指定された列ごとにデータをグループ化し、集計関数に使用します。 |
各国の従業員数を表示します
SELECT COUNT(employee_id), country from employee GROUP BY country;
各部門の従業員の平均評価を表示します
SELECT AVG(rating), department from employee GROUP BY department;
|
| で | 複数の OR 条件を使用する代わりに、WHERE 句で複数の値を一度に選択するために使用されます。 |
SELECT employee_name FROM employee WHERE country IN ('India', 'United Kingdom', 'Singapore', 'Australia');
|
| 索引 | インデックスを使用すると、データのクエリがより効率的かつ高速になります。通常、インデックスは最も検索される列に作成されます。 |
インデックスを作成します。
CREATE INDEX idx_employee ON employee (first_name, last_name);
値が重複できない一意のインデックスを作成します。
CREATE UNIQUE INDEX idx_employee ON employee (first_name, last_name);
インデックスを削除します。
ALTER TABLE employee DROP INDEX idx_employee;
|
| に挿入 | テーブルに新しい行を追加する |
INSERT INTO employee (employee_id, employee_name, salary, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java');
|
| 無効である | Null値をチェックします |
SELECT employee_id from employee where employee_name IS NULL;
|
| NULL ではありません | null ではない値をチェックします |
SELECT employee_id, core_skill from employee where core_skill IS NOT NULL;
|
| のように | 指定されたパターンに一致するすべての値を返します |
SELECT employee_id, first_name, last_name where first_name LIKE '%tony';
|
| みたいではなく | 指定されたパターンに一致しないすべての値を返します |
SELECT employee_id, first_name, last_name where first_name NOT LIKE '%tony';
|
| または | where 句の条件の 1 つが満たされる場合に true を返します。 |
SELECT * from employee where country = 'India' OR country = 'Australia';
|
| 注文方法 | 結果を昇順 (デフォルト) またはクエリで指定された順序 ( 昇順 または 降順 ) で並べ替えます。 |
SELECT employee_name, salary from employee ORDER BY salary DESC;
|
| ロウナム | クエリの WHERE 句で指定された行数を返します。 |
SELECT * from employee where ROWNUM <= 5; This will return the first five rows in the resultset.
|
| 選択する | 指定された条件に基づいて、テーブルの指定された列を選択します。 * を指定すると、すべての列の値が返されます。 |
SELECT employee_id from employee; SELECT * from employee;
|
| 選択してください | ソーステーブルから別のコピー先テーブルにデータをコピーします。すべての列 (*) または特定の列を選択できます。 |
SELECT * INTO new_employee_info FROM employee; SELECT employee_name, joining_date, core_skill INTO new_employee_info FROM employee;
|
| トップを選択 | テーブルから指定された数のレコードを選択します |
SELECT TOP 5 employee_id from employee where employee_rating = 5;
|
| セット | UPDATE 操作中に、列の値を新しい指定値に設定します。 |
UPDATE employee SET first_name = 'Tony' WHERE employee_id = 345;
|
| いくつかの | サブクエリ内の条件の 1 つが満たされる場合、true を返します。 SOME は ANY コマンドに似ています。 |
SELECT employee_id, employee_name from employee WHERE salary > SOME (select salary from employee WHERE department = 'HR');
|
| テーブルの切り捨て | テーブルからデータを削除します。テーブルは削除されないことに注意してください。 |
TRUNCATE TABLE log_info;
|
| 連合 | 結合された 2 つ以上のテーブルから個別の値を返します。重複した値も取得するには、UNION ALL を使用します。 |
SELECT city from employee UNION SELECT city from office_locations;
|
| 個性的 | 指定された列に一意制約を追加します。これは、列に重複した値を含めることができないことを意味します。テーブルの作成または変更コマンド中に使用できます。 |
CREATE TABLE employee (employee_id int NOT NULL, UNIQUE(employee_id));
ALTER TABLE employee ADD UNIQUE(employee_id);
|
| アップデート | 指定された列の値を新しい値で更新します |
UPDATE employee SET first_name = 'Tony' WHERE employee_id = 345;
|
| 価値観 | INSERT コマンドとともに使用して、テーブルに値の新しい行を追加します。 |
INSERT INTO employee (employee_id, employee_name, salary, core_skill) VALUES (451, 'Lee Cooper', 40000, 'Java');
|
| どこ | select ステートメントの結果セットをフィルターするための条件を追加します。 |
SELECT * from employee WHERE salary > 20000;
|
集計関数
集計関数は、int や float などの数値列を操作するデータ操作コマンドです。これらは、データベース レベル自体でデータをフィルタリングおよび並べ替えるのに役立ちます。よく使用される集計関数には次のようなものがあります。
| 関数 | 説明 | 例 |
| 平均 | 指定された列の平均値を返します。 |
SELECT AVG(marks) from students where subject = 'English';
|
| 最小 | 指定された列の最小値を返します |
SELECT MIN(price) from product WHERE product_category = 'shoes';
|
| マックス | 指定された列の最大値を返します |
SELECT MAX(quantity), product_name from inventory;
|
| カウント | クエリを満たす行数を返します。 |
従業員テーブル内のレコードの総数を表示します。
SELECT COUNT(*) from employee;
給与が 20000 を超える従業員の数を表示します
SELECT COUNT(*) from employee where salary > 20000;
|
| 和 | 指定された数値列の値の合計を返します。 |
SELECT SUM(marks) from students where subject = 'English';
|
SQL結合
SQL 結合は、複数のテーブルのデータを接続してフィルタリングするため、非常に重要です。結合は少し注意が必要で、適切に実行しないと予期しない結果が生じる可能性があります。以下の表は、4 種類の SQL 結合を簡単に参照するのに役立ちます。
| 結合タイプ | 説明 | 構文 | 例 |
| 内部結合 | 結合されたテーブル内で一致するレコードを返します。交差点に似ています。 | SELECT 列 1、列 2…テーブル 1 から INNER JOIN テーブル 2 をテーブル 1.列 N = テーブル 2.列 N; |
select c.customer_id, o.order_id, c.customer_phone from customer c INNER JOIN order o on c.customer_id = o.customer_id;
|
| 完全 (外部) 結合 | 左または右のいずれかの側に一致するすべてのレコードを返します。それは労働組合に似ています。 | SELECT 列 1、列 2…テーブル 1 から FULL OUTER JOIN テーブル 2 をテーブル 1.列N = テーブル 2.列N; |
select c.customer_id, o.order_id, c.customer_phone from customer c FULL OUTER JOIN order o on c.customer_id = o.customer_id;
|
| 左結合 | 左側のテーブルのすべてのレコードと、右側のテーブルの条件に一致するレコードを返します。 | SELECT 列 1、列 2… テーブル 1 から LEFT JOIN テーブル 2 をテーブル 1.列 N = テーブル 2.列 N; |
select c.country_id, c.country_name, l.location_name from country c LEFT JOIN locations l on c.country_id = l.country_id;
|
| 右結合 | 右側のテーブルのすべてのレコードと、左側のテーブルの条件に一致するレコードを返します。 | SELECT 列 1、列 2… テーブル 1 から RIGHT JOIN テーブル 2 をテーブル 1.列 N = テーブル 2.列 N; |
select c.country_id, c.country_name, l.location_name from country c RIGHT JOIN locations l on c.country_id = l.country_id;
|
追加のリソース
SQL は、ソフトウェア開発者、データ サイエンティスト、アナリストにとって同様に重要なツールです。チートシート形式の SQL コマンドの便利なリファレンスは、時間を大幅に節約し、各キーワードの予想される出力を理解するのに役立ちます。
追加情報については、次のリソースを参照してください。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





