Webデザインのための備忘録

webデザインをするために学んだことをアウトプットするためのブログです。

MySQLのselect構文〜基本的な構文まとめ

sqlの基本を学んでいる最中ですが、構文が多くてこんがらがってきたので簡単にまとめました。
ややこしいところは自分なりの和訳つき。

抽出

レコードの抽出(全フィールド)

select * from テーブル名

レコードの抽出(指定フィールド)

select 表示するフィールド名(,区切りで) from テーブル名

条件のある抽出

select *(または指定フィールド) from テーブル名
where 条件式

比較演算子

 select *(または指定フィールド) from テーブル名
 where 指定フィールド < 条件

比較演算子 … = , < , > , <= , >=など

論理演算子

 select *(または指定フィールド) from テーブル名
 where 指定フィールド and 条件

論理演算子(処理の優先順に) … not 、 and 、 or

その他の演算子

 --【範囲検索】
 where フィールド名 between 最小値 and 最大値
 
 --【いずれか検索】
 where フィールド名 in (値1, 値2, 値3)
 
 --【あいまい検索】
 where フィールド名 like パターン(「%」・・・0文字以上の文字列、「_」・・・任意の一文字)

レコードの並び替え

order by フィールド名 並び順(※)

※...desc(降順)/ asc(昇順・デフォルト省略可)


レコード数の制限

limit 開始位置(デフォルト0・省略可), レコード数(上限数)

集約関数

select 集約関数 from テーブル名

全レコード数を抽出

select count(*) from テーブル名

演算結果のグループ化

select 集約関数 from テーブル名
group by グループ化するフィールド名

文字数を数える

 -- char_length(文字数を知りたいフィールド名)
 
 ex)select char_length(content) as 文字数 from posts;
 -- 「posts」テーブルから、contentフィールドの文字数を「文字数」というフィールド名として抜き出してね。

文字を抜き出す

 -- substring(抜き出したいフィールド名, 何文字から, 何文字目まで)
 
 ex)select substring(content, 1, 10) as 抜粋文 from posts;
 --「posts」テーブルから、contentフィールドの1文字目から10文字目までを「抜粋文」というフィールド名として抜き出してね。

演算結果フィールドに別名をつける

 select 集約関数 as 別名 from テーブル名

集約関数の結果に条件を付ける

where は使えないので、 having を使用する。
使い方はwhereと同じ。

select 集約関数 ( as 別名 ) from テーブル名
group by フィールド名
having 条件式;

結合

和結合

select 表示するフィールド名 from テーブル名
union オプション(※、省略可能)
select 表示するフィールド名 from 結合するテーブル名

※ distinct(デフォルト)・・・重複は削除 、 all・・・重複も表示

内部結合

内部結合は、テーブル名と結合するテーブル名を「 join 」で繋げ、
両テーブルのどこのフィールドが一致しているのかを「 on 」で示す。

select 表示するテーブル名.フィールド名 from テーブル名 (innerjoin 結合するテーブル名
    on テーブル名.関連づけるフィールド名 = 結合するテーブル名.関連づけるフィールド名
    
ex)select -①
     posts.id,
     posts.title,
     posts.content,
     posts.user_id,
     users.name
    from posts join users -②
    on posts.user_id = users.id; -③
    
--  ①posts テーブルの id、title、content、user_idと、users テーブルのnameを表示してね。
--   ②posts テーブルに、usersテーブルをくっつけるんだよ。(内部結合)
--  ③【postsテーブルのuser_id】は、【usersテーブルのid】と一緒だよ。

外部結合

外部結合は、テーブル名と結合するテーブル名を「 left join 」で繋げ、
両テーブルのどこのフィールドが一致しているのかを「 on 」で示す。

select 表示するテーブル名.フィールド名 from 全レコード表示するテーブル名 leftouterjoin 結合するテーブル名
    on 全レコード表示するフィールド名.関連づけるフィールド名 = 結合するテーブル名.関連づけるフィールド名
    
ex)select -①
     new_posts.id,
     new_posts.title,
     new_posts.content,
     new_posts.created,
     users.name
    from new_posts left join users -②
    on new_posts.user_id = users.id; -③

-- ①new_posts テーブルの id、title、content、createdと、users テーブルのnameを表示してね。
-- ②new_posts テーブルに usersテーブルをくっつけるんだよ。(外部結合)
-- ③【new_postsテーブルのuser_id】は、 【usersテーブルのid】と一緒だよ。

相関名をつける

ex)select
      p.id,
      p.title,
      p.content,
      p.created,
      u.name
    from new_posts as p left join users as u -①
    on p.user_id = u.id
    order by p.created desc;    

① の「from テーブル名」の部分に、「as 別名」をつけることで、その別名を他の箇所でも使うことができる。

抽出条件を保存する

一連の処理は、「ビュー」として保存しておくことができる。

create view ビュー名(フィールド名1, フィールド名2, フィールド名3) as 抽出条件のselect文;

保存したビューは、手PB売ると同じ扱いができる。

-- 表示してみる
select 表示するフィールド名 from ビュー名;

ビューの削除

  drop view ビュー名;