データサイエンス100本ノック(構造化データ加工編)- SQL Part 2 (Q21 to Q40)

データサイエンス
解説:

このコードは、"receipt "というテーブルから行数を選択するSQLクエリです。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

COUNT関数は、「receipt」テーブルの行数をカウントするために使用されます。この場合、「COUNT(1)」文は、各行の最初の列の値がNULLでないテーブルの行数を数えるために使用されます。これは、どの列がNULLであるかに関係なくテーブルのすべての行をカウントする「COUNT(*)」の使用と同等である。

FROMキーワードは、データを取得したいテーブルを示すために使用され、この場合、「receipt」テーブルを示します。

つまり、要約すると、このクエリは「recipate」テーブルの行数を選択し、返すということです。
 
解説:

このコードは、"receipt "というテーブルから行数を選択するSQLクエリです。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

COUNT関数は、「receipt」テーブルの行数をカウントするために使用されます。この場合、"COUNT(*) "ステートメントは、どの列がNULLであるかどうかにかかわらず、テーブルのすべての行を数えるために使用される。

FROMキーワードは、データを取得したいテーブル、この場合は「recipate」テーブルを示すために使用されます。

つまり、要約すると、このクエリは「recipate」テーブルのすべての行を選択し、そのカウントを返します。
 
解説:

このコードは、"receipt "というテーブルから、異なる顧客IDのカウントを選択するSQLクエリである。

%%sqlは、このコードがSQLコードであることを示すJupyter Notebookのセルマジックコマンドである。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

COUNT関数は、「recipate」テーブル内の異なる顧客IDの数を数えるために使用されます。この場合、「COUNT(DISTINCT customer_id)」ステートメントは、テーブル内のユニークな顧客IDの数をカウントするために使用されます。

DISTINCTキーワードは、「customer_id」列のユニークな値のみをカウントすることを指定するために使用される。

FROMキーワードは、データを取得したいテーブルを示すために使用され、この場合、「receipt」テーブルを示します。

つまり、要約すると、このクエリは「recipate」テーブルのユニークな顧客IDのカウントを選択し、返します。

 

解説:

SQLコードが2回繰り返されています。

このコードは、"receipt "というテーブルから "store_cd"、"amount"、"quantity "という3つの列を選択する。このテーブルには、ある店舗の売上データが含まれています。

SUM関数を使用して、各店舗の「金額」列と「数量」列の合計を計算する。

GROUP BY句は、売上データを店舗ごとにグループ化するために使用されます。つまり、このクエリーは、「store_cd」カラムの一意の店舗コードごとに、「金額」と「数量」の合計を返すことになります。

最初に出現したコードは、2番目に出現したコードと全く同じであるため、重複や間違いかもしれません。それにもかかわらず、このクエリは、「receipt」テーブルの各店舗の販売商品の合計金額と数量を選択し、返します。
 
解説:

このコードは、"receipt "というテーブルから各顧客の最大売上日(sales_ymd)を選択するSQLクエリである。

%%sqlは、このコードがSQLコードであることを示すJupyter Notebookのセルマジックコマンドである。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

customer_idと「MAX(sales_ymd)」は、「recipate」テーブルから選択したいカラムである。MAX」関数は、「customer_id」カラムの一意の顧客IDごとに「sales_ymd」カラムの最大値を選択するために使用される。

FROMキーワードは、データを取得するテーブルを示すために使用され、この場合、「recipate」テーブルである。

GROUP BY句は、顧客IDによって売上データをグループ化するために使用されます。つまり、このクエリは、「customer_id」列の一意の顧客IDごとに、最大売上日を返すことになる。

LIMITキーワードは、クエリによって返される結果の数を制限するために使用されます。この場合、「LIMIT 10」ステートメントは、結果を上位10行に制限します。

つまり、要約すると、このクエリは、「receipt」テーブルから各顧客の最大売上日を選択して返し、結果を上位10人の顧客に限定している。
 
解説:

このコードは、"receipt "というテーブルから各顧客の最小売上日(sales_ymd)を選択するSQLクエリである。

%%sqlは、このコードがSQLコードであることを示すJupyter Notebookのセルマジックコマンドである。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

customer_idと「MIN(sales_ymd)」は、「recipate」テーブルから選択したいカラムである。MIN関数は、「customer_id」カラムの一意の顧客IDごとに「sales_ymd」カラムの最小値を選択するために使用される。

