SQLチートシート
前書き
SQLデータベースには、データの追加、変更、削除、クエリに必要なすべてのコマンドがインストールされています。 この虎の巻スタイルのガイドは、最も一般的に使用されるいくつかのSQLコマンドのクイックリファレンスです。
このガイドの使用方法:
-
このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。
-
完了しようとしているタスクに関連するセクションにジャンプします
-
このガイドのコマンドに
highlighted text
が表示されている場合、このテキストはyour ownデータベースの列、テーブル、およびデータを参照している必要があることに注意してください。 -
このガイド全体を通して、示されているデータ値の例はすべてアポストロフィ(
'
)で囲まれています。 SQLでは、ストリングをアポストロフィで構成したデータ値をラップする必要があります。 これは数値データには必要ありませんが、アポストロフィを含めても問題は発生しません。
SQLは標準として認識されていますが、ほとんどのSQLデータベースプログラムには独自の拡張機能があります。 このガイドでは、MySQLをリレーショナルデータベース管理システム(RDBMS)の例として使用していますが、指定されたコマンドは、PostgreSQL、MariaDB、SQLiteなどの他のリレーショナルデータベースプログラムで動作します。 RDBMS間に大きな違いがある場合は、代替コマンドを含めました。
データベースプロンプトを開く(ソケット/信頼認証を使用)
Ubuntu 18.04のデフォルトでは、root MySQLユーザーは、次のコマンドを使用してパスワードなしで認証できます。
sudo mysql
PostgreSQLプロンプトを開くには、次のコマンドを使用します。 この例では、含まれているスーパーユーザーロールであるpostgresユーザーとしてログインしますが、これを作成済みのロールに置き換えることができます。
sudo -u postgres psql
データベースプロンプトを開く(パスワード認証を使用)
root MySQLユーザーがパスワードで認証するように設定されている場合は、次のコマンドを使用して認証できます。
mysql -u root -p
データベースに非ルートユーザーアカウントを既に設定している場合は、このメソッドを使用してそのユーザーとしてログインすることもできます。
mysql -u user -p
上記のコマンドを実行すると、パスワードの入力を求められます。 コマンドの一部としてパスワードを指定する場合は、-p
オプションの直後にパスワードを入力し、間にスペースを入れないでください。
mysql -u root -ppassword
データベースを作成する
次のコマンドは、デフォルト設定でデータベースを作成します。
CREATE DATABASE database_name;
データベースでデフォルトとは異なる文字セットと照合を使用する場合は、次の構文を使用して指定できます。
CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
データベースのリスト
MySQLまたはMariaDBインストールに存在するデータベースを確認するには、次のコマンドを実行します。
SHOW DATABASES;
PostgreSQLでは、次のコマンドを使用して、作成されたデータベースを確認できます。
\list
データベースの削除
データベース(データベース内に保持されているテーブルとデータを含む)を削除するには、次の構造に従うコマンドを実行します。
DROP DATABASE IF EXISTS database;
ユーザーを作成する
データベースの特権を指定せずにデータベースのユーザープロファイルを作成するには、次のコマンドを実行します。
CREATE USER username IDENTIFIED BY 'password';
PostgreSQLは、同様の構文を使用しますが、わずかに異なります:
CREATE USER user WITH PASSWORD 'password';
新しいユーザーを作成し、1つのコマンドでそれらのユーザーに特権を付与する場合は、GRANT
ステートメントを発行することで実行できます。 次のコマンドは、新しいユーザーを作成し、RDBMS内のすべてのデータベースとテーブルに完全な権限を付与します。
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
この前のGRANT
ステートメントのPRIVILEGES
キーワードに注意してください。 ほとんどのRDBMSでは、このキーワードはオプションであり、このステートメントは次のように書くことができます。
GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
ただし、Strict SQL modeがオンになっている場合、このような特権を付与するには、PRIVILEGES
キーワードが必要であることに注意してください。
ユーザーを削除する
次の構文を使用して、データベースユーザープロファイルを削除します。
DROP USER IF EXISTS username;
このコマンドは、デフォルトでは、削除されたユーザーが作成したテーブルを削除せず、そのようなテーブルにアクセスしようとするとエラーが発生する可能性があることに注意してください。
データベースの選択
テーブルを作成する前に、最初にRDBMSにテーブルを作成するデータベースを伝える必要があります。 MySQLおよびMariaDBでは、次の構文を使用します。
USE database;
PostgreSQLでは、次のコマンドを使用して目的のデータベースを選択する必要があります。
\connect database
テーブルを作成する
次のコマンド構造は、table
という名前の新しいテーブルを作成し、それぞれが固有のデータ型を持つ2つの列を含みます。
CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );
テーブルを削除する
すべてのデータを含むテーブルを完全に削除するには、次を実行します。
DROP TABLE IF EXISTS table
テーブルへのデータの挿入
次の構文を使用して、テーブルに1行のデータを入力します。
INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );
次のように、単一のコマンドを使用して、テーブルに複数のデータ行を追加することもできます。
INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ), ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' );
テーブルからデータを削除する
テーブルからデータの行を削除するには、次のコマンド構造を使用します。 value
は、削除する行の指定されたcolumn
に保持されている値である必要があることに注意してください。
DELETE FROM table WHERE column='value';
[。注意]##
Note:次の例のように、DELETE
ステートメントにWHERE
句を含めないと、テーブルに保持されているすべてのデータが削除されますが、列やテーブルは削除されません。自体:
DELETE FROM table;
テーブル内のデータの変更
次の構文を使用して、特定の行に保持されているデータを更新します。 コマンドの最後にあるWHERE
句は、更新する行をSQLに指示することに注意してください。 value
は、変更する行に合わせてcolumn_A
に保持される値です。
[.note]#Note:UPDATE
ステートメントにWHERE
句を含めなかった場合、コマンドはテーブルのすべての行に保持されているデータを置き換えます。
#
UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
列の挿入
次のコマンド構文は、新しい列をテーブルに追加します。
ALTER TABLE table ADD COLUMN column data_type;
列を削除する
この構造に従うコマンドは、テーブルから列を削除します。
ALTER TABLE table DROP COLUMN column;
基本的なクエリの実行
テーブル内の単一の列からすべてのデータを表示するには、次の構文を使用します。
SELECT column FROM table;
同じテーブルから複数の列をクエリするには、列名をカンマで区切ります。
SELECT column_1, column_2 FROM table;
列の名前をアスタリスク(*
)に置き換えることにより、テーブル内のすべての列を照会することもできます。 SQLでは、アスタリスクは「すべて」を表すプレースホルダーとして機能します。
SELECT * FROM table;
WHERE句の使用
次のように、SELECT
ステートメントにWHERE
句を追加することで、クエリの結果を絞り込むことができます。
SELECT column FROM table WHERE conditions_that_apply;
たとえば、次のような構文を使用して、単一の行からすべてのデータをクエリできます。 value
は、指定されたcolumn
とクエリする行の両方に保持されている値である必要があることに注意してください。
SELECT * FROM table WHERE column = value;
比較演算子の使用
WHERE
句の比較演算子は、指定された列を値と比較する方法を定義します。 一般的なSQL比較演算子を次に示します。
オペレーター | それは何ですか |
---|---|
|
同等性のテスト |
|
不平等のテスト |
|
未満のテスト |
|
大なり記号のテスト |
|
以下のテスト |
|
大なり記号以上のテスト |
|
値が指定された範囲内にあるかどうかをテストします |
|
行の値が指定された値のセットに含まれているかどうかをテストします |
|
指定された条件で行が存在するかどうかをテストします |
|
値が指定された文字列と一致するかどうかをテストします |
|
|
|
|
ワイルドカードの使用
SQLでは、ワイルドカード文字を使用できます。 これらは、テーブル内の特定のエントリを見つけようとしているが、そのエントリが正確に何であるかわからない場合に役立ちます。
アスタリスク(*
)は、「すべて」を表すプレースホルダーです。これにより、テーブル内のすべての列がクエリされます。
SELECT * FROM table;
パーセント記号(%
)は、0個以上の不明な文字を表します。
SELECT * FROM table WHERE column LIKE val%;
アンダースコア(_
)は、単一の不明な文字を表すために使用されます。
SELECT * FROM table WHERE column LIKE v_lue;
列のエントリをカウントする
COUNT
関数は、特定の列のエントリ数を見つけるために使用されます。 次の構文は、column
に保持されている値の総数を返します。
SELECT COUNT(column) FROM table;
次のようにWHERE
句を追加することで、COUNT
関数の結果を絞り込むことができます。
SELECT COUNT(column) FROM table WHERE column=value;
列の平均値を見つける
AVG
関数は、特定の列に保持されている値の平均(この場合は平均)を見つけるために使用されます。 AVG
関数は、数値を保持する列でのみ機能することに注意してください。文字列値を保持する列で使用すると、エラーまたは0
が返される場合があります。
SELECT AVG(column) FROM table;
列の値の合計を見つける
SUM
関数は、列に保持されているすべての数値の合計を見つけるために使用されます。
SELECT SUM(column) FROM table;
AVG
関数と同様に、文字列値を保持する列でSUM
関数を実行すると、RDBMSに応じて、エラーまたは0
のみが返される場合があります。
列の最大値を見つける
列内の最大の数値またはアルファベット順の最後の値を見つけるには、MAX
関数を使用します。
SELECT MAX(column) FROM table;
列内の最小値を見つける
列内の最小の数値またはアルファベット順の最初の値を見つけるには、MIN
関数を使用します。
SELECT MIN(column) FROM table;
ORDER BY句を使用した結果の並べ替え
ORDER BY
句は、クエリ結果を並べ替えるために使用されます。 次のクエリ構文は、column_1
とcolumn_2
から値を返し、column_1
に保持されている値で昇順、または文字列値の場合はアルファベット順に結果を並べ替えます。
SELECT column_1, column_2 FROM table ORDER BY column_1;
同じアクションを実行しますが、結果をアルファベットの降順または逆の順序で並べるには、クエリにDESC
を追加します。
SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
GROUP BY句を使用した結果の並べ替え
GROUP BY
句はORDER BY
句に似ていますが、COUNT
、MAX
、%()などの集計関数を含むクエリの結果を並べ替えるために使用されます。 t4)s、またはSUM
。 前のセクションで説明した集計関数は、それ自体で単一の値のみを返します。 ただし、GROUP BY
句を含めることで、列内の一致するすべての値に対して実行された集計関数の結果を表示できます。
次の構文は、一致する値の数をcolumn_2
でカウントし、それらを昇順またはアルファベット順にグループ化します。
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
同じアクションを実行しますが、結果をアルファベットの降順または逆の順序でグループ化するには、クエリにDESC
を追加します。
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
JOIN句を使用した複数のテーブルのクエリ
JOIN
句は、2つ以上のテーブルの行を結合する結果セットを作成するために使用されます。
SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;
これはINNER JOIN
句の例です。 INNER JOIN
は、両方のテーブルで値が一致するすべてのレコードを返しますが、値が一致しないレコードは表示されません。
outerJOIN
句を使用すると、他のテーブルに対応する一致がない値を含め、2つのテーブルのいずれかからすべてのレコードを返すことができます。 外側のJOIN
句は、LEFT JOIN
またはRIGHT JOIN
のいずれかとして記述されます。
LEFT JOIN
句は、「左」テーブルからすべてのレコードを返し、「右」テーブルから一致するレコードのみを返します。 外側のJOIN
句のコンテキストでは、左側のテーブルはFROM
句で参照されているテーブルであり、右側のテーブルはJOIN
ステートメントの後に参照されている他のテーブルです。 以下に、table_1
のすべてのレコードと、table_2
の一致する値のみを示します。 table_2
に一致しない値は、結果セットにNULL
として表示されます。
SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;
RIGHT JOIN
句はLEFT JOIN
と同じように機能しますが、右側のテーブルからすべての結果を出力し、左側から一致する値のみを出力します。
SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;
複数のSELECTステートメントとUNION句の組み合わせ
UNION
演算子は、2つ(またはそれ以上)のSELECT
ステートメントの結果を1つの結果セットに結合するのに役立ちます。
SELECT column_1 FROM table UNION SELECT column_2 FROM table;
さらに、UNION
句は、異なるテーブルをクエリする2つ(またはそれ以上)のSELECT
ステートメントを組み合わせて同じ結果セットにすることができます。
SELECT column FROM table_1 UNION SELECT column FROM table_2;
結論
このガイドでは、データベース、ユーザー、およびテーブルの管理、およびそれらのテーブルに保持されているコンテンツのクエリに使用されるSQLのより一般的なコマンドの一部を扱います。 ただし、すべて一意の結果セットを生成する句と演算子の多くの組み合わせがあります。 SQLの操作に関するより包括的なガイドをお探しの場合は、Oracle’s Database SQL Referenceを確認することをお勧めします。
また、このガイドに表示する一般的なSQLコマンドがある場合は、以下のコメントで質問するか提案してください。