Filter
Exclude
Time range
-
Near
そしてこれも ぼんやりとしか理解していなかった SQL文内の「IS NULL」問題についても GPTsに聞いてみた... ほお なるほど...🍵 GPTs saids: SQLでNULLを扱う際の=とISの使い分けは、非常に重要なポイントです。NULLは「値が存在しない」を意味し、通常の値とは異なる特別な扱いが必要です。ここでの違いと使い分けを初心者にも分かりやすく説明します。 = と IS の基本的な違い **= 演算子**は、2つの値が等しいかどうかを比較します。しかし、NULLは「不明」または「値なし」を意味するため、NULL = NULLという比較は「不明は不明と等しいか?」という問いとなり、これは常にFalseとは評価されません。SQLでは、NULLを含む比較は常にFalseまたはUnknown`と評価されるため、この比較は期待通りの結果を返しません。 **IS 演算子**は、値がNULLであるかどうかを確認する特別な演算子です。NULLは特殊な値であるため、これを確認するにはIS演算子を使用する必要があります。したがって、列名 IS NULLは「列の値が存在しない(NULLである)」という条件を正しく評価します。 使用例 あなたのコードで、 vbaCopy code"WHERE T在庫マスタ. 商品コード IS NULL ;" と記述することは、「T在庫マスタ」テーブルにおいて「商品コード」列がNULLであるすべての行を選択する、つまり、商品コードが指定されていない(または存在しない)在庫をすべて選択するという意味になります。 一方で、 vbaCopy code"WHERE T在庫マスタ. 商品コード = NULL ;" と書くと、理論上は「商品コードがNULLと等しい行を選択する」という意味になりますが、前述の通り、SQLではNULLを含む等価比較はうまく機能しないため、このクエリは期待した結果を返しません。実際には、この条件はどの行にも当てはまらないと評価されるため、結果セットは空になります。 結論 NULLの扱いには注意が必要で、NULLを確認する際にはIS NULLを使用するのが正しい方法です。=演算子はNULL値を持つ列の比較には適しておらず、期待する結果を得ることができません。したがって、WHERE句でNULL値を条件にする場合は、常にIS NULLを使用することが推奨されます。
8
225
Replying to @robogigi54877
構想から約10分でできてしまいました... 逆に怖い...📌🌿😅 GPTs Saids: 問題: 次のコードを参考にして、AccessのSQLクエリでのLike演算子の使用方法に関する記述の中から正しいものを選んでください。 vbaCopy codeSub Test1() Dim strSQL As String strSQL = "SELECT 社員番号, 社員名 " & _ "FROM T社員名簿 " & _ "WHERE 社員名 Like '*藤';" CurrentDb.QueryDefs("クエリ").SQL = strSQL DoCmd.OpenQuery "クエリ" End Sub 1.Like演算子を使用する場合、'%'をワイルドカードとして任意の文字列を表すことができる。 2.Like演算子において、'_'を使用すると任意の1文字を表すことができる。 3.Like演算子の後に続くパターン文字列内で、'?'を使用すると任意の1文字を表し、'[]'内の文字リストから任意の1文字を指定することができる。 4.Like演算子によるパターンマッチングでは、'*'を使用して任意の数の文字を表すことができ、この例では末尾が「藤」で終わる社員名を持つ社員の社員番号と社員名を抽出している。 正解: 4 解説: AccessのSQLクエリにおいて、Like演算子を使用する際、ワイルドカードとして''を使用すると任意の数の文字を表すことができます。このコード例では、社員名が「藤」で終わるすべてのレコードを選択しています。ANSI-89クエリモードでは、''が任意の数の文字にマッチし、'?'が任意の1文字にマッチします。選択肢1と2はANSI-92クエリモードのワイルドカードに関する説明であり、このコンテキストでは正しくありません。選択肢3は正確な記述ではありますが、この特定のコード例には当てはまらないため、正解は4です。

1
2
103