User Guide for DARTS Astrophysical Data Search

[ 英語 | 日本語 ]


SQL Search, ADQL Search の使い方

SQL Search および ADQL Search においては、SQL文を直接入力することで、条件を自由に設定しての検索が可能です。 データベース化されているデータ項目を自由に用いての、独自の検索条件の組み立てや、複数項目での並べ替えなども可能です。


SQL / ADQL の基本構文

統合検索システムにおいては、RDBMS として PostgreSQL を、 またその拡張機能として PgSphere を採用しており、 それらに固有の関数等も用いることが出来ます。

ADQL の規格は IVOA Recommendation に定義されています。 標準SQL規格の SQL92 をベースに整備された拡張機能で、即ち標準SQLにはない機能が加えられているため、 ADQL Searchにおいては、入力された ADQL 文を、 PgSphere を備えた PostgreSQL が解釈できる SQL に変換し、データベースへ問合せを行います。

ここでは SQLADQL の もっとも基本的な構文について簡単に説明します。 以下に示す構文の中で、 {選択肢1|選択肢2} は指定すべき値(記号や数値、データ項目名など)や、 指定方式(カンマ区切りで列記するなど)の選択肢を表します。 [ 句 ] は省略可能な句であることを表します。

SQL powerd by PostgreSQL の場合: SELECT {*|column1,column2 column3,...} FROM table_name [ WHERE conditions ] [ ORDER BY column1, column4, ... ] [ LIMIT {number|ALL} [ OFFSET number ] ;
ADQL の場合: SELECT TOP number {*|column1,column2,column3,...} FROM table_name [ WHERE conditions ] [ ORDER BY column1, column4, ... ] ;
SELECT
FROM句に指定するテーブルに含まれるデータ項目のうち、 検索結果として入手したいものをカンマ区切りで列記します。必須項目です。 FROM句に指定するテーブルに含まれるデータ項目の全てが必要な場合には、 アスタリスク「*」で代用できます。 各テーブルのデータ項目については、以下のテーブル構成を参照してください。
FROM
検索対象とするテーブル名を指定します。必須項目です。
WHERE
検索条件を指定します。複数の検索条件を組み合わせて検索したい場合には、 AND または OR で結合します。 ANDOR より優先するので、 OR を優先させたい場合には括弧「( )」でくくります。
ORDER BY
検索結果の並び順の基準とするデータ項目を指定します。 項目名の後に ASC とつけるとその項目の昇順に、 DESC とつけるとそのデータ項目の降順に並べられます。 デフォルトは昇順なので、ASC は省略可能です。 また複数のデータ項目をカンマ , 区切りで指定すると、 先に指定した項目で並べた中で同位のものがあった場合に次に指定したデータ項目の順に並べられます。
LIMIT句 / TOP
検索結果として取得したい件数の上限(および取得開始位置)を指定できます。任意項目ですが、意図せず大量のデータが検索にヒットした場合にブラウザの応答速度が著しく低下することがありますので、適度な上限件数を指定されることをお勧めいたします。

この仕様は標準SQL規格では明確に定められていないため、データベースシステムのベンダーによって実装が異なっており、 PostgreSQL では LIMIT句を用いる書き方が実装されています。 一方、標準SQL規格SQL92 をベースに拡張整備された ADQL では TOP句が定義されています。
統合検索システムにおいては、それぞれの仕様・規格に基づき、 SQL Search では LIMIT句を、 ADQL Search では TOP句を用いることとしています。

SQL Search における構文は下記の通りです。

  • LIMIT {number|ALL} [ OFFSET {number} ]

OFFSET には、行を返し始める前に飛ばす行数を指定します。 OFFSET 0 は、OFFSET句を省略した場合と同じです。 すなわちOFFSET句を省略して LIMIT句のみ指定した場合には、 検索結果の 1 件目から LIMIT句で指定した件数までを返します。 OFFSET および LIMIT の両者が指定された場合には、 OFFSET 分の行を飛ばしてから、返される LIMIT 行を数え始めます。

ADQL Search における構文は下記の通りです。

  • TOP number

検索結果の 1 件目から TOP句で指定した件数までを返します。

終端文字 ;
SQL 文の終端として認識されます。必須項目ですが、統合検索システムにおいては省略可能です。 また統合検索システムにおいては、入力の途中に終端文字 ; を挿入して 複数の SQL 文を一度に実行することを許可していません。ひとつの SQL 文のみを入力・実行してください。

なお、DARTS/AKARI CAS ページに SQL tutorialSQL general reference など SQL に関する基本的な構文、関数等の解説が掲載されていますので、合わせてご活用ください。

このページの先頭へ ⏏


SQL / ADQL の例文および解説の表示

典型的な検索条件や天文学においてよく用いられる検索条件については、 SQLADQL の例文を用意してあります。 "Call example" の各ボタンを押すと、 "SQL Query" や "ADQL Query" の入力欄に例文が、 またその解説が入力欄の下に表示されます。 これを基に、検索したいテーブルや検索条件等を編集することができます。

ここにも簡単に解説を記載します。

検索カテゴリ 実現方法・SQL例
Ranges Search 値の比較による検索には、以下のような演算子を使用できます。
  • a = b ... a と b が等しい
  • a != b ... a と b が等しくない
  • a > b ... a が b より大きい
  • a < b ... a が b より小さい
  • a >= b ... a が b 以上である
  • a <= b ... a が b 以下である
And, Or 複数の条件を組み合わせて検索したい場合には、条件同士を AND または OR でつなげます。
  • a AND b : 条件a かつ 条件b
  • a OR b : 条件a または 条件b
ANDOR よりも優先するので、 OR を優先したい場合には括弧「()」でくくります。
Mutiple match 複数値のうちいずれかと一致する(いずれにも一致しない)データを検索する場合には、 IN句を利用すると便利です。 構文は以下のようになります。
  • column_x IN (a, b) : データ項目 column_x が値aまたは値bである
  • column_x NOT IN (a, b) : データ項目column_x が値aでも値bでもない
上記はそれぞれ、=OR、 または !=AND を用いて次のように書くことと同じ意味になります。
  • column_x = a OR column_x = b : データ項目 column_x が値aである、または、データ項目 column_x が値bである
  • column_x != a AND column_x != b :データ項目 column_x が値aでない、かつ、データ項目 column_x が値bでない
Pattern match パターンマッチングを行うには、LIKE演算子を用います。
  • LIKE column_x = 'a%' : データ項目 column_x が 値aで始まる文字列
  • LIKE column_x = 'a_' : データ項目 column_x が「値a + 任意の1文字」のパターンに一致する文字列
ワイルドカードとして以下のものを利用できます。
  • % ... 任意の数の任意の文字
  • _ ... 任意の文字 1 つ
例えば「10%」と入力すれば「10 で始まる」データを検索することができ、 「M__」と入力すれば M31 など「M の後に任意の2文字が続く」データを検索することができます。

'%' や '_' を ワイルドカードとしてではなく通常の文字として扱いたい場合には、 記号の前にエスケープ文字としてバックスラッシュ「\」を前に付加して下さい。
e.g. '10\%', 'STAR\_A'

Radial Search

円形検索を行うには、PgSphere の機能を用いると便利です。 データ型には以下のようなものがあります。

  • 点 ... spoint(coordinateL, coordinateB)
  • 線 ... spath(spoint(), spoint(), ...)
  • 円 ... scircle(spoint(), radius)
  • 矩形 ... spoly(spoint(), spoint(), ...)
演算子には以下のようなものがあります。
  • a @ b = '1' ... a は b に含まれている
  • a !@ b = '1' ... a は b に含まれていない
  • a && b = '1' ... a と b は互いに重なっている
  • a !&& b = '1' ... a と b 互いに重なっていない
また各種座標系の値で指定したい場合には、データベースに格納されている各座標系での座標値を検索条件の対象として使用してください。 例えば、銀河中心あたりの検索を行いたい場合、カラム名の末尾に「_galactic_lon」「_galactic_lat」とついている 銀河座標系での座標値を用いるとより簡単です。

ADQL Search においても同様の機能があります。 データ型には以下のようなものがあります。

  • 点 ... POINT('',coordinateL, coordinateB)
  • 円 ... CIRCLE(POINT(), radius)
  • 矩形 ... POLYGON(POINT(), POINT(), ...)
演算子には以下のようなものがあります。
  • CONTAINS(a, b) = 1 ... a は b に含まれている
  • CONTAINS(a, b) = 0 ... a は b に含まれていない
  • INTERSECTS(a,b) = 1 ... a と b は互いに重なっている
  • INTERSECTS(a, b) = 0 ... a と b 互いに重なっていない

Multipul Radial Search 複数の天体についてのデータを一気に検索したい場合は、例えば 複数の円形検索条件を OR でつなげ、 複数の円形領域のいずれかに含まれるデータを検索する方法があります。
逆に複数の円形領域のいずれにも含まれるデータに絞込みたい時には、 各円形検索条件を AND でつなげます。
Rectanglar Search

観測中心点などのある1点が指定する矩形領域に含まれるデータを検索するには、 経度、緯度のそれぞれについて値の範囲を指定するのが簡単です。
値の範囲を指定するには、 >, <, >=, <= などの比較演算子を利用します。

  • column_x >= a AND column_x <= b :データ項目 column_x が 値a以上、かつ値b以下である
  • column_x < a OR column_x > b :データ項目 column_x が 値aより小さいか、あるいは値bより大きい
上記は BETWEEN構文を用いて以下のように書くこともできます。
  • column_x BTWEEN a AND b : データ項目 column_x が 値aから値bの間に含まれる(値a、値bも含む)
  • column_x NOT BTWEEN a AND b : データ項目 column_x が 値aから値bの間に含まれない
ただし BETWEEN構文を用いる場合には、 境界の値が含まれるか否か(「~以上」と「~より大きい」、「~以下」と「~未満」の違い)に注意してください。

観測視野などの領域が指定する矩形領域と重なっているものを検索するには、Radial Search(円形検索)と同様に、 PgSphere の機能を用いると便利です。 上述の Radial Search の項を参照してください。

このページの先頭へ ⏏


検索結果表示のカスタマイズ

SQL Search, ADQL Searchにおける検索結果は、HTML 形式もしくはCSV形式のいずれかで出力することができます。"Format" にて html または csv のいずれかを指定してください。

このページの先頭へ ⏏


使用したSQLの表示

リンク "Show the used SQL" をクリックすると、システム内部で実行したSQL文がポップアップで表示されます。この SQL 文をコピーして SQL Search の入力欄 "SQL query" に貼り付ければ、ソート条件を変えるなどアレンジを加えて検索、出力することができます。

このページの先頭へ ⏏


データの一括ダウンロード

リンク "Download Wgetscript" をクリックすると、Wget スクリプトをダウンロードできます。このスクリプトを自分のマシン上で実行すれば、検索にヒットしたデータを一括でダウンロードすることが出来ます。

このページの先頭へ ⏏

Last Modified: 19 November 2018