SQLを使ったことがありますか?データベースエンジニアでなくてもSQLに触れる機会はあります。たとえば、プログラム中でデータベースからデータを読みこんだり、保存したりする場合です。最近ではSQLを自動生成する技術が開発され、直接SQLを使う機会は少なくなってきています。しかし、まだまだ生のSQLを使わないといけない状況は数多くあります。また、問題が起こった時には自動生成されたSQLを解読しなければならないでしょう。やはりどんなエンジニアの方でもSQLの基礎程度は知っておくべきです。
この記事では、SQLを一から学びたい(再学習したい)フリーランスエンジニアの方のために、SQLの基礎をオープンソースのデータベースであるMySQLを使って解説していきます。ぜひご一読して、案件でSQLに触れる機会があっても困らないようにしておきましょう。
参照:エンジニアのスキルアップ・リスキリングの重要性と取り組み方について解説した記事はこちら
そもそもSQLってなに?
SQL(構造化問い合わせ言語)は、データベースを操作するための言語です。データベースにはGUIの管理ツールもあり、グラフィカルに操作することもできます。しかし、裏では密かにSQLを作成し、データベースを操作しているのです。MySQLやOracle、SQL Serverなどの各RDBMS(関係データベース管理システム)は標準SQL規格に対応しています。そのため、共通のSQLが使えるわけです。一部、方言と呼ばれる各RDBMS独自の拡張がなされています。SQLは数学的理論にもとづいており、プログラミング言語とは考え方がまったく異なるのでとっつきにくいと思う方も多いでしょう。SQLでの考え方に慣れることが上達の早道です。
MySQLのインストール
MySQLは、オープンソースのRDBMSでだれでも無料で使うことができます。データベースの人気ランキングでは、トップのOracleに次いで2位になっています。それだけ案件の数も多いというわけです。ちなみに、MySQLはオラクルに買収されたので、どちらもオラクルのものです。
それでは、ダウンロードページからインストールを行ってください。各プラットフォーム用のインストーラーが用意されています。なお、インストール時に指定するパスワードは後で使いますので忘れずにメモしておきましょう。
コマンドラインツールからログイン
インストールが終わったらコンソール(コマンドプロンプト)を立ち上げて、下記のコマンドを入力してMySQLにログインしましょう。なお、事前に環境変数を設定しておくか、カレントフォルダを移動しておく必要があります。
mysql –u root –p
続けてパスワードの入力を求められますので、インストール時に設定したパスワードを入力します。これでログインができました。
基本的なSQLコマンドでの操作
データベースの作成
なにはともあれ、データベースを作成しないとはじまりません。下記のSQLでデータベースを作成できます。データベースには、データの保存先であるテーブルを複数作成することが可能です。ここではデータベース名は”shop”とします。
create database shop;
下記のコマンドを入力するとデータベースの一覧が表示されます。ちゃんと作成できていますか?
show databases;
作成したデータベースに切り替える
それでは、今しがた作成したデータベースを操作できるように切り替えましょう。下記のコマンドで切り替えられます。
use shop;
このように、データベースを操作する前に切り替えるのが基本です。
テーブルを作成する
次に、データベースに下記のようなテーブルを作成します。データを保存するためにはテーブルが必要です。データ形式に合ったテーブルを作成しましょう。
列名 | データ型 | 長さ |
id | 数値 | 4バイト |
name | 文字列 | 128バイト |
address | 文字列 | 256バイト |
文字列 | 128バイト | |
total | 数値 | 4バイト |
SQLとして表現すると下記のようになります。ここではテーブル名は”orders”とします。
create table orders(id int, name varchar(128), address varchar(256), mail varchar(128), total int);
こちらもデータベース同様、コマンドを使って作成できているか確認してみましょう。
show tables;
テーブルにデータを挿入する
さっそく作成したテーブルにデータを入れてみましょう。使用するサンプルデータは下記の通りです。
id | name | address | total | |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12800 |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
このデータをSQLとして入力すると下記のようになります。
insert into orders values
(1, ‘田中太郎’, ‘茨城県龍ケ崎市’, ‘tanaka@example.com’, 12800),
(2, ‘鈴木一郎’, ‘東京都品川区’, ‘suzuki@example.com’, 5600),
(3, ‘佐々木始’, ‘東京都江戸川区’, ‘sasaki@example.com’, 98500);
これでテーブルにデータが保存できました。
テーブルに保存したデータの取得
先ほどテーブルに保存したデータを取得してみましょう。それには下記のselect文を使います。
select * from orders;
結果
id | name | address | total | |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12800 |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
“*”を指定するとすべての列を取得できます。明示的に列名を指定して一部の列のみを取得することもできます。下記がその一例です。
select name, address from orders;
結果
name | address |
田中太郎 | 茨城県龍ケ崎市 |
鈴木一郎 | 東京都品川区 |
佐々木始 | 東京都江戸川区 |
条件を指定してデータを取得する
テーブルのすべてのデータを取得するのではなく、条件に一致する一部のデータのみを取得することもできます。それには下記のwhere句を使います。
select * from orders where id = 2;
結果
id | name | address | total | |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
また、”and(かつ)”や”or(および)”を使って複数の条件を指定することもできます。たとえば、次のようにします。
select * from orders where id = 2 or id = 3;
結果
id | name | address | total | |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
このようにSQLでは任意の行のみを取得することができます。
一定の範囲のデータを取得する
さきほどは条件に固定値を指定しました。他にも値の範囲を条件に指定する方法もあります。それにはwhere句に続けてbetween句を使います。
select * from orders where total between 0 and 10799;
結果
id | name | address | total | |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
また、not句を付けることで条件を反転させることもできます。つまり、条件の範囲に含まれないものが取得できます。
select * from orders where total not between 0 and 10799;
結果
id | name | address | total | |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12800 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
用途によって条件の指定方法を使い分けましょう。
パターンに一致するデータを取得する
場合によってはあいまいな条件で検索したいこともあります。たとえば、東京の住所の人だけを取得したい場合には次のようにlike句を使います。
select * from orders where address like ‘東京都%’;
結果
id | name | address | total | |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
like句に指定する文字列には、ワイルドカードとして”%(任意の0文字以上の文字を表す)”と”_(任意の1文字を表す)”が使えます。この2つを組み合わせることで柔軟な検索が可能です。
データを並び替えて取得する
データを特定の順番で取得したい時があります。そんなときは、order by句を使いましょう。デフォルトでは昇順で取得されます。
select * from orders order by total;
結果
id | name | address | total | |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12800 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
また、降順で取得するには次のようにします。
select * from orders order by total desc;
結果
id | name | address | total | |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 98500 |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12800 |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
プログラム側で並び替えることもできますが、多くの場合データベースで処理したほうが効率的です。
データを更新する
もちろん、テーブルに保存したデータは更新することができます。データの更新にはupdate文を使います。多くの場合where句も同時に使って更新するデータを限定します。そうしないとすべてのデータが更新されてしまいます。
update orders set total = total – 540 where total > 10799;
結果
id | name | address | total | |
1 | 田中太郎 | 茨城県龍ケ崎市 | tanaka@example.com | 12260 |
2 | 鈴木一郎 | 東京都品川区 | suzuki@example.com | 5600 |
3 | 佐々木始 | 東京都江戸川区 | sasaki@example.com | 97960 |
更新するデータには固定値を使うこともできますが、上記の例のように更新前の値を使って計算することもできます。状況によって使い分けましょう。
まとめ
SQLについて興味がわきましたか?ここで解説したことはごく基本的な部分です。SQLは非常に奥深く、それだけで分厚い本が書けます。この記事を足がかりに本格的に勉強をはじめてみましょう。MySQLの公式サイトには詳細な日本語ドキュメントが用意されています。入門書と合わせて参考にするとよいでしょう。SQLはプログラミング言語ではないので結構好みが分かれる言語だと思います。あなたはSQLについてどんな印象を持っていますか?
参照:エンジニアのスキルアップ・リスキリングの重要性と取り組み方について解説した記事はこちら
フリーランスになるために必要な知識やスキルアップの方法等、様々なお役立ち情報を発信していきます。
(リモートワーク案件に強いフリーランスエージェント「クラウドワークス テック」を運営)