Accessの削除クエリの、

「レコードの削除」と言う項目で
「where」, 「from」の二種類を選ぶことができますが、これは何ですか?

SQL文にも、whereとfromがありますが、関係あるのでしょうか? 単純な構造のSQL文であれば、多少は読み書きできるのですが、イマイチ関係がわかりません。

詳しい方、どうぞ、よろしくお願いいたします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/06/16 17:24:50
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rikuzai No.2

回答回数1366ベストアンサー獲得回数141

ポイント80pt

SQL文では、where句は条件指定、from句は参照テーブルの指定に使いますが、

ACCESSの削除クエリーの場合の違いは、

fromは全テーブルの指定にのみ使え、

(デザインビューでテーブルをマウントして、アスタリスクをドラッグすると出てくると思います)

whereはフィールドごとに設定できます。

これは、削除クエリがテーブルの全項目を対象としているために設定されている仕様かと。

http://www.accessclub.jp/sql/13.html

http://www.nbcom.co.jp/PC-Support/FAQ/acc/ht/acc062005ht001.shtm...


以上ご参考まで。

id:hina1981

ありがとうございます。

まとめると、


・削除したいレコードを条件で指定したい場合には、条件にしたいフィールドをデザイングリッドに追加して、そのフィールドをwhereに指定する。

・テーブルの全レコードを削除したい場合には、*をデザイングリッドに追加して、fromにする。

ってカンジなのですかね……???


確かに、*をデザイングリッドに追加したら自動的にfromになりました。

で、今、試してみたのですが、フィールドに対してfromや、*に対してwhereを設定することはできないのですね。

2007/06/11 16:36:44

その他の回答2件)

id:TONTON3 No.1

回答回数212ベストアンサー獲得回数4

ポイント20pt

Where は条件を設定します。Fromはテーブルを設定します。

レコードの削除でも実際はSQLが発行されています。

これは左上のSQLのボタンを押すと確認できます。

DELETE文というSQLになります。

http://sql.main.jp/cont/sql/de.html

id:hina1981

ありがとうございます。

アクションクエリにおいて、SQL文が投げられているというのは、なんとなく想像がついていました。


delete * from T_userdata where user_age>30


みたいなカンジですよね。

(細かい書き方は憶えてませんが……)

確かに、テーブルの前にfromが来て、レコードの条件の前にwhereが来るのは、なんとなく憶えています。

で、このことと、削除クエリの動作が私の中で結びつきません。

2007/06/11 16:14:22
id:rikuzai No.2

回答回数1366ベストアンサー獲得回数141ここでベストアンサー

ポイント80pt

SQL文では、where句は条件指定、from句は参照テーブルの指定に使いますが、

ACCESSの削除クエリーの場合の違いは、

fromは全テーブルの指定にのみ使え、

(デザインビューでテーブルをマウントして、アスタリスクをドラッグすると出てくると思います)

whereはフィールドごとに設定できます。

これは、削除クエリがテーブルの全項目を対象としているために設定されている仕様かと。

http://www.accessclub.jp/sql/13.html

http://www.nbcom.co.jp/PC-Support/FAQ/acc/ht/acc062005ht001.shtm...


以上ご参考まで。

id:hina1981

ありがとうございます。

まとめると、


・削除したいレコードを条件で指定したい場合には、条件にしたいフィールドをデザイングリッドに追加して、そのフィールドをwhereに指定する。

・テーブルの全レコードを削除したい場合には、*をデザイングリッドに追加して、fromにする。

ってカンジなのですかね……???


確かに、*をデザイングリッドに追加したら自動的にfromになりました。

で、今、試してみたのですが、フィールドに対してfromや、*に対してwhereを設定することはできないのですね。

2007/06/11 16:36:44
id:freemann No.3

回答回数335ベストアンサー獲得回数55

ポイント40pt

構文は

DELETE FROM テーブル名 WHERE 条件

と書けて、もしWHEREで条件を指定しないと

DELETE FROM テーブル名

になり、指定されたテーブルの全行が削除されます。

テーブルの一部のみ削除したいのであれば、WHEREで条件を指定します。

あまり難しく考える必要はないかと思います。考え方としては、

テーブル名から(FROM)条件のところを(WHERE)削除する(DELETE)。でよいかなと

id:hina1981

ありがとうございます。

条件を指定するための、where、条件を指定しないための、fromみたいなカンジですかね。


あんまり意味はないと思ってよさそうですね。

2007/06/13 18:33:34
  • id:rikuzai
    すいません、コメント内容に間違いがあったので訂正して再投稿します。

    >・テーブルの全レコードを削除したい場合には、
    >*をデザイングリッドに追加して、fromにする。

    ええと、厳密に言うと、
    削除クエリーのデザイングリッドにフィールドが一つでも追加されていれば、whereでも動いてしまいます。
    (単にアスタリスクでないとfromにできない、アスタリスクはwhereにできないだけで)
    なので、条件を入力していなければ、whereだけでも全削除となります。
  • id:hina1981
    コメントありがとうございます。

    ということは、* と from を使った設定方法は、なくても何とかなりそうなのですね。

    * と from を使った書き方は、「全レコードを削除するための削除クエリであること」をわかりやすくするための書き方、
    みたいなニュアンスなのでしょうか?

    または、SQLとの互換性を持たせるため……、みたいな項目なのでしょうか?
  • id:rikuzai
    互換性はもちろんあると思いますが、
    *とfromの活用の仕方としては、↑の回答ではっいてる二番目のサイトにあるような、
    重複クエリを作ってからそれを元に削除クエリを作るといった、
    複合クエリを作成する時に有効だと思います。
  • id:hina1981
    再度のコメントありがとうございます。

    重複クエリを元にした削除クエリなのですが、いまいちよくわかりません……。
    (せっかく紹介していただいたのに、申し訳ございません)

    ご紹介いただいたページの例は、商品Cdが0521で、商品Cdが重複しているレコードを削除している。という風に理解したのですが、これでいいのでしょうか?
    この場合に、from の * を追加している意味がよくわかりません。
    (似たようなDBを作って実験してみたのですが、from の * がなくても動きました)

    すみません、引き続きよろしくお願いいたします。
  • id:rikuzai
    すいません、私の書き方が悪かったですね。
    質問者さんのコメント
    http://q.hatena.ne.jp/1181543533#c91617
    の認識でいいと思います。
    その後の私のコメントは、こういう使い方をすることがありますよ、的なものだと思ってください。

    >この場合に、from の * を追加している意味がよくわかりません。
    確かにこの事例だとちょっと分かり辛かったですね。
    例えば、AテーブルでIDが重複しているものを調べて、
    BテーブルのIDフィールドとリンクし、
    Aテーブルで重複しているIDでBテーブルに存在するIDのデータを削除するといったときに、
    BテーブルのfromとAテーブルのwhereといった使い方をするということです。
  • id:hina1981
    ありがとうございます。

    条件設定に使うテーブルとレコードを削除したいテーブルが異なる場合の例ですね。
    実際に作って理解します。

    期限が近いので、ここで回答の締め切らせていただきます。

    ご回答いただいた方、ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません