SQLチートシート

前書き

SQLデータベースには、データの追加、変更、削除、およびクエリに必要なすべてのコマンドがインストールされています。 この虎の巻スタイルのガイドは、最も一般的に使用されるいくつかのSQLコマンドのクイックリファレンスです。

このガイドの使用方法:

  • このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。

  • 完了しようとしているタスクに関連するセクションにジャンプします

  • このガイドのコマンドに「++」が表示されている場合、このテキストは「自分のデータベース」内の列、テーブル、およびデータを参照する必要があることに注意してください。

  • このガイド全体で、指定されたデータ値の例はすべてアポストロフィ( ‘+’ + `)で囲まれています。 SQLでは、ストリングをアポストロフィで構成したデータ値をラップする必要があります。 これは数値データには必要ありませんが、アポストロフィを含めても問題は発生しません。

SQLは標準として認識されていますが、ほとんどのSQLデータベースプログラムには独自の拡張機能があります。 このガイドでは、MySQLをリレーショナルデータベース管理システム(RDBMS)の例として使用していますが、指定されたコマンドは、PostgreSQL、MariaDB、SQLiteなどの他のリレーショナルデータベースプログラムで動作します。 RDBMS間に大きな違いがある場合は、代替コマンドを含めました。

データベースプロンプトを開く(ソケット/信頼認証を使用)

Ubuntu 18.04のデフォルトでは、* root * MySQLユーザーは次のコマンドを使用してパスワードなしで認証できます。

sudo mysql

PostgreSQLプロンプトを開くには、次のコマンドを使用します。 この例では、含まれているスーパーユーザーロールである* postgres *ユーザーとしてログインしますが、既に作成されているロールに置き換えることができます。

sudo -u  psql

データベースプロンプトを開く(パスワード認証を使用)

  • root * MySQLユーザーがパスワードで認証するように設定されている場合は、次のコマンドを使用して認証できます。

mysql -u root -p

データベースに非ルートユーザーアカウントを既に設定している場合は、このメソッドを使用してそのユーザーとしてログインすることもできます。

mysql -u  -p

上記のコマンドを実行すると、パスワードの入力を求められます。 コマンドの一部としてパスワードを指定する場合は、間にスペースを入れずに、「+-p +」オプションのすぐ後にパスワードを入力します。

mysql -u root -p

データベースを作成する

次のコマンドは、デフォルト設定でデータベースを作成します。

CREATE DATABASE ;

データベースでデフォルトとは異なる文字セットと照合を使用する場合は、次の構文を使用して指定できます。

CREATE DATABASE  CHARACTER SET  COLLATE ;

データベースのリスト

MySQLまたはMariaDBインストールに存在するデータベースを確認するには、次のコマンドを実行します。

SHOW DATABASES;

PostgreSQLでは、次のコマンドを使用して、作成されたデータベースを確認できます。

\list

データベースの削除

データベース(データベース内に保持されているテーブルとデータを含む)を削除するには、次の構造に従うコマンドを実行します。

DROP DATABASE IF EXISTS ;

ユーザーを作成する

データベースの特権を指定せずにデータベースのユーザープロファイルを作成するには、次のコマンドを実行します。

CREATE USER  IDENTIFIED BY '';

PostgreSQLは、同様の構文を使用しますが、わずかに異なります:

CREATE USER  WITH PASSWORD '';

新しいユーザーを作成し、1つのコマンドで特権を付与する場合は、 `+ GRANT +`ステートメントを発行することで作成できます。 次のコマンドは、新しいユーザーを作成し、RDBMS内のすべてのデータベースとテーブルに完全な権限を付与します。

GRANT ALL PRIVILEGES ON *.* TO ''@'localhost' IDENTIFIED BY '';

この前の「+ GRANT」ステートメントの「+ PRIVILEGES or」キーワードに注意してください。 ほとんどのRDBMSでは、このキーワードはオプションであり、このステートメントは次のように書くことができます。

GRANT ALL ON *.* TO ''@'localhost' IDENTIFIED BY '';

ただし、https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-strict [厳格なSQLモード]がオンになっています。

ユーザーを削除する

次の構文を使用して、データベースユーザープロファイルを削除します。

DROP USER IF EXISTS ;

このコマンドは、デフォルトでは、削除されたユーザーが作成したテーブルを削除せず、そのようなテーブルにアクセスしようとするとエラーが発生する可能性があることに注意してください。

データベースの選択

テーブルを作成する前に、最初にRDBMSにテーブルを作成するデータベースを伝える必要があります。 MySQLおよびMariaDBでは、次の構文を使用します。

USE ;

PostgreSQLでは、次のコマンドを使用して目的のデータベースを選択する必要があります。

\connect

テーブルを作成する

次のコマンド構造は、「++」という名前の新しいテーブルを作成し、それぞれ固有のデータ型を持つ2つの列を含みます。

CREATE TABLE  (  ,   );

テーブルを削除する

すべてのデータを含むテーブルを完全に削除するには、次を実行します。

DROP TABLE IF EXISTS

テーブルへのデータの挿入

次の構文を使用して、テーブルに1行のデータを入力します。

INSERT INTO  ( , ,  ) VALUES ( '', '', '' );

次のように、単一のコマンドを使用して、テーブルに複数のデータ行を追加することもできます。

INSERT INTO  ( , ,  ) VALUES ( '', '', '' ),  ( '', '', '' ), ( '', '', '' );

テーブルからデータを削除する

テーブルからデータの行を削除するには、次のコマンド構造を使用します。 「」は、削除する行の指定された「」に保持されている値である必要があることに注意してください。

DELETE FROM  WHERE ='';

テーブル内のデータの変更

次の構文を使用して、特定の行に保持されているデータを更新します。 コマンドの最後にある `+ WHERE +`句は、更新する行をSQL​​に指示することに注意してください。 “は、変更したい行に合わせて “に保持される値です。

UPDATE  SET  = ,  =  WHERE =;

列の挿入

次のコマンド構文は、新しい列をテーブルに追加します。

ALTER TABLE  ADD COLUMN  ;

列を削除する

この構造に従うコマンドは、テーブルから列を削除します。

ALTER TABLE  DROP COLUMN ;

基本的なクエリの実行

テーブル内の単一の列からすべてのデータを表示するには、次の構文を使用します。

SELECT  FROM ;

同じテーブルから複数の列をクエリするには、列名をカンマで区切ります。

SELECT ,  FROM ;

列の名前をアスタリスク( + * +)に置き換えることで、テーブル内のすべての列をクエリすることもできます。 SQLでは、アスタリスクは「すべて」を表すプレースホルダーとして機能します。

SELECT * FROM ;

WHERE句の使用

次のように、 + SELECT`ステートメントに + WHERE`句を追加することで、クエリの結果を絞り込むことができます。

SELECT  FROM  WHERE ;

たとえば、次のような構文を使用して、単一の行からすべてのデータをクエリできます。 「」は、指定した「」とクエリする行の両方に保持される値である必要があることに注意してください。

SELECT * FROM  WHERE  = ;

比較演算子の使用

`+ WHERE +`句の比較演算子は、指定された列を値と比較する方法を定義します。 一般的なSQL比較演算子を次に示します。

Operator What it does

=

tests for equality

!=

tests for inequality

<

tests for less-than

>

tests for greater-than

<=

tests for less-than or equal-to

>=

tests for greater-than or equal-to

BETWEEN

tests whether a value lies within a given range

IN

tests whether a row’s value is contained in a set of specified values

EXISTS

tests whether rows exist, given the specified conditions

LIKE

tests whether a value matches a specified string

IS NULL

tests for NULL values

IS NOT NULL

tests for all values other than NULL

ワイルドカードの使用

SQLでは、ワイルドカード文字を使用できます。 これらは、テーブル内の特定のエントリを見つけようとしているが、そのエントリが正確に何であるかわからない場合に役立ちます。

アスタリスク( + * +)は「すべて」を表すプレースホルダーです。これにより、テーブル内のすべての列がクエリされます。

SELECT * FROM ;

パーセント記号( )は、ゼロ個以上の不明な文字を表します。

SELECT * FROM  WHERE  LIKE ;

アンダースコア( + _ +)は、1つの未知の文字を表すために使用されます。

SELECT * FROM  WHERE  LIKE ;

列のエントリをカウントする

`+ COUNT `関数は、特定の列のエントリ数を見つけるために使用されます。 次の構文は、 `+`に保持されている値の総数を返します。

SELECT COUNT() FROM ;

次のように、 + WHERE`句を追加することで、 + COUNT`関数の結果を絞り込むことができます:

SELECT COUNT() FROM  WHERE =;

列の平均値を見つける

`+ AVG `関数は、特定の列に保持されている値の中から平均(この場合は平均)を見つけるために使用されます。 ` AVG `関数は数値を保持する列でのみ機能することに注意してください。文字列値を保持する列で使用すると、エラーまたは「+0」が返される場合があります。

SELECT AVG() FROM ;

列の値の合計を見つける

「+ SUM +」関数は、列に保持されているすべての数値の合計を見つけるために使用されます。

SELECT SUM() FROM ;

+ AVG`関数と同様に、文字列値を保持するカラムで + SUM`関数を実行すると、RDBMSに応じてエラーまたは単に `+ 0 +`が返される場合があります。

列の最大値を見つける

列内の最大の数値またはアルファベット順に最後の値を見つけるには、「+ MAX +」関数を使用します。

SELECT MAX() FROM ;

列内の最小値を見つける

列内の最小の数値またはアルファベット順の最初の値を見つけるには、「+ MIN +」関数を使用します。

SELECT MIN() FROM ;

ORDER BY句を使用した結果の並べ替え

`+ ORDER BY`句はクエリ結果をソートするために使用されます。 次のクエリ構文は、「」と「」から値を返し、「++」に保持されている値で結果を昇順または文字列値の場合はアルファベット順にソートします。

SELECT ,  FROM  ORDER BY ;

同じアクションを実行するが、結果をアルファベットの降順または逆順に並べるには、クエリに `+ DESC +`を追加します。

SELECT ,  FROM  ORDER BY  DESC;

GROUP BY句を使用した結果の並べ替え

「+ GROUP BY」句は「+ ORDER BY」句に似ていますが、「+ COUNT 」、「 MAX 」、「 MIN 」などの集計関数を含むクエリの結果をソートするために使用されます、または ` SUM `。 前のセクションで説明した集計関数は、それ自体で単一の値のみを返します。 ただし、 ` GROUP BY +`句を含めることで、列内の一致するすべての値で実行された集計関数の結果を表示できます。

次の構文は、一致する値の数を「++」でカウントし、昇順またはアルファベット順にグループ化します。

SELECT COUNT(),  FROM  GROUP BY ;

同じアクションを実行し、結果をアルファベットの降順または逆順にグループ化するには、クエリに `+ DESC +`を追加します。

SELECT COUNT(),  FROM  GROUP BY  DESC;

JOIN句を使用した複数のテーブルのクエリ

`+ JOIN +`句は、2つ以上のテーブルの行を結合する結果セットを作成するために使用されます。

SELECT ., . FROM  JOIN  ON .=.;

これは、 `+ INNER JOIN `句の例です。 ` INNER JOIN +`は、両方のテーブルで値が一致するすべてのレコードを返しますが、値が一致しないレコードは表示しません。

outer `+ JOIN `句を使用すると、2つのテーブルのいずれかから、他のテーブルに一致するものがない値を含むすべてのレコードを返すことができます。 外部の「 JOIN」句は、「+ LEFT JOIN」または「+ RIGHT JOIN +」のいずれかとして記述されます。

`+ LEFT JOIN `句は、「左」テーブルのすべてのレコードと「右」テーブルの一致するレコードのみを返します。 外側の ` JOIN `句のコンテキストでは、左のテーブルは ` FROM `句で参照されるテーブルで、右のテーブルは ` JOIN `ステートメントの後に参照される他のテーブルです。 以下は、「」のすべてのレコードと、「」の一致する値のみを表示します。 「+」に一致しない値は、結果セットに「+ NULL」として表示されます。

SELECT ., . FROM  LEFT JOIN  ON .=.;

`+ RIGHT JOIN `句は ` LEFT JOIN +`と同じように機能しますが、右側のテーブルからすべての結果を出力し、左側から一致する値のみを出力します。

SELECT ., . FROM  RIGHT JOIN  ON .=.;

複数のSELECTステートメントとUNION句の組み合わせ

+ UNION`演算子は、2つ(またはそれ以上)の + SELECT`ステートメントの結果を1つの結果セットに結合するのに便利です。

SELECT  FROM  UNION SELECT  FROM ;

さらに、 `+ UNION `句は、異なるテーブルをクエリする2つ(またはそれ以上)の ` SELECT +`ステートメントを同じ結果セットに結合できます。

SELECT  FROM  UNION SELECT  FROM ;

結論

このガイドでは、データベース、ユーザー、およびテーブルの管理、およびそれらのテーブルに保持されているコンテンツのクエリに使用されるSQLのより一般的なコマンドの一部を扱います。 ただし、すべて一意の結果セットを生成する句と演算子の多くの組み合わせがあります。 SQLの操作に関するより包括的なガイドを探している場合は、https://docs.oracle.com/cd/B19306_01/server.102/b14200/toc.htm [OracleのデータベースSQLリファレンス]を確認することをお勧めします。 。

また、このガイドに表示する一般的なSQLコマンドがある場合は、以下のコメントで質問するか提案を行ってください。