見出し画像

備忘録7:SQLについて(3/3)-DCL

転職のための3月6日から某スクールにでプログラミング学習を始めた32歳のおっさんです。時系列でHTML⇨CSS⇨Rails & JavaScript &SQLを学習中。
前回に引き続きSQL。今回はDCLです。


学習内容:SQLによるデータベース操作


1:開幕の自問自答

①今回が最後のDCLなんすよね?
 ⇨そうです。
②DCLって具体的に何するんす?データの制御って何すんの?
 ⇨各データの取得・集計・テーブルの結合などです。
③DMLと似てるけどどう違うん?
 ⇨DMLはテーブル・カラムを主体としてレコードを操作します。
  DCLはレコードを主体として、レコード内のデータを操作します。
  って言う感じのイメージ?違ったらさーせん。

と、言うことで今回はDCLです。
SQLの実務だと、ここが一番多いんじゃあないかなーって印象です。
まだ現場を知らないので分かりませんがっ!
思った以上に長くなりそうなので分けるかも。


2:全体の流れ

⓪今回使用するデータ
①DCLについて確認
②データを取得する-単一条件
③データを取得する-複数条件
④データを取得する-否定条件
⑤データを取得する-範囲指定 ←今回はここまで

⑥データを結合する


3:今回使用するデータ

今回、かなり長くなりそうなので先に使用するデータのご紹介。

スクリーンショット 2021-05-23 16.19.36

今回使用するテーブルはこの2つ。
お魚屋さんかな??????????
今回は扱う演算子がやたら多いため、先んじてのご紹介でした。


4:DCLとは???????????

DCLとは、主に3つに分けたSQLによる命令の1つです。

DDL:データの定義 ※Data Definition Language
DML:データの操作 ※Data Manipulation Language
DCL:データの制御 ※Data Control Language ←今回はこれ


そして、DCLは命令に使う演算子がとても多いです。以下、いくつか記載。

データの取得
WHERE:条件に合うデータを取得する。DMLと同じ使い方。

※以下は全てWHEREと組み合わせて使う。
LIKE:文字列・数値から検索を行う。
AND:複数の条件を満たしたデータを取得する。
OR:複数条件から1つ以上を満たしたデータを取得する。
NOT:条件に当てはまらないデータを取得する。
BETWEEN:指定した範囲に当てはまるデータを取得する。
IN:1つのカラム内で条件に当てはまるデータを取得する。
データの結合
JOIN:2つのテーブルを結合して取得する。Railsのreferences的な。
CONCAT:複数の文字列を結合させる。苗字+名前で氏名になる。
GROUP BY:データをグループ化し、平均値や総計を出し、取得する。
COUNT:グループ化されたデータの総量をカウントする。

まだ他にもあるかも知れませんが、ひとまず今回はこの11個です。


5:データを取得する-単一条件

①WHERE

スクリーンショット 2021-05-23 18.04.43

・WHEREでの取得方法

SELECT カラム名 FROM テーブル名 WHERE 条件;

このように使います。

「price が 180」 のレコードを取得した。

この辺りはDMLのUPDATEと同じ使い方ですね。解り易くてありがたい。
これからのデータ取得は全部WHEREが付きます。


②LIKE

スクリーンショット 2021-05-23 18.14.36

・LIKEでの取得方法

SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE 検索条件;

※補足
LIKE "1%"
×:1パーセントのデータを取得  ○:最初に1が付くデータを取得する。"%1"なら逆。

LIKE "%都"
⇨最後に「都」が付くデータを取得する。  配送先が東京都にのデータをまとめて取得したい時とか?

このように取得を行う。

price のデータが 「1から始まる」 レコードを取得した。

Railsの検索機能で使った LIKE句 とほぼ同じ考え方で良さそうです。
単一条件はこのような感じです。
ホント、解り易くてありがたい( ˘ω˘)



6:データを取得する-複数条件

①AND

スクリーンショット 2021-05-23 18.43.25

ANDでの取得方法

SELECT カラム名 FROM テーブル名 WHERE 条件1 AND 条件2;


この条件には、それぞれ比較演算子が使える。
もちろん、使わなくても良い。

このように取得する。

①stockが200以上 ②priceが120以上 の両方を取得条件としている。

結果、イワシくんはハブられた。悲しいなぁ。
比較演算子も交えつつ、直感的にデータの取得が出来ます。
ありがたい( ˘ω˘)


②OR

スクリーンショット 2021-05-23 18.51.12

ORでの取得方法

SELECT カラム名 FROM テーブル名 WHERE 条件1 AND 条件2;


もちろん、比較演算子が使える。
もちろん、使わなくても良い。

おあー。
読んで字の如く。おあー。

①priceが140以上 ②stockが300以上 のどちらかを取得条件としている。

結果、priceが120と100の アジ と イワシも
条件②によって無事リストに入ることが出来た。
「AND」が「OR」に置き換わっただけなので非常に解り易い( ˘ω˘)


③IN

スクリーンショット 2021-05-23 19.27.00

・INでの取得方法

SELECT カラム名 FROM テーブル名 WHERE カラム名 IN (条件1, 条件2, 条件3,,,);


条件には 値 か 文字列 が入る。
比較演算子は使えない。

このように取得する。

条件1、条件2、条件3 のどれかに当てはまるレコードを取得する。
ORと異なる点
①同一のカラムを参照する
②比較演算子が使えない
③条件が無限に作れる

条件を無限に増やせるからORの上位互換かなー?
と、思いきや全然違いました。
INはINでオンリーワンです( ˘ω˘)


7:データを取得する-否定条件

スクリーンショット 2021-05-23 19.07.42

・NOTでの取得方法

SELECT カラム名 FROM テーブル名 WHERE NOT 条件;


もちろん、比較演算子が使える。
もちろん、使わなくても良い。こ

このように取得する。
NOTなのでNOT。否定でござる。

「stockが100ではないこと」を取得条件にしている。

結果、マグロ・カツオ・たまごは弾かれた。
過剰在庫。なんと恐ろしい単語。


8:データを取得する-範囲条件

スクリーンショット 2021-05-23 19.14.11

・BETWEENでの取得方法

SELECT カラム名 FROM テーブル名 WHERE カラム名 BETWEEN 下限 AND 上限;


当然ではあるが、条件は同一のカラムから設定する。
下限〜上限の性質上、文字列には使えない。ハズ。

このように取得する。
BETWEENなので、「間」を取る。記号にしたら「≦・≧」。

「カラムはid。数値が3以上・5以下」を取得条件としている。 

idを範囲に絞った為、結果が非常に分かり易い。
当然ながら範囲を絞るという性質上、文字列には使えない。



9:続きはまた次回

単純に内容が多い為か、やはり次回に持ち越しとなりました。
次回はテーブルの結合です。
次回こそSQLの最後です。




終わり!!!!!!!!!!!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?