【SQL入門】基本的なSQLを目的別にまとめてみた
【内容】
①基本的な列の取得
単一列取得したい
select カラム名 from テーブル名
複数列取得したい
select カラム名, カラム名, from テーブル名
すべての列を取得したい
すべての列を取得:select * from テーブル名
②列を条件で指定したい
単一条件取得したい
select カラム名 from テーブル名 where カラム名='条件'
複数条件取得したい
select カラム名 from テーブル名 where カラム名='条件' and カラム名='条件'
③列名の値の一部を指定して取得
前方一致
select カラム名 from テーブル名 like カラム名='%条件'
⑥SQLを見やすくしたい(相関名の指定)
select * from テーブル名 略称
→次から略称.カラム名で略称の指すテーブルを指定できる。複数テーブルを結合しながら
発行するSQLはどうしても複雑になりがちなので、テーブル名を短くし、可読性をあげる
⑦複数テーブルから情報を取得したい(テーブル結合)
■特定のカラムが両方のテーブルとも一致するレコードを取得(内部結合)
select カラム名 from テーブルA,テーブルB where A.カラム名=B.カラム名
またはselect カラム名 from テーブルA inner join テーブルB on( A.カラム名=B.カラム名)
■特定のカラムが一致しないものも取得したい
→左のテーブルにあるレコードはすべて取得し、かつ指定したカラム名と一致する右のテーブルのレコード
があれば取得する(外部結合)
select カラム名 from テーブルA left join テーブルB on( A.カラム名=B.カラム名)
※一致しないレコードには空白を表示する
■特定のカラムが一致しないものも取得したい
→右のテーブルにあるレコードはすべて取得し、かつ指定したカラム名と一致する左のテーブルのレコード
があれば取得する(外部結合)
【SQL入門】group by,distinctどちらが性能がよいのか
【今回の内容】
前回は基本的なSQLを備忘録で簡単にまとめていたけど、
【SQL入門】基本的なSQLを目的別にまとめてみた - FOR SE
その中に気になることがあったので調べたものをメモとして紹介します。
今の自分の現場では、重複行を絞り込む時に、「distinct」と「group by」を使う人それぞれいました。
distinctとgroup byは同じように重複行を消すという意味では
どちらでもいいのかなーと思っていたけど、
疑問に思ったので少し調べてみました。
【疑問】distinctとgroup by は重複行を消す目的ならどちらを使ってもよいのか?
【結論】 結果としてはどちらも重複行を消すという意味では同じらしい。
だが、一般的にgroup byは集合関数(sumとかcountとか)と一緒に使うので、
そもそもの目的用途が違うのではという話があった。
また、どちらが性能が良いかという事に関しては、賛否両論ある様子。
■distinct>group by派
なし
■distinctやgroup byの代りにEXISTSを使う派
基礎から理解するデータベースのしくみ(5) | 日経 xTECH(クロステック)
個人的には、そもそもDISTINCTやgrop byの代わりにEXISTSを使うという意見がおもしろかった。
手早く目的のデータを取得したいときは、手段は問わない(どれを使ってもいい)けど、
性能改善やチューニングを行う際は、こういった知識が必要なのかなと言う意味で。
こんな入門者向けのブログを書いている人がどんな人物で、どんな人生を歩んでいるのか、もし興味があれば読んでいっていただけると幸いです。
☆入社半年の時☆
文系SE(システムエンジニア)の実態―配属後4カ月で思うこと― - FOR SE
☆入社3年目の時☆
文系SE(システムエンジニア)の実態―三年目で思うこと― - FOR SE
☆英語も勉強してました!
【英語】文系SEが、TOEIC350点付近⇒TOEIC850になった話 - FOR SE
☆これから転職を考えている人向け☆
【整理】異業界異職種への退職エントリー(SEから営業へ) - FOR SE