FROMキーワードは、データを取得するテーブルを示すために使用され、この場合、「recipate」テーブルからデータを取得する。

GROUP BY句は、顧客IDによって売上データをグループ化するために使用されます。つまり、このクエリは、「customer_id」列の一意の顧客IDごとに、売上日の最小値を返すことになります。

LIMITキーワードは、クエリによって返される結果の数を制限するために使用されます。この場合、「LIMIT 10」ステートメントは、結果を上位10行に制限します。

つまり、要約すると、このクエリは、「receipt」テーブルから各顧客の最小売上日を選択して返し、結果を上位10人の顧客に限定している。
 
解説:

このコードは、"receipt "というテーブルから顧客ID、最大売上日、最小売上日を選択するSQLクエリである。

%%sqlは、このコードがSQLコードであることを示すJupyter Notebookのセルマジックコマンドである。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

customer_id、「MAX(sales_ymd)」、「MIN(sales_ymd)」は、「recipe」テーブルから選択したいカラムである。MAXは、「customer_id」列の一意の顧客IDごとに「sales_ymd」列の最大値を選択するために使用され、「MIN」は、「customer_id」列の一意の顧客IDごとに「sales_ymd」列の最小値を選択するために使用されている。

FROMキーワードは、データを取得したいテーブルを示すために使用され、この場合、「recipate」テーブルである。

GROUP BY句は、顧客IDによって売上データをグループ化するために使用されます。つまり、このクエリは、"customer_id "列のユニークな顧客IDごとに、売上日の最大値と最小値を返すことになります。

HAVING句は、ある条件に基づいて結果をフィルタリングするために使用されます。この場合、与えられた顧客IDについて、最大売上日と最小売上日が同じであってはならない、という条件があります。つまり、このクエリーは、異なる日付に購入した顧客のみを返すことになります。

LIMITキーワードは、クエリによって返される結果の数を制限するために使用されます。この場合、「LIMIT 10」ステートメントは、結果を上位10行に制限します。

つまり、このクエリは、異なる日付に購入した顧客の顧客ID、最大販売日、最小販売日を「レシート」テーブルから選択して返し、結果を上位10人の顧客に限定しています。

 

解説:

このコードは、"receipt "というテーブルから店舗コードとその平均売上金額を選択するSQLクエリである。

%%sqlは、このコードがSQLコードであることを示すJupyter Notebookのセルマジックコマンドである。

SELECTキーワードは、データベースからデータを取得することを示すために使用されます。

store_cd" と "AVG(amount) AS avg_amount" は "receipt" テーブルから選択したいカラムです。AVG関数は、「store_cd」列の一意の店舗コードごとに平均売上金額を計算するために使用されます。ASキーワードは、このカラムに「avg_amount」という別名をつけるために使用されます。この名前は、クエリ結果で表示される名前です。

FROMキーワードは、データを取得するテーブルを示すために使用され、この場合、「receipt」テーブルである。

GROUP BY句は、売上データを店舗コードでグループ化するために使用されます。つまり、このクエリでは、「store_cd」列の一意の店舗コードごとに平均売上金額を計算することになります。

ORDER BY句は、平均売上金額に基づいて結果を降順に並べるために使用されます。つまり、平均売上金額が最も高い店舗が結果の上位に表示されることになります。

LIMITキーワードは、クエリによって返される結果の数を制限するために使用されます。この場合、「LIMIT 5」文は、結果を上位5店舗に限定しています。

つまり、このクエリは、「レシート」テーブルから店舗コードとその平均売上額を選択し、平均売上額に基づいて降順に並べ、結果を上位5店舗に限定して返します。
 
解説:

これは、"receipt "という名前のテーブルからデータを取得するSQLクエリである。

このクエリは、テーブルから2つのカラムを選択します。"store_cd "と "amount_50per "です。store_cd」列は店舗コードを表し、「amount_50per」列は各店舗内のレシート1枚あたりの使用金額の中央値を計算する。

中央値の算出に使用する関数は、「PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY amount)」です。この関数は、「金額」列を昇順に並べ、50パーセンタイルの値を計算する。言い換えれば、順序付けられた金額のリストの真ん中の値を見つけるということです。

