LoginSignup
58
25

SQLに触れてみよう

Last updated at Posted at 2024-06-09

はじめに

今回はSQLについて軽く触れてみようと思います。バックエンドにおける実装はデータベースから何をどのように取ってくるか、ということがメインのため、データベースとそれを操作するSQLを知ることはバックエンドの実装を深めるために必須です。

今回はSQLに馴染みが無い人、これからエンジニアとして学習を初めて行く人のために軽くSQLを一緒に体験してもらうことを目的として書いています。

※今回は外部キーや、主キー、NULLなどの説明はしていません。本来なら基本として抑えておくべきものだと思いますが、あくまでもSQLを体験し、楽しんでもらうことを目的としています。この辺については後々また追記していこうかなと思います。

今回の目的

  • DB-fiddleでSQLを体験できることを知り、実際に動かしてみる
  • SQLの基本的な知識を得る

用意するもの

今回は簡単にSQLを体験するこちらのサイトを用意しました
db-fiddle
https://www.db-fiddle.com/
特に登録したりログインしたりする必要はありません。こちらを開いて実際にやってみましょう

まずはこちらの設定から

db-fiddle 152957.png

1、まずは左上のMySQLを最新版にしておきましょう。バージョンが古いと予期せぬエラーが出たりします

2、つぎにテーブルを作成します。テーブルは私が作っておきました。(すごーく簡単にですが)
これをコピペしてそのまま左に貼り付けてみてください

CREATE TABLE student (
  id INT NOT NULL,
  name VARCHAR(50) NOT NULL,
  height INT NOT NULL,
  weight INT NOT NULL,
  sex VARCHAR(10) NOT NULL
);

insert into student values(1,'秋山',158,52,'男');
insert into student values(2,'井上',142,38,'女');
insert into student values(3,'上田',165,60,'男');
insert into student values(4,'江口',150,38,'女');
insert into student values(5,'小野寺',178,70,'男');
insert into student values(6,'加藤',160,45,'女');
insert into student values(7,'君島',151,48,'男');

3、次に右側にselect文を使ってどんなデーブルが作成されたのか、検索条件を書いてみましょう
こちらも下をコピペしてください

select *
from student ;

4、最後は左上にある「RUN」を押してみましょう

5、下に検索結果が取得できましたね

select 検索結果.png

これで見てみましょう

SQLで出来ること(select,insert,delete,update)

まずSQLで出来る事は4つだけです。抑えておきましょう

  • 選択(SELECT)
  • 挿入(INSERT)
  • 削除(DELETE)
  • 更新 (UPDATE)

選択(SELECT)

まずはここに着目しましょう

CREATE TABLE student (
  id INT NOT NULL,
  name VARCHAR(50) NOT NULL,
  height INT NOT NULL,
  weight INT NOT NULL,
  sex VARCHAR(10) NOT NULL
);

ここではテーブルを作りましたということだけ説明しておきます。
テーブルを見て分かるとおり、「id」、「name」、「height」、「weight」、「sex」の5つです

select文の構文は以下の通りです

select カラム名
from テーブル名

ちなみにカラムとは列を表します
他にもレコードと呼ばれるものがあります。図にするとこんな感じです
select 検索結果.png

今回の例で見てみましょう

select *
from student ;

これはstudentテーブルから全てのカラムを取得してください
ということです。

今回のアスタリスク(*)は全てのカラムから取得してください、という意味になります
なのでstudentテーブルの全てのカラムが取得できましたね

ちなみにカラム名を指定してみましょう

select id,name
from student ;

名前とidだけが抽出されましたね
スクリーンショット 2024-06-09 171016.png

このようにselect文を使ってデータベースから検索できます。
後ほど、もっと検索条件を指定して選択する方法も一緒にやっていきましょう

挿入(INSERT)

ここからは物語?っぽくやっていきましょう。
studentテーブルにあるとおり、ここには7人の生徒がいます。

そしてそれを受け持つ担任の先生がいます

school_print_kubaru.png

先生がデータベースを覗いてみると、あることに気付きます
「なんや!うち生徒が8人おるはずなのに7人しかおらんやんか!おお!黒田や、黒田がおらへん」

どうやら黒田さんがデータベースにいなかったようです
てなわけで黒田さんのデータを追加してみましょう

insert into student values(1,'秋山',158,52,'男');
insert into student values(2,'井上',142,38,'女');
insert into student values(3,'上田',165,60,'男');
insert into student values(4,'江口',150,38,'女');
insert into student values(5,'小野寺',178,70,'男');
insert into student values(6,'加藤',160,45,'女');
insert into student values(7,'君島',151,48,'男');
↓これ
insert into student values(8,'黒田',140,32,'女');

