Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLという言語の特徴や基本についてまとめています。

SQLとは何?

SQLとはデータベースを操作する専門用語です。

システム開発では、PHPやJavaと言ったプログラミング言語でビジネスロジックを組み立て、データベースへのデータの格納や抽出にSQLを使います。SQL単体で使うのではなく、他のプログラミング言語と組み合わせるのが一般的です。

【関連記事】
【初心者向け】SQLって何?プログラミング言語との違いとは?

SQLは第四世代言語と呼ばれています。

第一世代言語は機械語(CPUの命令コードそのもの)、第二世代言語は命令コードを人間が読みやすくしたアセンブリ言語、第三世代言語は、命令コードやニモニックを意識せずにプログラミングが組めるJavaやC++、PHPなどの手続き型言語です。

第四世代のSQLは、手続きを意識せずに、解決したい問題のみを意識してプログラミングが組める言語です。プログラマーだけではなく、エンドユーザでも簡単なパラメータを指定するだけで業務処理やプログラムの作成ができる点が特徴です。

【関連記事】
SQLが第4世代言語と言われる理由とその特徴について 

SQL言語の基本

SQLは大きく分けてDDL、DML、DCLという3種類の操作に分類されます。

DDL(Data Definition Language)は、データベース自体の作成、テーブルなどのデータベースオブジェクトの作成、削除、変更を行います。

DML(Data Manipulation Language)は、テーブルからデータを検索したり、データを追加、変更、削除します。

DCL(Data Control Language)は、データベースのトランザクション制御やユーザへの権限付与を行います。

【関連記事】
【SQL入門】データベース言語の基本を抑えよう!

以下は、DDLのひとつ、テーブルを作成するCREATE TABLEの例(MySQL)です。テーブル名employees_copyに構成するカラム名とデータ型、NULL許可とプライマリキー指定をおこなっています。descはMySQLでデータベースオブジェクトの詳細を表示するコマンドです。テーブルを構成するカラムの情報一覧を表示しています。

CREATE TABLE `employees_copy` (
  `emp_no` int(11) NOT NULL,
  `birth_date` date NOT NULL,
  `first_name` varchar(14) NOT NULL,
  `last_name` varchar(16) NOT NULL,
  `gender` enum('M','F') NOT NULL,
  `hire_date` date NOT NULL,
    PRIMARY KEY (emp_no)
);

Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> desc employees_copy;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

以下はDMLのひとつ、select文の例です。テーブルemployeesからbirth_date(誕生日)が1960年1月1日移行のデータを10件抽出しています。

mysql> select * from employees where birth_date > '1960-01-01' limit 10;
+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel      | F      | 1985-11-21 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau    | F      | 1989-08-24 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10013 | 1963-06-07 | Eberhardt  | Terkki      | M      | 1985-10-20 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10021 | 1960-02-20 | Ramzi      | Erde        | M      | 1988-02-10 |
|  10027 | 1962-07-10 | Divier     | Reistad     | F      | 1989-07-07 |
|  10028 | 1963-11-26 | Domenick   | Tempesti    | M      | 1991-10-22 |
|  10032 | 1960-08-09 | Jeong      | Reistad     | F      | 1990-06-20 |
|  10034 | 1962-12-29 | Bader      | Swan        | M      | 1988-09-21 |
+--------+------------+------------+-------------+--------+------------+
10 rows in set (0.01 sec)

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

select文ひとつを例にしても、多彩なオプション指定が可能です。以下は、MySQLのselect文で使用できる構文です。

SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
      [PARTITION partition_list]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE 'file_name'
        [CHARACTER SET charset_name]
        export_options
      | INTO DUMPFILE 'file_name'
      | INTO var_name [, var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]

【関連記事】
SQLのselectの構文 limitやoffsetなど主要データベースでの差異あり

グルーピングをおこなうGROUP BY、ソートをおこなうORDER BY、抽出数を制限するLIMITに加えて、条件指定を行なうWHERE句で使用するLIKEやIN、Exists、他のテーブルを参照しながらデータ抽出する「結合」や別のSQLの結果を利用してデータを抽出する「サブクエリ」など多彩な使い方があります。

また、データベースによってSQLの仕様は差異があるんですね。SQLには共通規格があるのですが、主要データベースだけでもそれぞれ使いやすいように独自拡張がされていて、例えばOracleのSQLコードはMySQLのSQLコードでそのままでは動作できないのが現実です。

【関連記事】
SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?

まとめ

ポテパンダの一言メモ
  • SQLはデータベースを操作する第四世代の専門言語
  • SQLの基本は大きく分けて、DDL、DML、DCLがある
  • SQLには共通規格が定められているが、データベースごとに仕様の独自拡張がされている

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

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

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

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

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

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

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

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

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

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

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