このクエリは、「GROUP BY」句で結果を店舗コード別にグループ化し、「ORDER BY」句で金額の中央値の降順で結果を並べます。そして、「LIMIT」句を使用して、出力を上位5件に制限しています。

つまり、このクエリは、レシート1枚あたりの使用金額の中央値が最も高い上位5店舗を返します。

 

解説:

これは、"receipt "というテーブルからデータを取得するSQLクエリです。

このクエリでは、"product_cnt "というCTE(Common Table Expression)を使用して、各商品が各店舗で販売された回数を計算しています。GROUP BY」句を使用して「store_cd」と「product_cd」でデータをグループ化し、「COUNT(1)」関数を使用して各グループの行数を数えます。結果は "mode_cnt "カラムに格納される。

次に、このクエリは「product_mode」という別のCTEを使用して、「RANK() OVER(PARTITION BY store_cd ORDER BY mode_cnt DESC)」関数で各店舗の商品の「mode_cnt」値をランク付けします。この関数は、各商品の "mode_cnt "の値に基づいて、各店舗内でのランクを割り当てる。モードカウントが最も高い商品には、ランク1が割り当てられます。

最後に、このクエリは、「WHERE rnk = 1」句で結果をフィルタリングして各店舗のトップセラー商品を選択し、「ORDER BY」句で店舗と商品コードごとに並べます。各店舗の売れ筋商品の店舗コード、商品コード、モード数を返し、「LIMIT」句で出力を最初の10行に限定する。

要約すると、このクエリは、販売回数に基づいて、各店舗で最も売れている商品を見つけ、上位10商品それぞれの店舗コード、商品コード、モードカウントを返します。

 

解説:

これは、"receipt "という名前のテーブルからデータを取得するSQLクエリである。

このクエリでは、2つのカラムを選択しています。"store_cd "と各店舗の "product_cd "列のモードです。

MODE() WITHIN GROUP(ORDER BY product_cd)」関数は、「store_cd」の各グループ内の「product_cd」値のモードを計算する。モードとは、データ集合の中で最も頻繁に出現する値のことである。ORDER BY」句は、モードを計算する前に「product_cd」値を昇順で並べることを指定する。

このクエリは、「GROUP BY」句を使用して「store_cd」によってデータをグループ化し、「ORDER BY」句を使用して「store_cd」によって結果を順序付ける。また、「LIMIT」句で出力を最初の10行に制限しています。

つまり、このクエリは、各店舗の「product_cd」値のモードを返し、これは各店舗で最もよく売られている商品を表している。結果は店舗コード順に並べられ、上位10店舗に限定されます。
 
解説:

これは、"receipt "という名前のテーブルからデータを取得するSQLクエリである。

このクエリでは、2つのカラムを選択しています。"store_cd "と各店舗の "amount "カラムの母分散です。

VAR_POP(amount)」関数は、「store_cd」の各グループ内の「amount」値の分散を計算する。分散とは、データセットの広がりや分散を表す指標です。VAR_POP "の "POP "は "population "を意味し、分散を計算するためにデータセット全体が使用されることを意味します。

このクエリは、「GROUP BY」句を使用して「store_cd」によってデータをグループ化し、「ORDER BY」句を使用して、各店舗の「amount」値の分散を含む「vars_amount」列によって結果を降順で並べる。LIMIT」句を使用して、出力を最初の5行に制限しています。

つまり、このクエリは、「金額」値の母集団分散が最も大きい上位5店舗を返しますが、これは、これらの店舗がレシート1枚あたりの使用金額の広がりや分散が最も大きいことを意味しています。

 

解説:

これは、"receipt "という名前のテーブルからデータを取得するSQLクエリである。

このクエリでは、2つのカラムを選択しています。"store_cd" と各店舗の "amount" カラムの母標準偏差です。

STDDEV_POP(amount)」関数は、「store_cd」の各グループ内の「amount」値の標準偏差を計算する。標準偏差は、データセットの広がりや分散を表す指標です。STDDEV_POP "の "POP "は "population "を意味し、標準偏差の算出にはデータセット全体が使われることを意味する。

このクエリは、"GROUP BY "句を使って "store_cd "でデータをグループ化し、"ORDER BY "句を使って降順で、各店舗の "金額 "の標準偏差を含む "stds_amount" 列で結果を並べる。LIMIT」句を使用して、出力を最初の5行に制限しています。