そして同じようにselect文でRUNしてみましょう
無事黒田さんが追加されたことを確認します
スクリーンショット 2024-06-09 174908.png

このinsertを紐解いてみましょう

insert into テーブル名 values(値1,値2,...)

今回値の部分は左から「id」、「name」、「height」、「weight」、「sex」という順番で登録されます。

insertを使うことによってデータベースに新たなレコードを追加することが出来ます

削除(DELETE)

今度はまた先生新たなことに気付きます

「そうや!君島ったら、こいつ留年したんや!3年生になってないんやからいるわけないわな!」

どうやら留年した君島君を誤ってデータベースに登録してしまったようです
というわけで君島君をデータベースから削除しましょう

以下の文を新たに付け加えてRUNしてみてください

delete from student
where id= 7;

スクリーンショット 2024-06-09 180325.png

delete文を紐解いてみましょう

delete from テーブル名
where 条件

where句を使うことで、条件に合致するデータを絞り出すことが出来ます
今回id=7としているのでidが7の君島君を削除する、ということです

更新 (UPDATE)

さて、君島君のレコードが削除されましたが
6から8へと飛んでしまったので気持ちが悪いですよね

なので新たに追加した黒田さんのidを8から7へと更新しましょう

update student
set id = 7
where name ='黒田';

スクリーンショット 2024-06-09 181506.png

updateを紐解いてみましょう

update テーブル名
set 条件
where 条件2;

setではカラム名と条件を記述します。ここではidを7とします
where句でnameが"黒田"という条件に一致する人を記述します
これでidが連番となりスッキリしましたね

いろんな条件のSELECTを試してみよう

order by

「あ!今後朝礼の時生徒を並ばせな!出来れば身長順に並べたいなー」
なので生徒を身長の高い順に抽出しましょう

select name, height
from student order by height desc;

スクリーンショット 2024-06-10 060649.png

身長の高い順に並びました

select カラム名
from テーブル名 order by  条件;

order byを使えば指定のカラムを昇順、降順に入れ替えできます
ASCは昇順、DESCは降順に入れ替えできます

ASC => 昇順
DESC => 降順

limit

「そうや!身長の高い生徒3名をバレーボール部に見学薦めるよう顧問の先生に言われたんや!上位三名はと・・」

今度は身長の高い生徒を3人だけ抽出しましょう

select name, height
from student order by height desc limit 3;

image.png

上位3名だけが抽出されました

select name, カラム名
from テーブル名 order by height desc limit 数字;

limitに数字を入れることによって抽出する数を指定できます
今回はdescで降順としているので身長の上位3名ですね

SUM

「そういや、全生徒の合計の体重を足すとどんなもんなのかな?車よりも重いんかな?」
よく分からん考えが浮かんできました

ともかく生徒の体重の合計を足してみましょう

select sum(weight) as '合計体重'
from student ;

スクリーンショット 2024-06-10 064147.png

合計は335となりました。全然足りませんね(笑)

select sum(カラム名) as '抽出する名称'
from テーブル名 ;

sum(カラム名)とすることでそのカラムの数字の合計値を抽出することが出来ます
ちなみにasは抽出した値の名前を設定することが出来ます

AVG

「後は保健省に平均身長と平均体重を送らなあかん!」
というわけで平均値を抽出してみましょう

select avg(height) as '平均身長',avg(weight) as '平均体重'
from student ;

スクリーンショット 2024-06-10 065434.png

平均身長と平均体重が割り出されました
avgの使い方はsumと同じです

他にも件数を割り出すCOUNT、最大値を出すMAXなどがあります
調べて使ってみましょう

LIKE

「何!うちの学校の生徒がテスト中不正行為やと!なんでもその生徒は「上」っちゅう漢字が付くらしいな・・うちの生徒にいたっけ?」

というわけで「上」のつく生徒を探してみましょう

select name
from student where name like '%上%'

スクリーンショット 2024-06-10 070222.png

select カラム名
from テーブル名 where カラム名 like '検索文字'

今回使った%はワイルドカードと言い
0文字以上の任意の文字列を指定して検索することが出来ます

0文字以上の任意の文字列??と思うかもしれませんね
要は%が指定したところに文字が入っているかもしれないし、入っているかもしれない
そこに何文字が入っているか分からないということです

例えば今回を'上%'とした場合、「上」の後に文字が入っていないかもしれないので
「上」という名前の人かもしれないし、「上山」とも「上野ヶ原」という名前かも知れないということです

'%上%'とすれば問答無用で前にも後にも上が付く人を検索してくれるというわけです

おわりに

いかがだったでしょうか?
今回は簡単なSQLの構文だけを見ましたが、まだまだたくさんの使い方があります
このDB-Fiddleを使いながら調べて実践すると、SQLの知識がどんどん深まると思いますので是非参考にしてみてください

58
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
25