評価:
![]() 朝井 淳 技術評論社 ¥ 2,138 (2017-02-18) コメント:細部は甘いが、手元に置いて便利。ですが「脇の甘さ」が広がった分☆ひとつ減 |
★★★☆☆ 細部は甘いが、手元に置いて便利。ですが「脇の甘さ」が広がった分★ひとつ減(Amazon)
Amazonのレビューではリンクとか張れないので(多分)ここでいくつか補足を。。。。
1.MySQL 5.6でサポートされたでマイクロ秒表記がない(TIME, DATETIME, TIMESTAMP)
MySQL 5.6.4 以降では、マイクロ秒 (6 桁) までの精度を持つ TIME、DATETIME、および TIMESTAMP 値の小数秒に対応できるようになりました。
2.MySQl 5.6で非推奨、5.7で取り除かれたyear(2)の記述が三版のまま残っている
11.3.4 YEAR(2) の制限と YEAR(4) への移行
3.PostgreSQL 9.2/MySQL 5.7でサポートされたjson型の記述なし。関連する関数も当然記載なし。。。。
利用頻度とこれからの新規開発を考えるとXML関連の記述をばっさりなくして、JSON型の記述にしてもいいのではないかと思います。
PostgreSQL JSON型についての使い勝手とパフォーマンス、時々ハマりどころの調査(Qiita)
MySQL 5.7のJSON機能を試してみる(MySQL Server Blogより)
4.ビューの説明(小ネタ)
「ビューはそれだけで完結しているオブジェクトなので、パラメータ値によって制御するといったことはできません。
このような場合には、ストア゛ードプロシージャを作成することをお勧めします。」とのことですが、
Accessだと、パラメータクエリをすすめる必要があるのでは?
5.「1.7 ストアードプロシジャ」
Access 2010から利用可能になった、の記述があってもいいんじゃないかと。。。
6.「1.8 トリガー」
× Accessを除くデータベースで、トリガーを利用できます。
○ 古いAccess(2010より前のバージョン)を除くデータベースで、トリガーを利用できます。
7.COLUMN ROWNUMによる行制限
「12c以前のOracleでは、SELECTにTOPやLIMITを指定することはできませんが、」
12c以前というよりは、12cより前は行制限(Oracle 12cでOFFSET句とFETCH句がサポート)を簡単に実現する機能がなかったことを
いいたい用ですが、TOPはMS SQL Serverですし、LIMITはMySQLのことなので、なんかピンボケな印象です。
なのでよりよい表記はいかになると思います。
「12cより前のOracleでは、SELECTに行制限の記述(OFFSET句やFETCH句)を指定することはできませんが、」
8. WITH句
SQLiteは3.8.3からサポートしているのに未サポート扱い。。。。
9. WITH再帰クエリー
SQLiteは3.8.3からさポートしているのに未サポート扱い。。。。
basic recursive query on sqlite3?(stack overflow)
10. WITH再帰クエリーでRECURSIVE指定できるはPostgreSQLだけ(?!)
んなわけない。
×「PostgreSQLの場合、再帰クエリーを実行する際には、WITHの後にRECURSIVEキーワードを指定する必要があります。他のデータベースではRECURSIVEを指定するとエラーになります。」
そもそもSQL標準で定めた表記WITH RECURSIVEでRECURSIVEを指定するとエラーになるわけがない。
これは、PostgreSQLではRECURSIVEを表記しないとエラーになるが、他のデータベースでは省略してもエラーにならないことの記述があり、それを読み間違えたと類推します。
Hierarchical and recursive queries in SQL(wikipedia)
○「PostgreSQLの場合、再帰クエリーを実行する際には、WITHの後のRECURSIVEキーワードは省略できません。他のデータベースではRECURSIVEを省略できます。」
11. LIMIT句
IBM DB2 9.7 Fix Pack 2から、対応しています。(DB2_COMPATIBILITY_VECTORに定数"MYS"を設定する必要があり)
DB2にMySQL/PostgreSQL互換のLIMIT/OFFSET句が追加(Unofficial DB2 BLOG)
とりあえず、ここまで。Access関連は後日補足するかも(なんといっても離れてから久しい。。。)
JUGEMテーマ:コンピュータ