• 締切済み

Accessの区切り文字!と.の違い

SELECT テーブル名.項目1 ,テーブル名.項目2 ,[テーブル名]![項目3]+[テーブル名]![項目4] as 項目名 from テーブル名 みたいなSQLがあります。 テーブル名と項目名をセパレートする記号として!を使っているところがありますが、何か意味ありますか? そもそもSQLの構文である.を使えるのなら、SQLの構文ではない!を使う意味ってあるのでしょうか?

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

クエリデザインで、〈クエリ1〉と〈クエリ2〉をコピペして確認しました 補足頂いた通り〈;〉も〈.〉も有効ですね また文字列の結合も〈&〉〈+〉共に有効ですね クエリデザインで右クリックからSQLビューを確認すると〈.〉になります 大変お手間をとらせました。恐縮です。

webuser
質問者

お礼

ありがとうございます。 セミコロンではなく!イクスクラメーションマークです。 また、くどうようですが、文字列結合の話は一切していません。 ただの数値の足し算です。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

昔Access97のころ区切記号が「!」だったと思います。その名残が残っているのではないでしょうか。 検索してこれくらいしか見つかりませんでしたが、一応 Access97 VBAの森>クラスモジュール http://www.mahoutsukaino.com/ac/ac97/vba/a_vba11.htm

webuser
質問者

お礼

ありがとうございます。 > 検索してこれくらいしか見つかりませんでした 検索してみつからないから、誰か説明できる人がいないかと思って、ここに書き込みした次第です。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

