備忘録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:今回使用するデータ
今回、かなり長くなりそうなので先に使用するデータのご紹介。
今回使用するテーブルはこの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
・WHEREでの取得方法
SELECT カラム名 FROM テーブル名 WHERE 条件;
このように使います。
「price が 180」 のレコードを取得した。
この辺りはDMLのUPDATEと同じ使い方ですね。解り易くてありがたい。
これからのデータ取得は全部WHEREが付きます。
②LIKE
・LIKEでの取得方法
SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE 検索条件;
※補足
LIKE "1%"
×:1パーセントのデータを取得 ○:最初に1が付くデータを取得する。"%1"なら逆。
LIKE "%都"
⇨最後に「都」が付くデータを取得する。 配送先が東京都にのデータをまとめて取得したい時とか?
このように取得を行う。
price のデータが 「1から始まる」 レコードを取得した。
Railsの検索機能で使った LIKE句 とほぼ同じ考え方で良さそうです。
単一条件はこのような感じです。
ホント、解り易くてありがたい( ˘ω˘)
6:データを取得する-複数条件
①AND
・ANDでの取得方法
SELECT カラム名 FROM テーブル名 WHERE 条件1 AND 条件2;
この条件には、それぞれ比較演算子が使える。
もちろん、使わなくても良い。
このように取得する。
①stockが200以上 ②priceが120以上 の両方を取得条件としている。
結果、イワシくんはハブられた。悲しいなぁ。
比較演算子も交えつつ、直感的にデータの取得が出来ます。
ありがたい( ˘ω˘)
②OR
・ORでの取得方法
SELECT カラム名 FROM テーブル名 WHERE 条件1 AND 条件2;
もちろん、比較演算子が使える。
もちろん、使わなくても良い。
おあー。
読んで字の如く。おあー。
①priceが140以上 ②stockが300以上 のどちらかを取得条件としている。
結果、priceが120と100の アジ と イワシも
条件②によって無事リストに入ることが出来た。
「AND」が「OR」に置き換わっただけなので非常に解り易い( ˘ω˘)
③IN
・INでの取得方法
SELECT カラム名 FROM テーブル名 WHERE カラム名 IN (条件1, 条件2, 条件3,,,);
条件には 値 か 文字列 が入る。
比較演算子は使えない。
このように取得する。
条件1、条件2、条件3 のどれかに当てはまるレコードを取得する。
ORと異なる点
①同一のカラムを参照する
②比較演算子が使えない
③条件が無限に作れる
条件を無限に増やせるからORの上位互換かなー?
と、思いきや全然違いました。
INはINでオンリーワンです( ˘ω˘)
7:データを取得する-否定条件
・NOTでの取得方法
SELECT カラム名 FROM テーブル名 WHERE NOT 条件;
もちろん、比較演算子が使える。
もちろん、使わなくても良い。こ
このように取得する。
NOTなのでNOT。否定でござる。
「stockが100ではないこと」を取得条件にしている。
結果、マグロ・カツオ・たまごは弾かれた。
過剰在庫。なんと恐ろしい単語。
8:データを取得する-範囲条件
・BETWEENでの取得方法
SELECT カラム名 FROM テーブル名 WHERE カラム名 BETWEEN 下限 AND 上限;
当然ではあるが、条件は同一のカラムから設定する。
下限〜上限の性質上、文字列には使えない。ハズ。
このように取得する。
BETWEENなので、「間」を取る。記号にしたら「≦・≧」。
「カラムはid。数値が3以上・5以下」を取得条件としている。
idを範囲に絞った為、結果が非常に分かり易い。
当然ながら範囲を絞るという性質上、文字列には使えない。
9:続きはまた次回
単純に内容が多い為か、やはり次回に持ち越しとなりました。
次回はテーブルの結合です。
次回こそSQLの最後です。
終わり!!!!!!!!!!!!!!!!!!!
この記事が気に入ったらサポートをしてみませんか?