データベースとは??
データ形式をあらかじめ決めて、データを管理する構造のことを指します。
また、データを管理するプログラムとしてDBMS(Database Management System:データベース管理システム)というものがあり、DBMSに命令を与えるのがSQLなどになります。
SQL
クエリとは?
クエリ(query)とは、英語で「問い合わせ(る)」、「訪ねる」などの意味を持つ英語の単語で、ITではソフトウェアに対するデータの問い合わせや要求などを一定の形式で文字に表現することを意味します。
クエリを通じて、データの検索や更新、削除、抽出などの要求をデータベース(DBMS)に送信することができます。
簡単に言うと、データベースへの命令みたいな感じです
SQLとは?
SQL(Structured Query Language)はRDBMSと対話するための言語です。
クエリが命令でSQLが言語です。
ex)
具体例 | |
---|---|
クエリ | おいデータベース!!〇〇の値とってこいや |
SQL | SELECT 〇〇 FROM △△ ~~ |
どんな命令があるの?
SQLでデータベースに対するデータの読み書きは、「登録」「読み出し」「更新」「削除」の4つに分類できます。
操作 | 内容 |
---|---|
登録 | 新たなレコードを書き込むこと |
読み出し | 既存のレコードを取得すること |
更新 | 既存のレコードの内容を部分的に変更すること |
削除 | 既存のレコードを消し去ること |
今回は具体例として下のような大学生の名簿のレコードがあったとしましょう。
名前 | 学年 | 性別 | 住所 | 出身高校 |
---|---|---|---|---|
山田 | 4 | 男 | 東京 | W高校 |
田中 | 1 | 女 | 神奈川 | K高校 |
斎藤 | 3 | 男 | 神奈川 | T高校 |
小林 | 3 | 男 | 千葉 | J高校 |
吉田 | 2 | 男 | 埼玉 | S高校 |
日常生活での表現をデータベースでの「登録」「読み出し」「更新」「削除」に当てはめてみると、
・新しい生徒が入学する → 名簿への「登録」
・3年生の一覧を見る → 名簿の読み出し
・山田さんの住所を変更する → 名簿の山田さんのレコードの更新
・斎藤さんが退学した → 名簿の斎藤さんのレコードの削除
みたいな感じになります。
実際のSQL文はどんな感じなの??
実際にSQLを紹介していきます。イメージはかなり英語に近いので、あまりプログラミングをしたことがない人でも何をしているのかだいたいつかめると思います。
操作 | 命令 | 例 |
---|---|---|
登録 | INSERT | INSERT INTO 名簿 VALUES('前田','3年', '女', '東京', 'S高校' ) |
読み出し | SELECT | SELECT 名前 FROM 名簿 WHERE 学年='3年' |
更新 | UPDATE | UPDATE 名簿 SET 住所='埼玉' WHRER 名前='山田' |
削除 | DELETE | DELETE FROM 名簿 WHERE 名前='斎藤' |
1つ目の登録は「名簿に名前が前田、学年が3年、性別が女、住所が東京、出身高校がS高校のユーザーを登録する」
2つ目の読み出しは「名簿から、学年が3年の人の名前を取得する」
3つ目の更新は「名前が前田のレコードの住所を埼玉に更新する」
4つ目の削除は「名簿から名前が斎藤のレコードを削除します」
よく使うオプション
WHERE
WHEREは条件を指定することができます。
SELECT 名前 FROM 名簿 WHERE 性別="男"
意味:名簿から「 性別="男"」という条件で名前を読み出せ
山田
斎藤
小林
LIKE
LIKEを使うと、任意の文字列を指定することができます。
SELECT 名前 FROM 名簿 WHERE 名前 LIKE '%田'
意味:名簿から指名が任意の文字列で末尾が「田」であるという条件で指名を読み出せ
山田
吉田
ORDER BY
SELECT命令で読みだしたデータを整列させることができます。ORDER BYの後に、整列の対象となる列名を指定し、昇順(ASC)、降順(DESC)を指定します。
SELECT 名前, 学年 FROM 名簿 ORDER BY 学年 DESC
意味:名簿から名前と学年を読み出し、学年の大きい順に整列せよ。
山田 4
斎藤 3
小林 3
吉田 2
田中 1
INNER JOIN
INNER JOINは内部結合をします。内部結合とは、指定したそれぞれのカラムの値が一致したものを結合することです。
例えば、名簿に乗ってる人たちのテストの点数のテーブル「得点表」があるとしましょう。
名前 | 数学 | 英語 | 国語 |
---|---|---|---|
斎藤 | 99 | 60 | 45 |
落合 | 3 | 5 | 100 |
山田 | 80 | 70 | 70 |
小林 | 87 | 32 | 57 |
清水 | 60 | 100 | 100 |
SELECT * FROM 得点表 INNER JOIN 名簿 名簿.名前=得点表.名前
意味:得点表から、名簿と得点表のテーブルの、それぞれの名前が一致したものの情報をすべて読み出す
斎藤 99 60 45
山田 80 70 70
小林 87 32 57
ちなみに、結合した時に、それぞれの名前が一致しなかった場合はnullが入ります。
これからもう少し修正を加えていい記事にしていきます