キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
SQL標準の確認方法
0
    SQL標準の確認方法

    とある事情によりしばしば参照するため自分用のまとめ。

    ■SQL標準そのもの
    古くはANSI, 最近はISOで行われているSQLの標準化。規格番号は以下になります。

    ISO/IEC 9075

    日本ではJISがX-3005として規格化しています。

    これらは正式なものには値段がついていて、書籍やpdfは購入する必要があります。

    英語版の正式なものの(安い)入手方法や、無料のものの参照方法は以下のエントリに詳しいです。

    Don't Tell Anyone: The SQL Standard is Public!

    英語版のWikipediaは結構参考になります。(たまに私も加筆しています。日本語版にも反映しなきゃなぁ。

    JIS版は翻訳などに時間がかかるため、最新の英語版には追随していません。少し遅れています。
    英語版の対応する規格のどの年度のものに対応するのかは、以下のページのそれぞれのpreviewで確認できます。

    JSA GROUP Webdesk>規格・書籍・物品>JIX X 3005

    それぞれWebからの閲覧のみ(印刷とダウンロード禁止)ならば、以下のページからx3005を検索すると確認できます。

    JIS検索

    簡易的にHTML化したものが見れるサイトもあるようです。

    ■SQL標準の解説本
     英語も日本語もSQL-99がほとんどでそのあとSQL標準の解説書はない状態です。

    日本語ではSQL-99についてスーパーテキストSQL:2003の一部解説がでたのみです。

    ■各RDBMSのマニュアル
     ほとんどのオンラインマニュアル(この記事の下のほうにリンク)は、一か所にまとめられて、通常使うコマンドのSQL準拠度についてはわかりにくくなっています。例えばMySQLでも、次のリンクのようになっています。

    1.7 MySQL の標準への準拠(MySQL 5.6 日本語マニュアル)
    1.8 MySQL Standards Compliance(MySQL 8.0 English Manual)

    わかりやすいものといえば、以下のPostgreSQLのマニュアルとSQL Anywhereのマニュアルです。各コマンドごとにSQL標準の準拠についての記述があります。

    PostgreSQL 11.x マニュアル(日本語)
    PostgreSQL 最新版マニュアル(英語)

    SQL Anywhere サーバー - SQLリファレンス(SQL Anywhere 17)
    SQL Anywhere サーバ SQLリファレンス(バージョン16)

    ■MimerのSQL構文チェッカーを使う[2020-01-17追記]
     Mimer Information Technology AB(Mimer AB)は組み込み用RDBMSであるMimer SQLを開発している会社。そのオリジナルは1970年代からウプサラ大学で開発されており、可能な限りSQL標準に準拠することをポリシーにしています。
     その会社がオンラインで以下のページを公開しており、これを利用することによりSQL-99にどの程度適合しているか、がわかります。適合してない場合でも、可能な限りSQL標準のどれかをお知らせしてくれます。

    SQL Validator -99(Mimer)

    例えば、MySQL 8.0.19でサポートされたTABLEステートメント「TABLE tbl1;」を上記バリデータに入力すると、以下のような出力結果がでます。

    Validated SQL: table tbl1;
    Validation result: The following feature outside Core SQL-99 is used:
    F661, "Simple tables"
    SQL queries stored anonymously for statistical purposes.

    これは、Core SQL-99外の機能が使われており、それはF661, "Simple tables"という機能であることがわかります。
    # SQLクエリは統計目的で、匿名で格納されることも明記されています。

    このF661をサポート・未サポートにかかわらず、詳細に記述されているマイクロソフトのドキュメントで検索「site://docs.microsoft.com F661」すると、以下のドキュメントで確認できます。

    2.1.2.90 F661, Simple tables

    <explicit table> ::=
    TABLE <table or query name>

    そして、まだSQL Serverでは未サポートということがわかります。

    Microsoft SQL Server 2008 R2 and Microsoft SQL Server 2012 vary as follows:
    Transact-SQL does not support this feature.

    JUGEMテーマ:コンピュータ



    | meijik | SQL | 21:23 | comments(0) | - | - | - |
    COUNT(DISTINCT expr)の概算値
    0
      COUNT自体は非常に負荷の高い処理です。(少なくともMySQLのMyISAMストレージエンジンのように件数をテーブルデータとして持っていない限りは)特に対象とする行数が莫大だったり、分散DBだったり、DISTINCTもあわせて指定されると、なかなかすぐには結果が返ってきません。

      そのため、最近のRDBMSやSQLのインターフェースを持つビッグデータ処理の実装では、COUNT(DISTINCT expr)について、正確な値を時間をかけて返す代わりに、概算値をはやく(負荷少なく)返す独自の関数を持つものが増えてきました。外部仕様としては次のものがあります。

      (1) 概算用の新しい集計関数を用意する
      (2) デフォルトがすでに概算で、厳密に計算する新しい集計関数を用意する

      さすがに従来のRDBMSで(2)を外部仕様とすると怒られるので、従来のRDBでは(1)が利用されます。
      順に説明します。

      (1) 概算用の新しい集計関数を用意する
       商用御三家(Oracle DB, SQL Server, IBM Db2)とOSS RDBMS御三家(MySQL, PostgreSQL, Firebird) + SQLiteの実装状況は以下のとおり。(比較用にいくつかクラウドのDWHに言及しています)

      (a) APPROX_COUNT_DISTINCT(expr)を利用する。
      Oracle 12c
      SQL Server 2019 (SQL Server以外のAzure SQL Databaseなどでサポートされていたものが使えるようになった)

      Oracleでは、これを含めて10個のAPPROX_%関数が12c以降に追加されました。

       APPROX_COUNT_DISTINCT(expr)は以下のクラウドDWHでも利用できます。
      Azure SQL Database,Azure Synapse
      Snowflake(これはHLL()集合関数の別名: HLLはHyperLogLogというアルゴリズムの名称)

      prestoでは、類似のAPPROX_DISTINCT(expr)が利用できます。
      これは以下の記事からも参照できます。

      クエリのパフォーマンス改善のための Tips

      (b) APPROXIMATEをつける
       PostgreSQL自体は該当機能はありませんが、
      フロントエンドがPostgreSQL 8.x互換であるAmazon Redshiftでは、以下のような表記ができます。

      APPROXIMATE COUNT(DISTINCT expr)

      これは先にとりあげたHyperLogLogのアルゴリズムを使うためdistinctがないcountには有効ではありません。

      結果としては冒頭であげた7つのRDBMSのうち、Oracle, SQL Server以外のRDBMSは概算用の新しい集計関数は利用できません。

      (2) デフォルトがすでに概算で、厳密に計算する新しい集計関数を用意する
       Google BigQueryでは、count(distinct expr)のデフォルト動作がすでに概算の値になります。
      これを避けて、正確なカウントを取得するためには、以下のどちらかを使います。

      ・EXACT_COUNT_DISTINCT(expr)
      ・exprをgroup byして、countする(EXACT_COUNT_DISTINCTがサポートされていないバージョンの場合)

      上記はレガシーSQLについてのものです。BigQueryは従来のSQLをレガシーSQL, 新たにSQL標準に寄せたものを標準SQLと呼んでいます。

      JUGEMテーマ:コンピュータ



      | meijik | SQL | 08:58 | comments(0) | trackbacks(0) | - | - |
      プログラマのためのSQL第四版読書会(12)11.時間型 (p.225)
      0
        読書会はゆるゆると続けていましたが、なかなかアウトプットができず。。。。
        とりあえず最新回から順にさかのぼってアウトプットします。。。

        プログラマのためのSQL 読書会(12) - connpass

        [Typo]
        (1) p.226
        ユリウス暦は4年につき1日の閏年をもっており、

        ユリウス暦は4年につき1日の閏日をもっており、
        (2) p.230
        ランダムに近いデータ作る簡便な方法ではある。

        ランダムに近いデータを作る簡便な方法ではある。
        (3) p.234
        11.3 INVERVAL型の冒頭
        「以下にこのデータ型のBNF定義を示す」の後のBNF定義がない。
        英語版にはある。
         ただ、その後のINTERVAL型は期間をあらわすデータ型だ〜の部分は原著4thにはなく、
        5thの冒頭部分なので、中途半端に間違えている原著をミックさんがつかまされて :)
        原著はしれっとなおしている可能性もあり。。。。

        [原著の??な点]
        p.227 「英語話者においては、年は4桁、月は3文字、日は2桁であらわすのがもっとも誤読誤記が少なくソートするときも便利だとい

        うことを発見した」ですが、月を3文字(例: 12月はDec)とすると、ソートには便利ではないのでは? という話がでた。確かに文字列
        としては月の3文字はソートすると1->2->3月というわけではないので。
         ただ、日付や日付時刻型だと三文字月は入出力のときだけで、内部では別に英字で格納されているわけではないので、特に問題とはならない気もしてきた。後で考えると。

        [用語]
        EDIFACT


        [人物]
        p.228の訳注とp.237
        アリゾナ大学のリチャード・T・スノッドグラス
        Richard Snodgrass

        アレサンドロ・メサ
        →Alejandro Mesa , Microsoft SQLサーバのMVPらしい。SQL Server関連からよく参照されている。

        [ドキュメント・書籍]
        p.237で紹介している二冊
        (1) Developing Time-Oriented Database Applications in SQL (Richard Snodgrass著, Morgan Kaufmann, 1999)
        (2) How to Design, Update and Query Temporal Data (Tom Johnston, Randall Weis著, Morgan Kaufmann, 2010)

        前者はpdfで公開されているので、まず読みたい。(2)は未読。また、アマゾンで検索してみるとTom Johnstonの別の著作と
        Dateの著作がヒットした。これらも購入して、時間がみつけて、読んでみたい。

        (3) Bitemporal Data: Theory and Practice (Tom Johnston著, Morgan Kaufmann, 2014)
        (4) Time and Relational Theory, Second Edition: Temporal Databases in the Relational Model and SQL (C.J. Date,‎ Hugh Darwen,‎ Nikos Lorentzos 著 Morgan Kaufmann 2014)

        [所感]
        暦の細かい説明や、Septemberの語源などは「へぇー」の連続でしたが、その部分は特にSQLには役立たなさそう。トリビア的な感じです。

        読書会の次回は年明け(2018年) 1/15 or 22の月曜日となりそうです。
        [2018-01-02 追記]
        2018-01-22(mon)となりました。ご参加お待ちしております。

        プログラマのためのSQL 読書会(13) 12.文字列型 (p.243)

        JUGEMテーマ:コンピュータ



        | meijik | SQL | 00:37 | comments(0) | trackbacks(0) | - | - |
          12345
        6789101112
        13141516171819
        20212223242526
        27282930   
        << September 2020 >>
        + RECOMMEND
        100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
        100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

        100人のうちの一人としてミックさんの本を推薦しています。
        + RECOMMEND
        MySQL 5.1 Plugin Development
        MySQL 5.1 Plugin Development (JUGEMレビュー »)
        Andrew Hutchings,Sergei Golubchik
        MySQL 5.1 のプラグインを作るならこれ!
        + RECOMMEND
        AWKを256倍使うための本 (Ascii 256倍)
        AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
        志村 拓,鷲北 賢,西村 克信
        ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
        + RECOMMEND
        Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
        Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
        松信 嘉範
        Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
        + RECOMMEND
        + RECOMMEND
        超・極める!MySQL
        超・極める!MySQL (JUGEMレビュー »)
        坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
        内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
        + RECOMMEND
        The Root of .NET Framework
        The Root of .NET Framework (JUGEMレビュー »)
        荒井 省三
        .NETの根っこをつかむ、か?
        + RECOMMEND
        エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
        エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
        奥野 幹也
        これまでにない構築、そして構築後のMySQLのための本。
        + RECOMMEND
        Database Management Systems
        Database Management Systems (JUGEMレビュー »)
        Raghu Ramakrishnan,Johannes Gehrke
        ミックさん連載の参考書籍です。
        + RECOMMEND
        Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
        Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
        W. Richard Stevens,Stephen A. Rago
        必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
        + RECOMMEND
        + RECOMMEND
        + RECOMMEND
        Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
        Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

        DELL SX260の換装用に購入。今はコチラのほうが安いですね。
        + RECOMMEND
        情熱プログラマー ソフトウェア開発者の幸せな生き方
        情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
        Chad Fowler
        OSC2010神戸に出展されたジュンク堂で買いました。
        + RECOMMEND
        Software Design 総集編 【2000~2009】(DVD付)
        Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

        メガトン級の過去記事。売り切れる前にお店に急げ!
        + RECOMMEND
        + RECOMMEND
        玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
        玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

        Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
        + RECOMMEND
        + RECOMMEND
        acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
        acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

        色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
        + RECOMMEND
        Firebird 徹底入門
        Firebird 徹底入門 (JUGEMレビュー »)
        木村 明治,はやし つとむ,坂井 恵
        Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
        + SELECTED ENTRIES
        + RECENT COMMENTS
        • MySQL ProとMySQL Expertを立ち読みする+α
          MEIJI KIMURA (09/14)
        • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
          meijik (11/20)
        • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
          meijik (07/27)
        • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
          meijik (03/03)
        • 2019年の木村明治
          田中尚 (01/08)
        • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
          noname (12/10)
        • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
          Moriaki_ (01/05)
        • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
          Moriaki_ (01/05)
        • 2015年版 InterBaseの歩み
          nakagami (12/06)
        • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
          meijik (11/22)
        + RECENT TRACKBACK
        + CATEGORIES
        + ARCHIVES
        + MOBILE
        qrcode
        + LINKS
        + PROFILE