最近更新したページ
2013-10-20
2013-09-29
2013-09-23
2012-01-07
2011-11-09
2011-10-23
2011-10-09
2011-10-01
2011-09-29
2011-09-03
2011-08-07
2011-08-02
2011-07-29
2011-07-10
2011-05-05
2011-05-04
2011-04-24
2011-04-13
2011-04-05
2011-03-26
2011-02-18
2011-02-15
2010-12-26
2010-12-07
2010-12-05
2010-11-23
2010-09-28
2010-09-23
2010-08-26
2010-08-22
2010-07-16
2010-01-17
2010-01-11
2009-10-04
2009-08-21
2009-08-13
2009-06-18
2009-06-01
2009-04-29
2009-02-16
2009-02-11
2009-02-03
2008-07-22
2008-07-21
2008-07-15
2008-07-14
2008-07-13
2008-07-12
2008-07-08
2008-07-05
2008-06-28
2008-06-17
2008-06-05
2008-06-02
2008-06-01
2008-05-29
2008-05-26
2008-05-21
2008-05-19
2008-05-18
2007-10-31
2007-10-27
2007-09-28
2007-09-23
2007-09-17
2007-09-16
2007-09-14
2007-09-11
2007-06-18
2007-04-15
2006-12-21
2006-11-30
2006-11-22
2006-08-17
2006-03-29
2006-03-28
2006-03-27

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 Field1,Field2 INTO Var1,Var2 FROM Table ;
      ※変数への代入???mdbでは動作しない???(不明)


▲上へ


重複する抽出レコードをまとめる::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 ;
        ※(=,>,<,>=,<=,なども指定可)
    • 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 ; '右外部結合


▲上へ


補足・予備知識のようなもの

1.*(全称記号)
2.表(名):テーブル(名)は通常同じ意味(マスタファイル)
3.レコード:1データの集合
4.フィールド:複数レコード中の特定列データ

※*(全称記号)を指定すると、全フィールドを個別に記述したのと同じく参照可能。
※参照するテーブルが1つなら、フィールド名のみ指定することができる。
※正式?には最後に";(セミコロン)"が入る?(Access mdb sqlは";"付きで表示。vb2005などでの記述は動作未確認)
※プログラムへSQL文を埋め込む場合の文字列指定:通常["文字列"(ダブルクォーテーション)]とするところ、['文字列'(シングルクォーテーション)とする場合が多い。(SQL文を文字列として指定する、または、文字列、変数の組み合わせとなり "(ダブルクォーテション)が競合するため)


▲上へ


データベース・SQL文・SQLクエリー(query)関連リンク


wiki内関連ページ



外部リンク

現在なし



▲上へ
2007年09月28日(金) 11:53:22 Modified by cafeboy1




スマートフォン版で見る