SQL文:SELECTステートメント
メモ
- 2007/9/28
- vb2005からSQLコマンドを指定し、like を使用した曖昧検索をする場合、'*'(任意の文字列:アスタリスク)は'%'(通常のSQLワイルドカード)を指定しないと動かないので注意。'?'(任意の1文字)の指定は、'_'(アンダーバー)であるが、こちらは動作未確認。
- 2007/9/28
- access へ登録したクエリを何とか使えないか…(手抜きしたいので…)いろいろ考えるが、うまくいかない。vb2005でのmdb操作については、高度な経験と知識(dataset,datatable,tableadapterなどその他)を熟知してないと結構やっかいもののようである。また、vbでのmdb使用は、通常datatableへ全データを読み込むため大きなデータ(10万件超えるとか…)を割り当てると動かない(メモリ不足かな?)といった現象もでるようである。
- 2007/9/28
- dataset(非接触型?非接続型?)での利用のほか、datareader(接触型?接続型?)を使うといった別の方法もあるようである。(読出しについて制限はあるとのこと。現在確認中なので詳細不明。)
SELECTステートメント FROM句
SQL文:SELECTステートメントの基本形
SELECTステートメントは、テーブル(表)から、レコードを抽出・検索することが出来ます。
SELECT [*(全称記号)]/[Table.Field1],[Table.Field2], … FROM [Table] ;
▲上へ
抽出・検索条件の指定::WHERE句/WHERE BETWEEN AND
1)WHERE句:条件に一致するレコードを抽出・検索する
SELECT [*/Field,…] INTO [代入変数] FROM [Table] WHERE [Field] = ["文字列"/値] ;
- WHERE句:抽出条件の指定
- Field = ["文字列"/値];
- Field1=["文字列"/値] Or (Field2=["文字列"/値] And Field3=["文字列"/値]) ;
- Field NOT "東京都" ;(または、<> "東京都" ;)
- Field IN (["文字列"/値],…) ;
- Field LIKE ["??文字列の一部##*"] ;
- Field LIKE "[ア-オ]*" ;(あ行で始まる抽出条件)
- Field IS NULL ;(Null値(値が入力されていないか不明のデータ)を持つレコードを抽出)
- Field = "" ;(長さが0の文字列""、を抽出)
- 条件例1:(¥6000円以上なら…など)
Where Price >= 6000 ;
- 条件例2:(性別が女性なら…など)
Where 性別 = "女性" ;
- 条件例3:(6000円以上購入した女性を抽出(And/Or複合条件))
Where (性別 = "女性") And (購入金額 > 6000) ;
- 条件例4:("北海道"、"九州"、"沖縄" 何れかの[出身地]の人を抽出する)
Where 番号 IN ("北海道","九州","沖縄") ;
- 条件例5:(苗字が"佐藤"さんで、名前に"子"が付く人を抽出)
Where 名前 LIKE "佐藤*子" ;
▲上へ
2)WHERE BETWEEN AND:抽出・検索範囲の指定
SELECT [*/Field,…] FROM [Table] WHERE [Field1] BETWEEN [値1] AND [値2]
- WHERE句:抽出範囲の指定
- Field Between 値1 And 値2 ;
- 条件例:(2007年現在20歳代の人を抽出する)
Where 誕生日 Between #1987/01/01# And #1978/12/31# ;
▲上へ
抽出結果の並べ替え::ORDER BY Field ASC/DESC
SELECT [*/Field,…] FROM [Table] WHERE [Field1] BETWEEN [値1] AND [値2] ORDER BY [Field1ASC/DESC,Field2ASC/DESC,…] ;
- ORDER BY句:並べ替えの指定
- Field1/DESC ;
- Field3DESC,Field2ASC,Field1DESC ;
- 並替昇順(Sort Ascending):(誕生日で昇順に並べ替え)
Order by [誕生日/誕生日ASC] ;
- 並替降順(Sort Descending):(誕生日で降順に並べ替え)
Order by 誕生日DESC
- 抽出条件/並び替え例:(T_商品販売実績(9月)から、化粧品を抽出し細分類(中分類)で昇順、売上金額で降順にする)
Where 大分類 = "化粧品" Order By 中分類ASC, 売上金額DESC ;
▲上へ
新規テーブル作成::SELECT INTOステートメント
- SELECT INTOステートメント:新規テーブル作成/変数への代入
- SELECT Field1,Field2 INTO NewTable FROM OrgTable ;
※新規テーブル作成- SELECT * INTO NewTable IN "C:\Temp.mdb" FROM OrgTable ;
※外部mdbへ新規テーブルを作成する場合(出力先Temp.mdbは既に存在する必要がある?と思う…)
- SELECT * INTO NewTable IN "C:\Temp.mdb" FROM OrgTable ;
- SELECT Field1,Field2 INTO Var1,Var2 FROM Table ;
※変数への代入???mdbでは動作しない???(不明)
- SELECT Field1,Field2 INTO NewTable FROM OrgTable ;
▲上へ
重複する抽出レコードをまとめる::SELECT DISTINCTキーワード
SELECT DISTINCT [*/Field,…] FROM [Table] ;※DISTINCTキーワードを付加すると、抽出フィールドのすべて(抽出レコード)が重複する場合、重複レコードを纏めて(1行として)出力します。逆に、DISTINCTがない場合、重複レコードの有無に関わらずそのまま出力(抽出)します。
▲上へ
内部結合/外部結合::FROM句 INNER/LEFT/RIGHT JOIN
- FROM句 INNER/LEFT/RIGHT JOIN:内部結合/外部結合
- INNER JOIN:2つのテーブルを内部結合する
※例:取引先テーブル(TOR-M)と売掛残高テーブル(ZAN-M)など通常1対1で対応する分割されたテーブルを1つのレコードとして利用する場合などに使用。- FROM TOR-M INNER JOIN ZAN-M ON TOR-M.TORCD = ZAN-M.TORCD ;
※(=,>,<,>=,<=,なども指定可)
- FROM TOR-M INNER JOIN ZAN-M ON TOR-M.TORCD = ZAN-M.TORCD ;
- LEFT/RIGHT JOIN:左外部結合/右外部結合
- FROM TOR-M LEFT JOIN ZAN-M ON TOR-M.TORCD = ZAN-M.TORCD ; '左内部結合
- FROM TOR-M RIGHT JOIN ZAN-M ON TOR-M.TORCD = ZAN-M.TORCD ; '右外部結合
- INNER JOIN:2つのテーブルを内部結合する
▲上へ
補足・予備知識のようなもの
1.*(全称記号)2.表(名):テーブル(名)は通常同じ意味(マスタファイル)
3.レコード:1データの集合
4.フィールド:複数レコード中の特定列データ
※*(全称記号)を指定すると、全フィールドを個別に記述したのと同じく参照可能。
※参照するテーブルが1つなら、フィールド名のみ指定することができる。
※正式?には最後に";(セミコロン)"が入る?(Access mdb sqlは";"付きで表示。vb2005などでの記述は動作未確認)
※プログラムへSQL文を埋め込む場合の文字列指定:通常["文字列"(ダブルクォーテーション)]とするところ、['文字列'(シングルクォーテーション)とする場合が多い。(SQL文を文字列として指定する、または、文字列、変数の組み合わせとなり "(ダブルクォーテション)が競合するため)
▲上へ
データベース・SQL文・SQLクエリー(query)関連リンク
wiki内関連ページ
- SQL文:SQLステートメント
- SQLステートメント
- SQLクエリー
- SQL文:ユニオンクエリー
- SQL文:パススルークエリー?
- SQL文:データ定義クエリー
- SQL文:サブクエリー?
- VB2005リファレンス(覚え書き)
外部リンク
現在なし
▲上へ
2007年09月28日(金) 11:53:22 Modified by cafeboy1