タイピング設定を更新できませんでした。ページを再読み込みして、もう一度お試しください。
タイピングレッスン: SQL 言語でのプログラミング
正確さの計算ルールが変更されました。この練習は最初からやり直します。
完了したセッションの保存を確認できませんでした。再入力せずに保存を再試行してください。
タイピングレッスン: SQL 言語でのプログラミング
ブラインドタッチはプログラミングにおいて重要です。高速入力の技術を使うことで、プログラミング言語SQLのコードをより効率的に書けます。
SQLでのプログラミングとブラインドタッチ
SQLを学ぶこととブラインドタッチを練習することは自然に結びついています。SQLのクエリは括弧、カンマ、演算子、引用符でいっぱいです。小さな間違い、例えば引用符の打ち間違いやセミコロンの付け忘れは、クエリが実行されない原因になることがあります。SQLを書くときには、どの部分の構文が異なるデータベースで共通で、どの部分が特定のシステム固有であるかを知ることが役立ちます。この記事では主にPostgreSQLに焦点を当てますが、構文が異なるところではMySQL、SQLite、SQL Serverについても触れます。
SQL構文の特徴は何か?
SQL(Structured Query Language)は宣言型言語です。データをどう取得するかを手順で説明する代わりに、欲しいデータを宣言します。ほとんどの文はSELECT、INSERT、UPDATEといったキーワードで始まります。句の順序は固定されていて、SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...です。PostgreSQLとMySQLはこの順序を共有しているため、一方で学べば他方にも応用できます。
SELECT id, name
FROM customers
WHERE active = true
ORDER BY created_at DESC;
よく使う特殊文字
SQLは多くの句読点を含みます。括弧 () は関数の引数を囲み、条件をグループにまとめます。カンマ , は列を区切ります。ピリオド . はスキーマやテーブル名で使われます(例: public.users)。シングルクォート '...' は文字列リテラルを表します。PostgreSQLは識別子にダブルクォート "..." を使い、MySQLはバッククォート `...` を使います。SQL Serverでは角括弧 [...] が使われることもあります。これらの記号を練習することは、クエリを壊さずに正しく書く助けになります。
-- 文字列リテラル
SELECT * FROM books WHERE title = 'War and Peace';
-- 空白を含む識別子 (PostgreSQL)
SELECT "Order ID", "Customer Name" FROM orders;
大文字と小文字
慣習的に、SQLのキーワードは大文字で書かれることが多いです:SELECT、FROM、WHERE。これによりクエリ内で目立ちやすくなりますが、必須ではありません。PostgreSQLでは引用符なしの識別子は自動的に小文字化されるので、MyTableとmytableは同じ扱いです。MySQLでデータベース名やテーブル名の大文字と小文字を区別するかどうかは、OSとサーバーの設定に依存します。練習のためには、キーワードを大文字で書くのが一般的で、クエリの構造を強調できます。
セミコロンと文の終わり
SQLではセミコロン;で文を終えます。psql、MySQLクライアント、SQLiteの対話シェルは、通常この文字を待ってから文を実行します。psqlでは\gでも現在のクエリを送信できます。結果の代わりに追加入力を求めるプロンプトが表示された場合は、文を終えているか確認してください。
SELECTクエリとJOIN
クエリを書くことはしばしばJOINを書くことを意味します。PostgreSQLはINNER JOIN、LEFT JOIN、RIGHT JOINを使用します。以下の例ではONの後に結合条件を指定します。USINGやNATURALを使う形式のJOINもあります。スペース不足や条件のタイプミスでクエリは失敗します。JOINを練習することは、=や.などの記号を正確に入力する練習になります。
SELECT c.id, c.name, o.amount
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 100;
関数と式
PostgreSQLには多くの組み込み関数があります。COUNT()、SUM()、AVG()などです。括弧は常に必要です。日付と時間の関数NOW()やDATE_TRUNC()はPostgreSQLで使えます。使える関数やその動作はデータベースによって異なります。MySQLにはCURDATE()やDATE_FORMAT()といった関数もあります。正確に入力するには、アンダースコアやカンマ、括弧に注意が必要です。
SELECT DATE_TRUNC('month', created_at) AS month,
COUNT(*) AS orders
FROM orders
GROUP BY month
ORDER BY month;
INSERT、UPDATE、DELETE
データを変更するコマンドには多くの句読点が含まれます。INSERTは列と値をリスト化するために括弧とカンマを使用します。UPDATEは値の代入に=を使い、各代入をカンマで区切ります。 DELETEはキーワードと条件を組み合わせます。これらの構造はPostgreSQL、MySQL、SQLite、SQL Serverでほぼ同じですが、引用ルールは異なります。
INSERT INTO users (id, name, email)
VALUES (1, 'Alice', 'a@example.com');
UPDATE users
SET name = 'Bob', email = 'bob@example.com'
WHERE id = 1;
DELETE FROM users WHERE id = 2;
Common Table Expressions (CTE)
PostgreSQLはWITHで始まるCTEをよく使います。CTEには多くの括弧やカンマが含まれ、タイピング練習に適しています。MySQL、SQLite、SQL ServerもCTEに対応しています。開き括弧と閉じ括弧が正しく対応しているか確認しましょう。
WITH recent_orders AS (
SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;
ウィンドウ関数
PostgreSQLは高度なウィンドウ関数で有名です。典型的な構文OVER (PARTITION BY ... ORDER BY ...)は括弧やキーワードを正確に入力する必要があります。MySQLやSQL Serverもウィンドウ関数に対応しています。以下の例ではPostgreSQLの構文を使います。
SELECT customer_id,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;
パラメータとプレースホルダー
アプリケーションでは、パラメータのプレースホルダーはデータベースとドライバーの両方に依存します。PostgreSQLのネイティブなプリペアドステートメントは$1, $2を使い、MySQLのプリペアドステートメントやSQLiteのクエリでは?を使えます。SQL Serverのパラメータには@p1などの名前を付けます。ドライバーによっては、Psycopgの%sのような別の構文が必要です。小さな記号は打ち間違えやすいため、使うドライバーのドキュメントを確認してください。
-- PostgreSQL
SELECT * FROM users WHERE id = $1;
-- MySQL
SELECT * FROM users WHERE id = ?;
まとめ
SQLキーワードは慣習的に大文字で入力します。PostgreSQLではダブルクォートで囲まない識別子が小文字に変換されますが、他のシステムでは規則が異なります。PostgreSQLは識別子にダブルクォートを使用し、$nプレースホルダー、CTE、ウィンドウ関数を提供します。MySQLはバッククォートと?プレースホルダーを使います。SQL Serverは角括弧と@パラメータを導入します。SQLiteはシンプルな構文を維持しますが、正確さが求められます。SQLクエリを練習することで、記号やキーワードの正確な入力が鍛えられ、PostgreSQLを中心に、広く使われているデータベースのクエリ構文を入力する練習ができます。