データの選択
SQLSelectはデータベースのデータを選択して返す.これは,「生SQLを使ったデータの選択」に記載のように,SQLコマンドをそのまま使ってもできる.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように"DatabaseLink`DatabaseExamples`"パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない..
| SQLSelect[conn,table,opts] | 表のすべてのデータを選択する |
| SQLSelect[conn,{tables},{columns}] | 表の特定の列のデータを選択する |
| SQLSelect[conn,{tables},{columns},condition,opts] | |
| 条件を満たす表の特定の列のデータを選択する | |
DatabaseLink をロードし,publisherデータベースに接続する.
Needs["DatabaseLink`"];
conn = OpenSQLConnection["publisher"];SQLSelect[conn, "ROYSCHED"]SQLSelectの第3パラメータは,特定の列のみを選択したいときに使用できる.次の例では列TITLE_IDとROYALTYだけを選択する.
data = SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}]データベース操作の結果はそのままWolfram言語で使える.
Histogram[data[[All, -1]]]SQLSelectには数々のオプションが使える.
オプション名
|
デフォルト値
| |
| "Distinct" | False | 重複しない結果だけを返すかどうかの設定 |
| "FetchSize" | Automatic | JDBCドライバへの結果セットの大きさの提示 |
| "GetAsStrings" | False | 結果を文字列として返すかどうかの設定 |
| "MaxFieldSize" | Automatic | 可変長の列のタイプのバイト制限 |
| "MaxRows" | Automatic | 返される最大行数を設定する |
| "ShowColumnHeadings" | False | 結果とともに列見出しを返すかどうかの設定 |
| "SortingColumns" | None | データのソート方法 |
| "ColumnSymbols" | None | 結果と関連付けるシンボル |
| "Timeout" | $SQLTimeout | クエリのタイムアウトを設定する |
SQLSelectのオプション
複数の表の複数の列からデータを選択することもできる.複数の表は,第2引数で表の名前のリストを指定すると選べる.列名のリストは前述のように第3パラメータで指定する.表の名前と列名をペアでリストにして第3引数で指定することで,特定の表の名前と列の名前を関連付けることもできる.これは複数の表で同じ列名が使われているときに重要である.次は2つの表のデータを組み合せて外積を求める例であるが,最初の5つの結果のみを表示させるためにオプション"MaxRows"を使う.
SQLSelect[conn, {"TITLES", "ROYSCHED"}, {{"TITLES", "TITLE"}, {"TITLES", "TITLE_ID"}, {"ROYSCHED", "TITLE_ID"}, {"ROYSCHED", "ROYALTY"}}, "MaxRows" -> 5, "ShowColumnHeadings" -> True]//TableForm次の例でも同じクエリを繰り返すが,2つの表のTITLE_IDが同じでなければならないという条件を加える.条件を使うと検索結果を絞り込むことができ,便利である.
SQLSelect[conn, {"TITLES", "ROYSCHED"}, {{"TITLES", "TITLE"}, {"TITLES", "TITLE_ID"}, {"ROYSCHED", "TITLE_ID"}, {"ROYSCHED", "ROYALTY"}}, SQLColumn[{"TITLES", "TITLE_ID"}] == SQLColumn[{"ROYSCHED", "TITLE_ID"}], "MaxRows" -> 5, "ShowColumnHeadings" -> True]//TableFormSQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, .10 < SQLColumn["ROYALTY"] < .15]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, .13 > SQLColumn["ROYALTY"] > .10]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] == .12]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] != .12]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] > .12]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] < .12]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] >= .12]列の値が特定のパターンに合致しなければならないことを指定することもできる.0文字以上のマッチングのためにはメタ文字「%」,1文字用にはメタ文字「_」を使う.
SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLStringMatchQ[SQLColumn["TITLE_ID"], "C%"]]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLStringMatchQ[SQLColumn["TITLE_ID"], "_S%"]]列の値がリストの一部として含まれていなければならないことを指定する.
SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLMemberQ[{.14, .16}, SQLColumn["ROYALTY"]]]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] <= .12]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "LORANGE", "ROYALTY"}, SQLColumn["ROYALTY"] == .12 && SQLColumn["LORANGE"] > 1000]SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] == .12 || SQLColumn["ROYALTY"] == .14]オプション"GetAsStrings"を使うと,データをWolfram言語型に変換しないで取り出すことができる.次の式はデータを変換せずに前と同じクエリを実行する.
SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, SQLColumn["ROYALTY"] == .12 || SQLColumn["ROYALTY"] == .14, "GetAsStrings" -> True]//InputFormオプション"SortingColumns"を使ってデータをどのようにソートするかを指定することもできる.このオプションは規則のリストを取る.規則の左辺で列を指定し,右辺で増加列,減少列のどちらでソートするのかを指定する.リストの最初の項目は,補助的な項目に優先する.
data = SQLSelect[conn, "ROYSCHED", {"TITLE_ID", "ROYALTY"}, "SortingColumns" -> {SQLColumn["ROYALTY"] -> "Ascending", SQLColumn["TITLE_ID"] -> "Ascending"}]ListLinePlot[Last /@ data]オプション"Timeout"を使うと,実行に時間がかかりすぎるクエリをキャンセルすることができる.
CloseSQLConnection[conn];Wolfram言語式がデータベースに保管されている型にどのようにマップされるかについては「データ型マッピング」に詳しく記載されている.