>話は連結演算子の事ではなく.と!のお話です。 ★項目1の接続詞のような物でテーブル名の中の項目1と解釈します  ! ではなく . を使います >項目3,項目4の属性は数字だとしてください。 ★項目3を数量、項目4を単価と仮定すると数量×単価=金額を  クエリでは金額:数量*単価 SQL文では数量*単価 AS 金額と記述します  また、テーブルのデザインビューで住所入力支援システムを利用すると  項目を郵便番号、都道府県名、市区町村、末尾(番地等)の  4項目に定義し  宛名書き等に住所;[郵便番号]&" "&[都道府県名]&[市区町村]&[末尾]  SQL文では[郵便番号]&" "&[都道府県名]&[市区町村]&[末尾]AS 住所と文字列の結合 >標準のSql言語には存在しない!の役割は何ですか? ★別のフォーム(仮にこのフォームを〈メニュー〉とします  =Forms!メニュー![日付]  添付図をご覧ください 住所:[郵便番号] & " " & [都道府県] & [市区町村] & [末尾]

webuser
質問者

お礼

ありがとうございます。 質問の仕方が悪かったのかもしれません。 話を整理します。 ========== 前提例 ========== ■テーブル定義 フィールド1 長いテキスト フィールド2 長いテキスト フィールド3 数値型 フィールド4 数値型 ■項目の値 フィールド1 フィールド2 フィールド3 フィールド4 1 2 3 4 A B 1 2 ■クエリ1 SELECT [テーブル1].[フィールド1] , [テーブル1].[フィールド2] , [テーブル1]![フィールド3] + [テーブル1]![フィールド4] AS フィールド3と4の和 FROM テーブル1; ■クエリ2 SELECT [テーブル1].[フィールド1] , [テーブル1].[フィールド2] , [テーブル1].[フィールド3] + [テーブル1].[フィールド4] AS フィールド3と4の和 FROM テーブル1; ■クエリの結果(共通) フィールド1 フィールド2 フィールド3と4の和 1 2 7 A B 3 ========== 質問 ========== 上記、クエリ1とクエリ2は同じ結果を返します。 クエリ1では、テーブル名とフィールド名を!で区切っていますが、それには何の意味がありますか?

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.1

>SELECT テーブル名.項目1,テーブル名.項目2,[テーブル名]![項目3]+[テーブル名]![項目4] as 項目名  from テーブル名 ★このSQL文を実行するとエラーになりますね  正しくは以下です ----------------------------------------------------------------------- SELECT [テーブル名].項目1, [テーブル名].項目2, [テーブル名].項目3, [テーブル名].項目4, [項目3] & [項目4] AS 項目名 FROM テーブル名; ここで、〈テーブル名.〉はFROM テーブル名と重複しますので除去します ---------------------------------------------------------------------------- SELECT 項目1, 項目2, 項目3, 項目4, [項目3] & [項目4] AS 項目名 FROM テーブル名; ---------------------------------------------------------------------------------------------------- >テーブル名と項目名をセパレートする記号として!を使っているところがありますが、何か意味ありますか? ★ここでは、!は使えません . を使います >[テーブル名]![項目3]+[テーブル名]![項目4] as 項目名 ★[項目3]と[項目4]がともに数値の時だけ有効です  文字列の結合なら&を使い[項目3]&[項目4] as 項目名とします

webuser
質問者

お礼

ありがとうございます。 話は連結演算子の事ではなく.と!のお話です。 項目3,項目4の属性は数字だとしてください。 標準のSql言語には存在しない!の役割は何ですか? .と同じですか? .と同じなら何のために実装されているのですか?

関連するQ&A

  • ACCESSでテーブルのMAX値(文字列を除く)をやりたい

    ACCESS2000で1テーブル内の項目のMAX値を取りたいのですが、数値ではないのは除外したいです。 どのようにSQLを組んだらいいのでしょうか。 ex) テーブル名:a フィールド名:ID(string型) +--+ |01| +--+ | 2| +--+ |03| +--+ |04| +--+ |05| +--+ |06| +--+ |R1| +--+ 上記の項目でMAX値06を取りたいのですが SQL>select MAX(ID) as MaxID from a とすると「R1」がMAX値になる。 「06」をMAX値として取りたい。

  • Access、SQLステートメントでの仮テーブルの作り方について

    AccessのSQLステートメントで仮テーブルを使ったSQLを作りたいのですが、構文の書き方がよくわかりません。 わからないなりに以下のようなSQL文を作ってみたのですが、 SELECT TBL.NO FROM [SELECT NO FROM ○○TBL WHERE △△="△△" GROUP BY NO HAVING (Mid(××,2,1)="K") ]. AS TBL; (本当はWHEREのあとにANDがたくさんあります) 実行すると、 「パラメータや別名が正しいこと、無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。」 とメッセージが出ます。 仮テーブルに長いSELECT文をつかうことはできないのでしょうか? ちなみに環境はOS:Win2000+Access2000です。 どなたかアドバイスください。 よろしくお願いします。

  • 列番号による項目の取得について

    SQLの構文についての質問です。 あるテーブルからデータを取得する場合、 「SELECT 項目名1,項目名2・・ FROM テーブル名 WHERE 条件」 というSQL文となりますが、 項目名1,項目名2の部分を列番号を指定することによって 値を取得することは可能でしょうか?

  • 文字列を入力すると文字化ける

    SQLにSELECT文を書き、サーブレットを通しjspに結果を出力したいのですが SQL文をこのように書いているにもかかわらず↓ "select sum(oni) as oni from テーブル名 where ken = '" + ken + "'"; いざ文字列を入力し、デバッグを確認すると下記のような文字化けを起こしています↓ select sum(oni) as oni from テーブル名 where ken = '本社' 文字列を入力してそのまま反映させるにはどこを書き換えれば良いのでしょうか?

  • Access97のクエリーでのDISTINCTROW について

    Access97のクエリーでのDISTINCTROWの解読の仕方がわからず困っています。 SELECT DISTINCTROW テーブル1.番号, テーブル1.D名, テーブル1.E名, FROM テーブル1 WHERE (((テーブル1.番号) In (SELECT [番号] FROM [テーブル1] As Tmp GROUP BY [番号] HAVING Count(*)>1 ))) ORDER BY テーブル1.番号; このSQL文はどういう条件のデータを選択する意味なのでしょうか。 教えてください。

  • コマンドと関数の違い

    MySQLで「コマンド」と「関数」というのがあると思うのですが、この2つは何が違うのでしょうか?また、 select * from table などのようなものはSQL構文で、MySQLにおいてもコマンドとも関数とも呼ばないのですよね? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • oracle7 select文での列別名について

    以下のようなSQLを記載した場合に問題となる可能性はあるでしょうか? 実際にこのようなSQLを書くことはないかもしれませんが、 列別名と、テーブルの項目名を同じにしています。 select XXX as XXX from tblA

  • accessのSQL文で

    SELECT 科目Aテーブル.学生番号, 名簿テーブル.氏名, 科目Aテーブル.成績 INTO 科目Aテーブル2 FROM 名簿テーブル INNER JOIN 科目Aテーブル ON 名簿テーブル.学生番号 = 科目Aテーブル.学生番号; (これはテーブル作成クエリによるもの) と表示されたのですが SELECT ~ INTO ~ FROM ~ ON ~ ; のような構文はSQLにあるのでしょうか? ACCESS独自の拡張でしょうか? SELECT ~ INTO とSELECTにINTOがつく構文をインターネットで探したのですが見つかりません

  • ACCESSのVBAで

    Dim rcd As New ADODB.Recordset Sql = "SELECT * FROM 社員テーブル" rcd.Open Sql, CurrentProject.Connection If rcd.EOF Then Else 社員コード = rcd!社員コード 社員名称 = rcd!社員名称 end if のような記述で、Sqlのところをテーブルからのselectではなくクエリからデータの取得って出来るのでしょうか?(sqlのところがクエリ名になる) よろしくお願いします。

  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

専門家に質問してみよう