つまり、このクエリは、「金額」値の母標準偏差が最も高い上位5店舗を返すので、これらの店舗は、レシート1枚あたりの使用金額の広がりや分散が最も高いことを意味します。

 

解説:

これは、"recipate" テーブルの "amount" カラムのパーセンタイル値を計算するために使用する SQL コードです。このコードでは、PERCENTILE_CONT関数を使用して連続的なパーセンタイルを計算しています。これは、パーセンタイル値が、データ・ポイント間の補間値ではなく、データ・セットの実際の値に対応することを意味します。

このコードでは、25パーセンタイル(amount_25per)、50パーセンタイル(amount_50per)、75パーセンタイル(amount_75per)、100パーセンタイル(amount_100per)の4つのパーセンタイル値を指定して計算しています。これらのパーセンタイルは、パーセンタイルを計算する前に、WITHIN GROUP句を使用して「amount」列を昇順に並べます。

コードの最後にあるSELECT文は、計算されたパーセンタイル値をクエリから取得し、1行の出力として返します。このコードは、「recipate」テーブルの「amount」カラムの分布を分析し、データ内の異常値や異常なパターンを特定するのに便利です。
 
解説:

これは、"receipt "テーブルの各店舗の平均取引額を取得し、条件に基づいて結果をフィルタリングするために使用するSQLコードです。

このコードでは、まずSELECT文で、取得する2つの列(「store_cd」列と各店舗の「金額」列の平均値)を指定します。AVG関数を使用して各店舗の「amount」列の平均を計算し、ASキーワードを使用してこの計算された列に「avg_amount」という別名を割り当てています。

次のコード行では、GROUP BY句を使用して「store_cd」列でデータをグループ化し、平均取引額が各店舗で別々に計算されることを意味します。

次に、このコードはHAVING句を使用して、条件に基づいて結果をフィルタリングします。具体的には、各店舗の平均取引額が330以上であることを条件とします。この条件を満たさない店舗は、出力に含まれません。

結果として出力されるのは、2つのカラムを持つテーブルである。「store_cd」と「avg_amount」の2つのカラムを持つテーブルが出力されます。各行は、HAVING句で指定された条件を満たす「receipt」テーブルの店舗に対応し、「avg_amount」列にはその店舗の平均取引額が含まれます。このコードは、平均取引額に基づいて、異なる店舗のパフォーマンスを分析するのに便利です。

 

解説:

これは、IDが "Z "で始まる顧客を除いた、"レシート "テーブルの各顧客が使った合計金額の平均を計算するSQLコードです。

コードは、WITH句を使用して定義された共通テーブル式(CTE)で始まります。このCTEは「customer_amount」という名前で、「recipate」テーブルの各顧客の「customer_id」列と「amount」列の合計を取得するSELECT文が含まれています。WHERE句は、NOT LIKE演算子を用いて、IDが文字「Z」で始まる顧客をフィルタリングしています。結果は "customer_id "カラムでグループ化され、結果のテーブルには2つのカラムがあります。「customer_id」と「sum_amount」(各顧客が使った金額の合計)です。

次のコード行は、"customer_amount" CTE から "sum_amount" カラムの平均値を取得するものです。SELECT文はAVG関数を使用して、IDが "Z "で始まらない各顧客が使った合計金額の平均を表す "sum_amount "列の平均値を計算します。

結果として出力されるのは、"customer_amount" CTE の "sum_amount" 列の平均を表す 1 つの値です。このコードは、顧客の平均的な支出パターンを分析し、データ内の異常値や異常なパターンを特定するのに便利です。
 
解説:

これは、IDが "Z "で始まる顧客を除いて、"receipt "テーブルの顧客の平均合計金額より多く使った上位10人の顧客の "customer_id "と "sum_amount "列を検索するSQLコードです。

コードは、WITH句を使用して定義された共通テーブル式(CTE)で始まります。このCTEは「customer_amount」という名前で、「recipate」テーブルの各顧客の「customer_id」列と「amount」列の合計を取得するSELECT文が含まれています。WHERE句は、NOT LIKE演算子を用いて、IDが文字「Z」で始まる顧客をフィルタリングしています。結果は "customer_id "カラムでグループ化され、結果のテーブルには2つのカラムがあります。「customer_id」と「sum_amount」(各顧客が使った金額の合計)です。

