ITとdesign エンジニアのブログ by エンジ庭

IT業界のトレンドなどIT分野について学んだ事を書いていきます。プログラミング技術などについて現在Qiitaメインに書いてますので、そちらを参照ください。  https://qiita.com/kota_sho

SQL 検索の基礎編

2019-08-25

SQL 検索編

 

・基本の形

SELECT

選択列

FROM テーブル名

 

SELECTの後に選択したい列(カラム名)を書きます。AS 〜 とすることで別名にすることができます。ASを付けた場合、AS以下の名前が列名として表示されます。

FROMのあとは、データを取ってきたいテーブル名を書きます。

SELECT shohin_id AS "商品ID",
shohin_mei AS "商品名",
shiire_tanka AS "仕入れ単価"
FROM Shohin;

 

重複行を一つにまとめる DISTINCT

SELECT DISTINCT 列名

FROM テーブル名

同じ値が入っている行については2つ表示するのではなく、1行でまとめます。

SELECT DISTINCT shohin_bunrui
FROM Shohin;

 

行を指定する WHERE

SELECT 列名

FROM テーブル名

WHERE 取得したい条件

下記では、Shohinテーブルからshohin_meiとshohin_bunruiを取得する。条件としてshohin_bunruiが"衣服"のもの。つまりWHERE抜きだと単純にshohin_meishohin_bunruiの列を全行取得しますが、WHEREに続けて条件を書けば、それに合致した行のみ取得できます。

SELECT shohin_mei, shohin_bunrui
FROM Shohin
WHERE shohin_bunrui = "衣服";

 

算術演算子

SQL文の中では四則演算(+ ー * / )も使えます。 

SELECT shouhin_mei, hanbai_tanka,
hanbai_tanka * 2 AS '販売単価の2倍'
FROM Shohin;

注意1:

NULLが入っている式は答えが全てNULLになります。

5 + NULL = NULL

10 - NULL = NULL

2 * NULL = NULL

注意2:

データ型が違うものは+ で連結できません。

どちらかデータ型を変換して合わせましょう。

文字型 → 数字型  へ変換 (できない)

数字型 → 文字型  へ変換(できる)

 

注意:

WHERE句の後ろに四則演算は使えません(条件式は書ける)。

WHERE句に書けるもの、書けないものは別途ブログに書きます。

 

比較演算子

=    等しい

<>  等しくない

>=    以上

>      より大きい

<=    以下

<     より小さい

 

hanbai_tankaが1000(円)以上のものを条件にする

SELECT shohin_mei, shohin_bunrui, hanbai_tanka
FROM Shohin
WHERE hanabi_tanka >= 1000;

日付に使うと、以降、以前など指定できます。

もしCHAR型(文字型)の'3'に指定すると辞書式順序になります。

 

論理演算子

 

〜でないもの AND演算子

hanbai_tankaが1000(円)以下のもの

 
SELECT shohin_mei, shohin_bunrui, hanbai_tanka
FROM Shohin
WHERE NOT hanabi_tanka >= 1000;

 

または OR演算子

shohin_bunruiが事務用品または衣服

SELECT shohin_mei, shohin_bunrui, torokubi
FROM Shohin
WHERE shohin_bunrui = '事務用品'
OR shohin_bunrui = '衣服';

ANDとORの組み合わせに注意:

( )で分けないと意図しないデータが取得されます。

( )の中から処理されるので取得したい条件を整理して書きましょう。

以下 、「shohin_bunruiが事務用品」と「登録日が9/11または9/20」となります。

事務用品は必ず取得できます。が()の入れ子を誤ると取得できなくなる可能性も。

SELECT shohin_mei, shohin_bunrui, torokubi
FROM Shohin
WHERE shohin_bunrui = '事務用品'
AND ( torokubi = '2009-09-11'
OR torokubi = '2009-09-20');
 

 

論理演算子の優先度は

1、NOT

2、AND

3、OR

()をつければ優先順位を引き上げる事ができます。

取得したい情報は何か整理してうまく()を使おう!