Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SELECT文のSELECT句の理解を深める
Search
kou-line-row
December 25, 2019
Programming
46
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SELECT文のSELECT句の理解を深める
非エンジニア向けに社内勉強会として解説した際に使用した資料です
kou-line-row
December 25, 2019
Other Decks in Programming
See All in Programming
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
R8 の設定見直しでアプリサイズ削減
andpad
0
220
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
sbt 2.0: takeoff
eed3si9n
0
160
Railsバージョンを4倍にした話
optim
0
440
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Curse of the Amulet
leimatthew05
3
16k
Become a Pro
speakerdeck
PRO
31
6.3k
Ethics towards AI in product and experience design
skipperchong
2
440
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Into the Great Unknown - MozCon
thekraken
41
2.8k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Transcript
SELECT文の SELECT句の理解を深める ※非エンジニア対象
注意事項 1.PostgreSQLのSQLを解説します! → Oracle等の別RDBMSのSQLとは異なる場合があります 2.非エンジニア向けです!! → 解説をわかりやすくする為に、 本来とは異なるテーブル構成、解釈、例があります!!
SELECT句の理解を深めるにあたって 大雑把に分けて2つの知識が必要になる
1.SQLの知識 → 今回やる 2.テーブルの構成、関係性の知識 → システムによって様々 王道なテーブル構成はあっても それ通りとは限らない 解説とかしても活用できないかも
なので、 SQLの構文や使い方を非エンジニア向けに 解説しています。 正直、エンジニアさんには物足りない内容だと 思うのでもっと良い資料を探してください!!
None
そもそもSELECTでやりたい事は、 データを抽出したい!!!! ついでに加工とか、集計したい
SELECT 名前 FROM 従業員テーブル WHERE 社員番号 = ‘1’; SQL入門とかによくあるやつ
SELECT 名前 FROM 従業員テーブル WHERE 社員番号 = ‘1’; SQL入門とかによくあるやつ 日本語になおすとこんな感じ
従業員テーブル から 従業員番号 が 1 のデータの 名前 をとってくる
SELECT 名前 FROM 従業員テーブル; それじゃあ最小のSELECT文って?
ちゃいます
SELECT ‘太郎’; -- SQL結果 これです
そもそもなぜFROMを書くのか? データの抽出元を 明確にしたい! ついでに結合とかしたい
例えば SQL DBMS 資料を取ってきて!! どこにあんだよ
明確にいうと(FROM句をつけると) SQL DBMS 私のデスクに置いてある 資料を取ってきて!!
それじゃあ、FROM句がなかったSELECTは?
FROM句がなかったSELECTは SQL DBMS この資料持って!
FROM句がなかったSELECTは SQL DBMS んじゃ資料返して!
FROM句がなかったSELECTは SQL DBMS んじゃ資料返して! そもそもデータを 取りに行ってない 渡されたものをそのまま返してるだけ
つらつらと長く話したけど 一番重要なのは FROM句云々ではなくて 渡した値が返って来る事
値が返ってくるだけなのに何に使うのか? データ加工、 新たな集約の起点を 得るのに使える
[名](スル)物事を整理して、一つにまとめること。 参照:デジタル大辞泉 集約ってなんぞ? 集約データは関数を使って 様々な結果を算出できる
COUNT 件数を算出する SUM 合計値を算出する AVG 平均値を算出する 代表的な集約関数の種類 MAX 最大値を算出する MIN
最小値を算出する
例で使用する従業員テーブル
SELECT COUNT(*) AS 件数, SUM(bmi) AS BMI合 計, AVG(bmi) AS
BMI平均,MAX(bmi) AS 最大BMI, MIN(bmi) AS 最小BMI FROM 従業員テーブル; 使ってみる
注意と補足 集約関数を使用するとGROUP BY句で集約の起点にしないと 抽出項目として設定できない
?
SELECT 性別, COUNT(*) AS 件数 FROM 従業員テーブル; 性別毎(男性、女性)に集約関数結果を見てみる
SELECT 性別, COUNT(*) AS 件数 FROM 従業員テーブル; 性別カラムと集約関数結果を並べてみる なんか怒られた・・・
なんで? COUNT(集約関数) を使うとデータが一つに纏められる なので、一つに纏められたデータに対して 誰の性別を取ってこればいいのか分からない
じゃあどうすればよい? 集約する(データをまとめる) 範囲を定義してあげればよい それが GROUP BY句 です! エラーメッセージにも出てたやつ
SELECT 性別, COUNT(*) AS 件数 FROM 従業員テーブル GROUP BY 性別;
性別で集約したい、なのでGROUP BY句を定義
やったぜ
視点を変えて年代毎(10代、20代…)で 集計したいが・・
視点を変えて年代毎(10代、20代…)で 集計したいが・・ 年代カラムなんて存在しない
SELECT 年齢, AVG(bmi) AS BMI平均 FROM 従業員テーブル GROUP BY 年齢;
とりあえず年齢で集計してみる
これじゃない
SELECT 年齢, CASE WHEN 年齢 < 10 THEN '10代未満' WHEN
年齢 < 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代 FROM 従業員テーブル; 条件分岐で加工してみる
SELECT 年齢, CASE WHEN 年齢 < 10 THEN '10代未満' WHEN
年齢 < 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代 FROM 従業員テーブル; 条件分岐で加工してみる この年代って 新たな集約の起点として使えるんじゃね?
SELECT CASE WHEN 年齢 < 10 THEN '10代未満' WHEN 年齢
< 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代, AVG(bmi) AS BMI平均 FROM 従業員テーブル GROUP BY 年代; 年代で集計してみる
ええやん
注意と補足 先程は解説の為に年齢カラムというものを参照しましたが 通常のテーブル設計で年齢カラムは存在しないです 普通BMIカラムも無いですが・・・・ 理由としては、年齢カラムを作成してしまうと日次ごとに 誕生日を迎えた人がいないかを確認して、いた場合は年齢デ ータを更新しなければならないからです なので、通常は生年月日を保持しておいてシステムなり、 SQLなりでシステム日時と生年月日を使用して年齢を 算出します
SELECT AGE(生年月日) FROM 従業員テーブル; AGE関数で年齢を算出する
SELECT AGE(生年月日) FROM 従業員テーブル; AGE関数で年齢を算出する 年以外の情報が邪魔やな・・・
SELECT DATE_PART('year',AGE(生年月日)) AS 年齢 FROM 従業員テーブル; DATE_PART関数で年数だけを取り出す
ええやん!
注意と補足 CURRENT_DATE(システム日付) から 生年月日を 引いて算出しようとする方も居られますが 閏年の考慮ができないので辞めた方がいいです。 必要無いですが、 方法としては下のようなSQLになります。 SELECT (current_date
- 生年月日) / 365 FROM 従業員テーブル;
LPAD 左側に指定文字を挿入 LTRIM 左側の指定文字を削除 LOWER 大文字英単語を小文字へ変換 代表的な便利な関数(文字列)
TRUNC 切り捨て ROUND(文字列可) 四捨五入 ABS(文字列可) 絶対値 代表的な便利な関数(数値)
TO_CHAR 文字列に変換する TO_DATE 日付型に変換する TO_NUMBER 数値型に変換する 代表的な便利な関数(型変換)
各人のBMIと平均値を並べて比較したい・・・ 副問合せを使いましょう!
SELECT 名前, bmi, (SELECT AVG(bmi) FROM 従業員テーブル) AS 平均値 FROM
従業員テーブル; 副問合せを使ってみる
SELECT 名前, bmi, (SELECT AVG(bmi) FROM 従業員テーブル) AS 平均値 FROM
従業員テーブル; 副問合せを使ってみる 平均値に入る数値は全部同じになるから微妙 集約結果を使って求めたい 内容をSQLに書こ!!
SELECT 名前, bmi, bmi > (SELECT AVG(bmi) FROM 従業員テーブル) AS
平均値より上? FROM 従業員テーブル; 各人のBMIが平均値を上回っているかを判定す る
各人のBMIが平均値を上回っているかを判定す る
各人のBMIが平均値を上回っているかを判定す る ちょっと見づらくない?
SELECT 名前, bmi, CASE WHEN bmi > (SELECT AVG(bmi) FROM
従業員テーブル) THEN '平均値より上!' ELSE '' END AS 判定 FROM 従業員テーブル; 見やすくしよう
見やすい ※個人の感想によるものです
見やすい ※個人の感想によるものです ぶっちゃけ見やすさよりも 条件分岐 + 副問合せのパターンを 紹介したかった
< 小なり、未満 > 大なり、超過 = 等しい 代表的な比較演算子 <= 等しいかそれ以下 >=
等しいかそれ以上 <> または != 等しくない
まとめ SQLってすごくシンプル!! ゆえに、めっちゃ奥深い!!!
注意と補足 解説の為にテーブル名や、カラム名を日本語で書いてますが 通常は英語で定義されていることが多いです 従業員テーブルだったら employees 名前カラムだったら name なので、実際は SELECT name
FROM employees; というふうになります
ご清聴ありがとうござました