次のコードでは、"customer_amount" CTE から "customer_id" と "sum_amount" カラムを取得しますが、"sum_amount" が CTE のすべての顧客について計算した平均 "sum_amount" 以上になる顧客に対してのみ取得します。これは、AVG関数を使用して平均「sum_amount」を計算し、WHERE句を使用して「customer_amount」CTEをフィルタリングするサブクエリを使用して実現されます。

このクエリの結果は、LIMIT句を使用して上位10行に制限されます。

結果として、2つのカラムを持つテーブルが出力されます。「customer_id」と「sum_amount」の2つの列を持つテーブルが出力されます。各行は、IDが "Z "で始まる顧客を除き、"recipate "テーブルの顧客の平均合計金額よりも多くの金額を使用した顧客に対応するものである。テーブルは "sum_amount "カラムに基づいて降順でソートされ、上位10行のみが出力に含まれる。このコードは、高額な買い物をする顧客を特定し、その消費パターンを分析するのに便利です。
 
解説:

これは、"receipt "テーブルと "store "テーブルのデータを含む結合テーブルから最初の10行を取得するSQLコードです。結果として得られるテーブルには、"recipate "テーブルのすべてのカラムと、"store "テーブルの追加カラム "store_name "が含まれることになる。

コードは、取得するカラムを指定するSELECTステートメントから始まります。この場合、SELECT文はワイルドカード(*)を使用して、「receipt」テーブルからすべてのカラムを取得する。また、SELECT文では、出力テーブルに含まれる「store」テーブルの「store_name」カラムを指定しています。

FROM句は「receipt」テーブルからデータを取得することを指定し、JOIN句は「store」テーブルを「receipt」テーブルに「store_cd」列を結合条件として結合することを指定する。これは、"store_cd "カラムの一致する値に基づいて、"recipate "テーブルと "store "テーブルの行が1つのテーブルに結合されることを意味します。

結果として出力されるのは、「receipt」テーブルのすべてのカラムと、「store」テーブルの追加カラム「store_name」を含むテーブルとなります。このテーブルは、LIMIT句を使用して最初の10行に制限されます。このコードは、関連する2つのテーブルのデータを分析し、データを1つのテーブルに結合して分析するのに便利です。
 
解説:

このコードは、リレーショナル・データベースの管理と問い合わせに使用されるプログラミング言語であるSQLで書かれています。

このコードでは、2つのテーブルからデータを選択しています。「product "と "category "です。JOIN」キーワードを使用して、「category_small_cd」カラムの値が一致する両方のテーブルの行を結合しています。これにより、両テーブルのカラムを含む新しいテーブルが作成される。

SELECT」キーワードは、出力に含めるカラムを選択するために使用されます。この場合、「product」テーブルのすべてのカラム(「p.*」構文で指定)と「category」テーブルの「category_small_name」カラムが選択されます。

LIMIT」キーワードは、出力を最初の10行に制限する。これは、大規模なデータセットを扱う際に、クエリを素早くテストしたり、データのサンプルを取得したりするのに便利です。

つまり、このコードでは、「product」テーブルと「category」テーブルを結合し、「category_small_cd」の値が一致する最初の10行を返し、「product」テーブルのすべてのカラムと「category」テーブルの「category_small_name」列を含むことになる。
 
解説:

このコードもSQLで書かれており、前のコードより少し複雑です。このコードは、3つのテーブルからデータを選択する。"recipate"、"customer"、"customer_amount "の3つのテーブルからデータを選択します。

このコードでは、"WITH "句を使って2つのサブクエリを定義しています。「customer_amount」と「customer_data」です。

customer_amount」サブクエリは、「SUM」関数を使用して「customer_id」別に「recipate」テーブルの「amount」列を集約し、その結果に「sum_amount」という別名をつけます。このサブクエリは、2つのカラムを含む新しいテーブルを作成します。「customer_id "と "sum_amount "の2つのカラムを含む新しいテーブルが作成されます。

customer_data」サブクエリは、「customer」テーブルから、「gender_cd」が「1」に等しく、「customer_id」が文字「Z」で始まらない全ての行を選択する。このサブクエリは、1つのカラムを含む新しいテーブルを作成します。「customer_id "を含む新しいテーブルを作成します。

