受講料が最大70%OFF 受講料が最大70%OFF

SQLの書き方についてまとめています。

SQLの書き方は、selectの構文が基本

SQLの書き方の基本構文

SQLには代表的な四大ステートメント(select、update、insert、delete)があります。selectの基本的な構文は以下の通り。

SELECT
[DISTINCT ]
[JOIN条件]
カラム1 [, カラム2 ...]
[FROM テーブル名]
[WHERE where条件]
[GROUP BY グルーピング条件]
[HAVING 集合関数の絞込条件]
[ORDER BY ソート指定]
[LIMIT オフセット・最大取得数指定]

【関連記事】
SQL文一覧 基本4大ステートメントのサンプルコード集 

たくさん指定項目がありますが、全ての項目を指定しなくてはならないわけではありません。最低限、抽出するカラムと対象テーブルを指定すれば、データベースからデータの抽出が可能です。

mysql> select * from employees;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |

上記のSQLは、employees(社員)テーブルから、全てのカラム(*)をselectで抽出するSQLです。

selectの構文は、update、insert、deleteに応用できます。

なお、SQLにはデータ操作するステートメント(DML)以外に、データベース自体を定義するDDLや、データベースを制御するDCLといったステートメントがあります。

【関連記事】
SQLの基礎 DDL、DMLのサンプルコード紹介

WHEREは、取得データの絞り込みを条件指定

WHERE句では、取得データの条件を記述します。以下の例ではemp_no(社員番号)が10001のデータを条件指定しています。

SELECT * FROM employees 
WHERE 	emp_no = '10001';

+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
+--------+------------+------------+-----------+--------+------------+

条件指定は、andやorで接続したり、関数や演算子を組み合わせたり、あいまい検索など複雑な条件指定が可能です。

【関連記事】
SQL where句のサンプルコード集 ワイルドカードやサブクエリを使った複雑な条件指定

JOIN条件は、複数テーブルのデータを結合して取得

リレーショナルデータベースの特徴として、複数のテーブルを紐付けて結合してデータを取得できます。

SELECT 
	employees.first_name, 
	employees.last_name, 
	salaries.salary 
FROM 
	employees 
	left join salaries on employees.emp_no = salaries.emp_no 
WHERE 
	salaries.to_date = "9999-01-01";
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Georgi     | Facello   |  88958 |
| Bezalel    | Simmel    |  72527 |
| Parto      | Bamford   |  43311 |
| Chirstian  | Koblick   |  74057 |
| Kyoichi    | Maliniak  |  94692 |
| Anneke     | Preusig   |  59755 |
| Tzvetan    | Zielinski |  88070 |
| Sumant     | Peac      |  94409 |
| Duangkaew  | Piveteau  |  80324 |
| Patricio   | Bridgland |  54423 |
 :
 :

上記の例は、employees(社員テーブル)と、salaries(年収テーブル)を結合し、社員の名(first_name)、社員の姓(last_name)、salary(給与)を取得している例です。to_date=9999-01-01のデータは最新の年収データを指定しています。

【関連記事】
SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法

FROM指定は対象テーブルを指定。クエリ指定でサブクエリも可能

FROMではデータ取得対象のテーブルを指定します。FROMの部分にカッコつきで別のSQLクエリを記述すると、SQLの実行結果をテーブルの代わりに使うことができます。これをサブクエリと呼びます。

SELECT age, count 
FROM (SELECT age, COUNT(age) as count FROM staffs GROUP BY age) as ageLists;

【関連記事】
SQLの副問い合わせ(サブクエリ)とは?概要・種類・使い方を解説

GROUP BYは、小計などを計算するグルーピング指定

group by指定で、対象データの小計などを計算できます。

SELECT 
	departments.dept_name, 
	count(*)
FROM 
	dept_emp 
left join departments
ON dept_emp.dept_no = departments.dept_no
WHERE 
	to_date = "9999-01-01" 
group by 
	departments.dept_name;
+--------------------+----------+
| dept_name          | count(*) |
+--------------------+----------+
| Development        |    61386 |
| Sales              |    37701 |
| Production         |    53304 |
| Human Resources    |    12898 |
| Research           |    15441 |
| Quality Management |    14546 |
| Marketing          |    14842 |
| Customer Service   |    17569 |
| Finance            |    12437 |
+--------------------+----------+

上記の例では、departments(部署)に所属する社員数を、部署ごとに計算しています。

【関連記事】
SQLのgroup byサンプルコード集 count、like、join等の組み合わせ例

ORDER BYは、ソート指定

order by は、指定したカラムでソート(並び替え)を行います。昇順、または降順指定が可能。

SELECT * FROM `employees`
order by birth_date desc;
+--------+------------+------------+-----------------+--------+------------+
| emp_no | birth_date | first_name | last_name       | gender | hire_date  |
+--------+------------+------------+-----------------+--------+------------+
| 500000 | 1970-01-04 | TARO       | Yamada          | M      | 2001-04-07 |
|  60091 | 1965-02-01 | Surveyors  | Bade            | F      | 1988-05-01 |
|  66702 | 1965-02-01 | Deniz      | Thibadeau       | F      | 1986-03-11 |
|  33293 | 1965-02-01 | Adamantios | Vanwelkenhuysen | M      | 1987-12-12 |
|  59869 | 1965-02-01 | Zsolt      | Riefers         | M      | 1987-09-25 |
|  74344 | 1965-02-01 | Hiroyasu   | Provine         | M      | 1994-11-25 |
|  80850 | 1965-02-01 | Koldo      | Luit            | M      | 1993-11-19 |
|  86422 | 1965-02-01 | Jaewon     | Thummel         | F      | 1985-09-14 |
|  37592 | 1965-02-01 | Berni      | Stranks         | M      | 1985-11-05 |
|  93278 | 1965-02-01 | Magdalena  | Penn            | F      | 1987-04-27 |
 :
 :

上記のSQLは、employees(社員)テーブルをbirth_date(誕生日)で降順にソートして取得する例です。

【関連記事】
SQL order byでソート指定するサンプルコード集 指定のレコードだけ先頭に並べるには?

LIMITは取得件数の指定

LIMITは、取得件数を指定します。

mysql> select * from salaries
    -> order by emp_no desc
    -> limit 10;
+--------+--------+------------+------------+
| emp_no | salary | from_date  | to_date    |
+--------+--------+------------+------------+
| 499999 |  77303 | 2001-11-29 | 9999-01-01 |
| 499999 |  74327 | 2000-11-29 | 2001-11-29 |
| 499999 |  70745 | 1999-11-30 | 2000-11-29 |
| 499999 |  67043 | 1998-11-30 | 1999-11-30 |
| 499999 |  63707 | 1997-11-30 | 1998-11-30 |
| 499998 |  55003 | 2001-12-25 | 9999-01-01 |
| 499998 |  51182 | 2000-12-25 | 2001-12-25 |
| 499998 |  49971 | 1999-12-26 | 2000-12-25 |
| 499998 |  47429 | 1998-12-26 | 1999-12-26 |
| 499998 |  46206 | 1997-12-26 | 1998-12-26 |
+--------+--------+------------+------------+

上記の例は、salaries(年収)テーブルから、emp_no(社員番号)で降順にソートしたうえで10件のデータを取得する例です。

【関連記事】
SQL limitを使ったページング、ランダム抽出、速度改善をおこなう

まとめ

ポテパンダの一言メモ
  • データ操作を行うSQLは、select、update、insert、delete。
  • selectの構文を覚えておくと、update、insert、deleteに応用できる。
  • SQLの構文では、対象テーブル、取得条件、ソート、取得件数などを指定可能。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。