SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
1
SQL標準とMySQL
MySQL Casual Talks vol.12
2019-09-13 19:50 LT
@meijik
免責事項
• 本プレゼンテーションにおいて示されている
見解は、私自身の見解であって、私の所属す
る会社・団体の見解を必ずしも反映したもの
ではありません。ご了承ください。
2
自己紹介
• 日本オラクルでMySQLサポートをしています。
–漢と書いてオトコ(奥野幹也氏)の同僚。
–漢は「理論から学ぶデータベース実践入門 」「Pro
MySQL NDB Cluster(共著)」著者
• DB関連のブログや書籍を書いてます。
–キムラデービーブログ(blog.kimuradb.com)
–「おうちで学べるデータベースのきほん(共著)」
• ミックさんの知り合い。外人じゃないよ。
• MyNA会員、Neo4Jユーザ会会員
• Firebird日本ユーザ会の理事長
日本語サポートメンバー募集中!
MySQLの漢といっしょにはたらこう
4
SQL標準(SQL STANDARD)
MySQLが思いついた便利な機能との関係
5
6
SQL標準
• リレーショナルデータベースではデータを表に
格納し、その表に対して様々な指定をし、必
要な情報を取得することができます。
• SQL文自体は当初標準がなく、各社が独自
に仕様・実装を進めていましたが、1980年代
中盤以降、徐々にISO(国際標準化機構)や
JISでの標準化が進み、各社実装依存の例
外や方言は残るものの基本的な部分はかな
り共通化されてきました。
7
SQL標準からのアプローチ
• SQL標準からMySQL側にアプローチするわ
けではありませんが、MySQLが未実装の機
能を実装するときに便利に利用できます
• わりと最近MySQLに実装された機能には
SQL標準に準拠したものがいくつかあります。
– SQL/PSMストアドルーチンやトリガー
– 共通表式(Common Table Expression: CTE)
– ウインドウ関数(Window Functions)
– CHECK句
– 生成列(Generated Column)
8
MySQLからのアプローチ
• MySQLは開発当初から「便利」と思った機能
を実装してきました。
• その中にはSQL標準として取り込まれたり、
取り込まれないにしても多くのRDBMSでとり
いれられた機能がいくつもあります。
– GROUP_CONCAT()関数
– LIMIT句
– REPLACE, INSERT …. ON CONFLICT ….
– バルクインサート(INSERT …. VALUES(),(),())
のVALUES部分(複数の値の組)
GROUP_CONCAT
WATCOM SQL由来の便利な関数
9
10
GROUP_CONCAT()
• 数字に対するSUMの文字版
– 文字の場合足せないのでデリミタ(通常カンマ)で
結合していく。
• DBCAT DBNAME
----- ------
1 Firebird
2 Oracle
1 MySQL
2 DB2
1 PostgreSQL
2 SQLServer
1 SQLite
DBCAT DBNAME
----- ------
1 Firebird,MySQL,PostgreSQL,SQLite
2 Oracle,DB2,SQLServer
11
MySQL,Firebird(LIST)がサポート
• PostgreSQL 9.0でSTRING_AGGサポート
– PostgreSQLでは、ARRAY_AGG類似表記の
STRING_AGGをサポートしました。
– その後SQL Server 2017でSTRING_AGGがサ
ポートされました。
• Oraclel 11g R2, IBM DB2 9.7 FP4で
LISTAGGをサポート
• SQLiteでは2007-12-14 (3.5.4)にて
GROUP_CONCATをサポート
12
SQL標準はLISTAGG !
• でも観点(落とし穴)がいろいろ
– 結果の最大長(連結していくので要素が多いほど
大きくなる)
• 超えた場合の扱い: 切捨てか例外か
• MySQLの場合デフォルト1024, 超えたら切り捨て
– 要素の順序(ORDER BY)
– 要素のユニークネス(ALL | DISTINCT)
– デリミタの指定
LIMIT, OFFSET
ページング(Pagenation)に便利?
13
14
FETCH FIRST n ROWS構文
• みなさんご存知のLIMITはSQL標準ではあり
ません。。。。
• SELECT C1, C2 FROM TBL_A ORDER
BY C1 OFFSET 5 ROWS FETCH FIRST
10 ROWS ONLY;
• MySQLでは以下のどちらか
– SELECT C1, C2 FROM TBL_A ORDER BY
C1 LIMIT 10 OFFSET 5;
– SELECT C1, C2 FROM TBL_A ORDER BY
C1 LIMIT 5,10;
15
FETCH FIRST n ROWS …
WITH TIES構文
• 順位のようにソートして、同位を含める指定
• SELECT C1, C2 FROM TBL_A ORDER
BY C1 OFFSET 5 ROWS FETCH FIRST
10 ROWS WITH TIES;
• SELECT C1, C2 FROM TBL_A ORDER
BY C1 LIMIT 5,10 WITH TIES;
16
WITH TIES構文
→Window関数で書き換え可能
SELECT w.C1, w.C2
FROM (
SELECT TBL_A.*, RANK() OVER (ORDER
BY C1) r
FROM TBL_A
) w
WHERE r <= 5;
17
流れ
MySQL: LIMIT 便利だよ
↓
せやな、じゃFETCH FIRST ROWSで by IBM
↓
でも、DB2にないOFFSET, WITH TIESつける
で(なんで?)
REPLACE, INSERT..ON
CONFLICT
表のマージに便利
18
日本語サポートメンバー募集中!
MySQLの漢といっしょにはたらこう
19
20
MERGE軍勢に加わるか?
• PostgreSQL, MySQL, SQLiteは加わらず
– まぁ、INSERT … ON CONFLICTで事足りるの
で。。。。
INSERT INTO … VALUES(値1),(
値2),…,(値N)
INSERTには便利だが、まさかの展開
21
22
MySQL最初のサポート時
MySQL & mSQL
p.111より引用
(赤下線は筆者追加)
https://www.oreilly.co.jp/books/4873110114/
23
なので独自機能と思いきや
• 実はSQL92(Full)で標準SQLで定義されてい
た。
– SQL2はSQL92の古い名称。(SQL3がSQL99)
• MySQL(と、DB2)が初期から実装していた。
– D.2.21 Changes in release 3.22.5
• Add support for INSERT INTO table ...
VALUES(...),(...),(...), to allow inserting multiple
rows with a single statement.
24
わーい! MySQL!!
• しかし、今はINSERTのみならず、より汎用的
な位置づけとして、テーブル値コンストラク
ター(TVC: Table Value Constructor)とし
て利用される。
• 以下のような利用方法
– INSERT...VALUESステートメントのVALUES 句
– MERGE ステートメントの USING 句
– FROM 句の派生テーブル
– 「そのまま」
25
FROM句の派生テーブルの例
• SQL Serverの例
– SELECT a, b FROM (VALUES (1, 2), (3, 4),
(5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);
26
「そのまま」の例
• PostgreSQLの例(8.2以降)
– 必要最小限の VALUES コマンドは以下のとおり。
VALUES (1, 'one'), (2, 'two'), (3, 'three');
– これは、カラムが二つで行が三つの表を返します。
事実上、これは次と同じことです。
SELECT 1 AS column1, 'one' AS column2
UNION ALL
SELECT 2, 'two'
UNION ALL
SELECT 3, 'three';
まぁ、まだMYSQLには実装されて
ないんですけどね。。。
27
28
流れ
MySQL: VALUSE(),(),() 便利だよ
↓
せやな、じゃ色々使えるように拡張したるわ by
SQL標準
↓
えー、MySQLくらいでいいんじゃない。。。
(MySQLはINSERT以外の拡張分は未サポート)
ちなみにOracle DBはガン無視。。。。
29
1.7 MySQLの標準への準拠
• 実はマニュアルにある
– https://dev.mysql.com/doc/refman/5.6/ja/comp
atibility.html
– PostgreSQLマニュアルのように、細かいもので
はなく概略的なもの
• 1.7.1 標準 SQL に対する MySQL 拡張機能
• 1.7.2 MySQL と標準 SQL との違い
• 1.7.3 MySQL における制約の処理
日本語サポートメンバー募集中!
是非!!
MySQLの漢といっしょにはたらこう
30

Más contenido relacionado

La actualidad más candente

今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしないAkihiro Kuwano
 
クラウドのようなVPS 「ConoHa」 を使ってみよう。
クラウドのようなVPS 「ConoHa」 を使ってみよう。クラウドのようなVPS 「ConoHa」 を使ってみよう。
クラウドのようなVPS 「ConoHa」 を使ってみよう。Hironobu Saitoh
 
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定Shinyu Murakami
 
これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comyoku0825
 
MySQLの系譜について少々
MySQLの系譜について少々MySQLの系譜について少々
MySQLの系譜について少々yoku0825
 
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~sakaik
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migrationspg_games
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodbRyuji Tamagawa
 
20130417 movbale type_seminar
20130417 movbale type_seminar20130417 movbale type_seminar
20130417 movbale type_seminarSix Apart
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveTakanori Sejima
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみたYousuke Kuroda
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜furandon_pig
 
Sql world を支える技術
Sql world を支える技術Sql world を支える技術
Sql world を支える技術Oda Shinsuke
 
AWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストールAWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストールsakaik
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
新人営業のためのよくわかる仮想化技術r
新人営業のためのよくわかる仮想化技術r新人営業のためのよくわかる仮想化技術r
新人営業のためのよくわかる仮想化技術ryuki kashiwaba
 

La actualidad más candente (20)

今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしない
 
クラウドのようなVPS 「ConoHa」 を使ってみよう。
クラウドのようなVPS 「ConoHa」 を使ってみよう。クラウドのようなVPS 「ConoHa」 を使ってみよう。
クラウドのようなVPS 「ConoHa」 を使ってみよう。
 
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定
CSS text-spacingサポート等Vivliostyle.jsの進化と今後の開発予定
 
これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.com
 
MySQLの系譜について少々
MySQLの系譜について少々MySQLの系譜について少々
MySQLの系譜について少々
 
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migration
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodb
 
20130417 movbale type_seminar
20130417 movbale type_seminar20130417 movbale type_seminar
20130417 movbale type_seminar
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみた
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
 
Aozorahack20161106
Aozorahack20161106Aozorahack20161106
Aozorahack20161106
 
Sql world を支える技術
Sql world を支える技術Sql world を支える技術
Sql world を支える技術
 
aozorahack hackathon #1
aozorahack hackathon #1aozorahack hackathon #1
aozorahack hackathon #1
 
AWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストールAWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストール
 
JAWS-UG CLI #07 VPC
JAWS-UG CLI #07 VPCJAWS-UG CLI #07 VPC
JAWS-UG CLI #07 VPC
 
Scala web framework比較
Scala web framework比較Scala web framework比較
Scala web framework比較
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
新人営業のためのよくわかる仮想化技術r
新人営業のためのよくわかる仮想化技術r新人営業のためのよくわかる仮想化技術r
新人営業のためのよくわかる仮想化技術r
 

Similar a My sql casual12lt

オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情Meiji Kimura
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBMikiya Okuno
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpringオープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpringMeiji Kimura
 
いまいまMySQL@OSC2016長岡
いまいまMySQL@OSC2016長岡いまいまMySQL@OSC2016長岡
いまいまMySQL@OSC2016長岡sakaik
 
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~kishimotosc
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発infinite_loop
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座Mikiya Okuno
 
SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。yoyamasaki
 
Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発kishimotosc
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルMikiya Okuno
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMikiya Okuno
 
NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめGosuke Miyashita
 
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Ryota Watabe
 
MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMikiya Okuno
 

Similar a My sql casual12lt (20)

オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpringオープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
 
いまいまMySQL@OSC2016長岡
いまいまMySQL@OSC2016長岡いまいまMySQL@OSC2016長岡
いまいまMySQL@OSC2016長岡
 
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
 
Not only sql _ 新卒エンジニア勉強会20130417
Not only sql _ 新卒エンジニア勉強会20130417Not only sql _ 新卒エンジニア勉強会20130417
Not only sql _ 新卒エンジニア勉強会20130417
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。
 
Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
MySQL at Yahoo! JAPAN #dbts2018
MySQL at Yahoo! JAPAN #dbts2018MySQL at Yahoo! JAPAN #dbts2018
MySQL at Yahoo! JAPAN #dbts2018
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめ
 
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能
 
MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 

My sql casual12lt