最後のクエリは、「LEFT OUTER JOIN」操作で「customer_data」テーブルと「customer_amount」テーブルを結合しています。これは、"customer_data "テーブルのすべての行と、"customer_amount "テーブルの一致する行があれば、それを返すものである。customer_amount」テーブルに一致する行がない場合、「COALESCE」関数を使用して「sum_amount」値を0に置き換える。

SELECT」句は、出力に含める2つのカラムを選択する。「customer_data」テーブルの「customer_id」と「customer_amount」テーブルの「COALESCE(a.sum_amount, 0) 」(「customer_amount」に一致する行がない場合は0)。LIMIT」句は、出力を最初の10行に制限する。

つまり、このコードは、「customer_id」が文字「Z」で始まらない男性顧客について、「customer_data」テーブルの最初の10行と、そのレシートの合計(またはレシートがない場合は0)を返すことになります。
 
解説:

このコードもSQLで書かれており、前のコードより少し複雑です。これは、"receipt "テーブルからデータを選択し、3つのサブクエリを作成します。「customer_data」、「customer_days」、「customer_amount」です。

customer_dataサブクエリは、「customer_id」が文字「Z」で始まらない「recipate」テーブルの行を選択し、3つのカラムに別名を付けます。"customer_id"、"sales_ymd"、"amount "の3つのカラムにエイリアスを与えます。このサブクエリは、3つのカラムを含む新しいテーブルを作成します。「customer_id」、「sales_ymd」、「amount」の3つのカラムを含む新しいテーブルが作成されます。

customer_daysサブクエリは、「customer_data」サブクエリの「sales_ymd」カラムを、「COUNT(DISTINCT sales_ymd)」関数を使って「customer_id」別に集約し、その結果に「come_days」という別名をつけます。そして、結果を "come_days "で降順に並べ、出力を上位20行に限定します。このサブクエリは、2つのカラムを含む新しいテーブルを作成します。「customer_id "と "come_days "の2つのカラムを含む新しいテーブルを作成します。

customer_amount」サブクエリは、「customer_data」サブクエリの「amount」カラムを、「SUM」関数を使用して「customer_id」ごとに集約し、その結果に「buy_amount」という別名をつけます。そして、結果を "buy_amount "で降順に並べ、出力を上位20行に限定します。このサブクエリは、2つのカラムを含む新しいテーブルを作成します。「customer_id」と「buy_amount」の2つのカラムを含む新しいテーブルが作成されます。

最後のクエリは、"FULL OUTER JOIN "オペレーションを使用して、"customer_days "テーブルと "customer_amount "テーブルを結合しています。これは、両方のテーブルからすべての行、両方のテーブルから一致する行、一致しない場合はNULL値を返します。COALESCE」関数を使用して、「customer_id」のNULL値を、もう一方のテーブルの対応する値に置き換える。

SELECT句は、出力に含める3つのカラムを選択する。"COALESCE(d.customer_id、a.customer_id) "でcustomer_idを、"customer_days "テーブルから "d.come_days"、"customer_amount "から "a.buy_amount "を取得するためです。

つまり、このコードでは、「come_days」(=来店した日数)が最も多い上位20名の顧客と、「buy_amount」(=お店で使った合計金額)が最も多い上位20名の顧客が、customer_idと一緒に返ってきます。顧客が両方のテーブルに現れる場合、出力には一度しか現れません。
 
解説:

このSQLコードは、"store "テーブルと "product "テーブルの間でデカルト積を実行することによって生成された結果セットの行数のカウントを取得します。

コードは、COUNT関数を指定したSELECT文から始まり、カウントする値は「1」、つまり行数をカウントすることを意味しています。

FROM句では、クエリで使用する2つのテーブル、"store "と "product "を指定しています。しかし、2つのテーブルを何らかのマッチング条件に基づいて結合するのではなく、CROSS JOINキーワードが使用されています。つまり、「store」テーブルの各行と「product」テーブルの各行が対になり、デカルト積となる。

結果として出力されるのは、デカルト積の行数のカウントを含む1つの列を持つ1つの行となります。このカウントは、"store "テーブルの行数と "product "テーブルの行数を掛け合わせたものとなる。このタイプのクエリは、一般に、2つ以上のテーブルから得られるデータの組み合わせの可能性の総数を計算するために使用されます。

 

 

Comment