- 埋め込みは、テキスト、画像、またはその他のデータの意味を表す数値のリストです。
- 似たような項目は似たような数字になるので、意味を数学に例えることができます。
- コサイン類似度は方向を比較し、2 つのエンベディングがどの程度似ているかをスコア化する一般的な方法です。
- 同じモデルからのエンベディングのみを比較し、独自のデータで結果をテストしてください。
「お金を取り戻す方法」を検索すると、適切なシステムでは「返金ポリシー」というタイトルのページが見つかるはずです。ただし、この 2 つに重要な単語はありません。その能力は、現代の AI で最も有用なアイデアの 1 つである エンベディング から生まれています。
このガイドでは、複雑な計算を行わずに埋め込みについて説明します。 Python 3.13 で小さな例を実行しました。その出力を以下に示します。その中のベクトルは、アイデアをわかりやすくするために、私たちが手作業で作成したものであり、それぞれに 3 つの数字だけが含まれています。実際のエンベディングはトレーニングされたモデルから得られ、多くの場合、数百または数千の数値が含まれます。
埋め込みとは何ですか?
埋め込みとは、ベクトルと呼ばれる数値のリストとして何かを表現することです。モデルは、関連する意味を持つ項目が互いに近いベクトルを取得するようにトレーニングされます。
"kitten" -> [0.9, 0.8, 0.1]
"cat" -> [0.9, 0.7, 0.2]
"invoice" -> [0.0, 0.1, 0.9]
テキストがこの形式になると、コンピューターは 2 つのテキストがどの程度類似しているかを計算できますが、単語では直接計算することはできません。埋め込みは単語に限定されません。文章、ドキュメント全体、画像、音声、製品はすべて埋め込むことができます。
なぜ単にキーワードを一致させないのでしょうか?
| クエリと文書化 | キーワード検索 | 埋め込み検索 |
|---|---|---|
| 「返金」と「返金ポリシー」 | 懐かしい、共通の言葉は無い | 見つけられるよ |
| 「ラップトップ」と「ノートブックコンピュータ」 | 懐かしい | 見つけられるよ |
| 「エラー E1042」と「E1042」が含まれるページ | 正確に見つけます | 見逃すかもしれない |
| 「銀行」(川)と「銀行」(お金) | 彼らを同じように扱います | コンテキストに応じてそれらを分離できる |
RAG に関するガイドでは、これを実際に示しています。単純な単語数検索では、「いつお金を取り戻せますか?」のスコアは 0 でした。彼らは言葉を交わさなかったので、返金文書に反対しました。 3 行目にも注目してください。正確な識別子は埋め込みの弱点であるため、キーワード検索が依然として有効です。
地図を考えてみる
巨大な地図上にすべての単語を配置し、場所が意味を反映していることを想像してください。 「猫」と「子猫」はほぼ隣り合って座り、「犬」は同じ近所に、「請求書」は別の都市にいます。関連する単語を見つけるには、近くを見るだけです。
実際の埋め込みも同様に機能しますが、マップの次元が 2 次元ではなく数百次元である点が異なります。人々はそれを想像することができませんが、計算はまったく同じように機能します。個々の数字には通常、「毛皮」のようなきちんとした意味はありません。重要なのは全体的な順位です。
小さな実用例
手作りのベクトルを比較する方法は次のとおりです。
import math
def cosine(a, b):
dot = sum(x * y for x, y in zip(a, b))
return dot / (math.sqrt(sum(x * x for x in a)) *
math.sqrt(sum(y * y for y in b)))
vectors = {
"kitten": [0.9, 0.8, 0.1],
"cat": [0.9, 0.7, 0.2],
"dog": [0.8, 0.3, 0.2],
"invoice": [0.0, 0.1, 0.9],
}
for word in ("kitten", "dog", "invoice"):
print(word, round(cosine(vectors["cat"], vectors[word]), 3))
# kitten 0.994
# dog 0.955
# invoice 0.238
「猫」に対しては、「子猫」のスコアが最も高く、次に「犬」、「請求書」のスコアがはるかに低くなります。そのパターンを生成するためにこれらのベクトルを選択したため、ランキングは実際の言語について何も証明しません。計算がどのように動作するかを示すだけです。セマンティック検索は、クエリを埋め込み、保存されているすべてのアイテムに対してスコアを付け、並べ替えるという 3 つのステップで同じことを行います。
query = [0.85, 0.75, 0.15]
sorted(vectors, key=lambda w: cosine(query, vectors[w]), reverse=True)
# ['kitten', 'cat', 'dog', 'invoice']
コサイン類似度の説明
各ベクトルは原点から指す矢印と考えることができます。コサイン類似度は、2 つの矢印の長さを無視して、間の角度を測定します。主要な値を確認しました。
cosine([1, 2, 3], [2, 4, 6]) # 1.0 same direction
cosine([1, 0], [0, 1]) # 0.0 unrelated (at right angles)
cosine([1, 0], [-1, 0]) # -1.0 opposite directions
| スコア | 意味 |
|---|---|
| 1に近い | ほぼ同じ方向を向いているのでよく似ています |
| 0に近い | 無関係 |
| -1に近い | 反対方向を指す |
最初の行を見てください。 [2, 4, 6] は [1, 2, 3] の 2 倍の長さですが、重要なのは方向だけであるため、スコアは完璧な 1.0 です。これは、長さが意味ではなくドキュメントのサイズなどを反映する可能性があるテキストの場合に役立ちます。しきい値にも注意してください。有用な範囲はモデルごとに異なるため、「類似」を意味する普遍的なスコアはありません。そのため、独自のデータでテストしてください。
その他の距離測定
| 測定する | 何が見えるのか | 注意事項 |
|---|---|---|
| コサイン類似度 | 角度のみ | テキストの一般的なデフォルト |
| 内積 | 角度と長さ | 高速で、正規化されたベクトルのコサインに等しい |
| ユークリッド距離 | 直線距離 | 小さいほど類似していることを意味します |
違いは簡単に分かります。コサイン スコア 1.0 を持つ同じ 2 つのベクトルは、一方が他方よりも長いため、ユークリッド距離は 3.742 になります。多くのシステムは、ベクトルを 正規化し、それぞれの長さを 1 にスケーリングします。その後、ドット積とコサインは同じ答えを返し、これを確認しました。「猫」と「犬」ではどちらも 0.955 でした。モデルのドキュメントを参照して、どの対策が推奨されているかを確認してください。
エンベディングの学習方法
実際のシステムでは、これらの番号を手動で割り当てる人はいません。ニューラル ネットワークはトレーニング中にそれらを学習します。初期の影響力のあるアイデアは、「猫に餌を与えた」と「犬に餌を与えた」のように、似たような文脈で現れる単語は同じような意味を持つ傾向があるというものです。 Word2Vec や GloVe などのモデルは、これらのパターンから単語ベクトルを学習しました。
その後、BERT などのトランスフォーマー ベースのモデルにより、埋め込みがコンテキストを認識するようになったため、「銀行」が「河川銀行」と「銀行ローン」で異なるベクトルを取得できるようになりました。最新のモデルの多くは、文全体または一節全体を一度に埋め込みます。私たちのガイド大規模な言語モデルトランスフォーマーがコンテキストをどのように処理するかを説明します。
埋め込みが使用される場所
| 使用する | どのように役立つか |
|---|---|
| セマンティック検索 | 正確な単語ではなく、意味によって結果を検索します |
| ラグ | 言語モデルに関連する文章を取得します |
| 推奨事項 | あなたが気に入った商品に似た商品を提案します |
| クラスタリング | グループはトピックごとにチケットまたはレビューをサポートします |
| 重複検出 | 類似の質問やリストを見つけます |
| 分類 | シンプルなモデル向けの機能を提供します |
| 異常検知 | 他のすべてから遠い項目にフラグを付ける |
大規模な検索
この例では、クエリとすべての項目を比較しました。これは完全検索と呼ばれます。数千のアイテムの場合は問題なく動作しますが、数百万のアイテムの場合は遅くなります。 HNSW などの 近似最近傍 (ANN) インデックスがこれを解決します。彼らは、絶対的に最良のものを見逃す可能性をわずかにあきらめることで、非常に近い一致をすぐに見つけます。
PostgreSQL の pgvector などのベクター データベースと拡張機能は、フィルタリングやストレージとともにこれらのインデックスを提供します。私たちの ベクター データベース ガイド では、オプションについて説明しています。小規模なプロジェクトの場合は、まったく必要ない可能性があり、メモリ内検索を開始するのに最適な方法です。
ヒント: ハイブリッド検索を早めに検討してください。埋め込み類似性とキーワード一致を組み合わせると、特にユーザーが製品コード、名前、またはエラー メッセージを検索する場合、どちらか一方を単独で使用するよりも良い結果が得られることがよくあります。
埋め込みモデルの選択
- 言語。 たとえば、コンテンツがヒンディー語またはタミル語の場合は、モデルがそれを適切に処理しているかどうかを確認してください。
- ドメイン。 一般的なモデルでは、専門的な法律用語や医学用語を使用するのが難しい場合があります。
- ディメンション。 ディメンションが増えるとより多くの詳細をキャプチャできますが、ストレージとメモリの消費量が増加します。
- コストとホスティング。 ホスト型 API と、特にプライベート データの場合に自分で実行できるオープン モデルを比較します。
- 入力長。 モデルには制限があるため、長いドキュメントは最初にチャンクに分割する必要があります。
最良のテストはあなた自身のデータです。約 20 個の実際のクエリと検索対象のドキュメントを収集し、各モデルがそれらをどのようにランク付けするかを比較します。公開されたベンチマークはコンテンツを反映していない可能性があります。
制限事項
- モデルのロックイン。 異なるモデルのベクトルを比較することはできません。機種変更した場合は全て埋め込み直す必要があります。
- 正確な用語。 ID、コード、および珍しい名前は、確実に一致しない可能性があります。
- 否定。 「返金は許可されます」と「返金は許可されません」は、反対の意味であっても、近くにある場合があります。
- 似ているからといって正しいというわけではありません。 近いものは時代遅れであるか、単に間違っている可能性があります。
- バイアス 埋め込みは、トレーニング データからステレオタイプを吸収できます。
- コサインは魔法ではありません。研究者らは、一部の学習された埋め込みに関してコサインがどれほど意味があるのか疑問に思っているため、スコアを真実の尺度としてではなく、有用な信号として扱います。
よくある間違い
- モデルの混合。 同じモデルとバージョンを使用してクエリとドキュメントを埋め込みます。
- あらゆる場所で 1 つの類似性しきい値を使用します。 モデルとタスクごとに調整します。
- 巨大なドキュメント全体を埋め込むと意味が薄れてしまうため、最初に分割してください。
- 評価をスキップします。 テスト クエリがなければ、変更が役に立ったかどうかを判断できません。
- すべてに埋め込みを使用します。 ユーザーが正確な ID を検索する場合は、通常の データベース インデックス の方が適しています。
まとめ
埋め込みによって意味が数値に変換されるため、ソフトウェアは文字列ではなくアイデアを比較できるようになります。概念はシンプルですが、実際の作業はモデルの選択、データのチャンク化、実際のクエリでのテストにあります。自分で試してみるには、数十の独自のドキュメントを埋め込みモデルに埋め込み、実際の質問で検索し、驚くような結果が得られることを確認してください。
よくある質問
簡単に言えば、埋め込みとは何ですか?
埋め込みは、意味を表す数値のリストです。同様の意味を持つ項目には同様の番号が付けられるため、コンピューターはそれらを数学的に比較できます。
コサイン類似度とは何ですか?
2 つのベクトル間の角度を -1 から 1 まで測定します。1 に近いスコアは、それらがほぼ同じ方向を向いていることを意味し、類似した内容を示唆します。
埋め込みとトークンの違いは何ですか?
トークンは、モデルが処理するテキストの塊です。埋め込みは、トークン、文、またはドキュメントの意味を表す数値ベクトルです。
埋め込みには何次元が必要ですか?
モデルにもよりますが、数百から数千が一般的です。より多くの場合、より多くの詳細をキャプチャできますが、より多くのストレージが必要となるため、ユースケースに必要なものをテストしてください。
エンベディングを使用するにはベクトル データベースが必要ですか?
いいえ。小さなコレクションはメモリ内で検索できます。ベクター データベースは、大規模なコレクション、頻繁な更新、またはフィルタリングのニーズがある場合に役立ちます。
学び続ける
テスト、WordPress、または SEO についてサポートが必要ですか?
私たちは、チームがより優れたソフトウェアを出荷し、サイトを成長させるのを支援します。あなたが取り組んでいることを教えてください。明確な次のステップを提案します。
詳しいガイドはこちら テスト、AI、最新の開発
この記事は気に入りましたか?トピックを選択して、最新のチュートリアルに直接アクセスしてください。
AI 幻覚の説明: 言語モデルが物事をでっち上げる理由とそれを軽減する方法
AI 幻覚について説明しました。幻覚とは何か、言語モデルが幻覚を生成する理由、一般的な種類、グラウンディングとプロンプトで幻覚を軽減する方法、そして私たちが実行した簡単なチェックです。
記事を読む →DevOps環境変数の説明: .env ファイル、シークレット、および設定が正しく行われている
実行した Python の例を使用して環境変数について説明します。環境変数の読み取りと設定、すべての値が文字列である理由、.env ファイル、プロセスの継承、シークレット、検証について説明します。
記事を読む →ソフトウェア開発API レート制限の説明: アルゴリズム、ヘッダー、および 429 エラーの処理
API レート制限については、実行したシミュレーションで説明します。トークン バケット、固定ウィンドウ、スライディング ウィンドウ、429 応答、レート制限ヘッダー、バックオフによる再試行、およびテスト制限です。
記事を読む →テスト自動化Python でのモッキング:unittest.mock、patch、およびテストを嘘にする間違い
Python でのunittest.mockによるモック、テスト済み: モックとreturn_value、side_effect、名前が使用されている場所のパッチ、仕様と自動仕様、日付のモック、およびよくある間違い。
記事を読む →ソフトウェアテストコードカバレッジの説明: 回線カバレッジとブランチカバレッジ、および 100% の実際の意味
実際のcoverage.pyの実行でコードカバレッジを説明: 行、分岐、条件のカバレッジ、レポートの読み取り、100%のカバレッジでもバグを見逃す可能性がある理由、および賢明なターゲット。
記事を読む →データベースとSQLSQL における DELETE、TRUNCATE、DROP: 違い、ロールバック、およびそれぞれをいつ使用するか
DELETE、TRUNCATE、DROP について、テスト済み SQL を使用して説明します。それぞれの削除内容、ロールバック、トリガー、ID リセット、速度、PostgreSQL、MySQL、SQL Server、SQLite の違いについて説明します。
記事を読む →データベースとSQLSQL ビューの説明: 作成、使用、落とし穴の回避、例を示します
SQL ビューについて、実行したクエリとともに説明しました。ビューの作成、ライブ結果、列の非表示、パフォーマンス、更新可能なビューと具体化されたビュー、壊れた依存関係、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発TypeScript インターフェイスと型: 実際の違い、コンパイラでテスト
TypeScript インターフェイスと型、実際のコンパイラでチェック: 両方でできること、片方だけでできること、宣言のマージ、拡張と交差、および従うべき簡単なルール。
記事を読む →ソフトウェア開発Python *args と **kwargs の説明: 柔軟な関数と明確な例
Python の *args と **kwargs について、実行したコードで説明しました。パッキングとアンパッキング、パラメーターの順序、キーワードのみの引数と位置のみの引数、デコレーター、一般的なエラーです。
記事を読む →ソフトウェア開発Python Lambda 関数: 構文、実際の用途、および使用すべきでない場合
Python のラムダ関数について、実行したコードとともに説明します。構文、キーによるソート、マップとフィルター、クロージャー、遅延バインディング トラップ、通常の def がより適切な選択である場合。
記事を読む →人工知能AIエージェントとは何ですか?シンプルなエージェント ループを実行できる仕組み
AIエージェントとは何ですか?エージェント ループ、ツール、メモリ、ガードレール、実行した小さな Python ループ、実際のリスク、およびシンプルなチャットボットがより良い選択である場合についてのわかりやすいガイドです。
記事を読む →DevOpsモニタリングと可観測性: ログ、メトリクス、トレースによる本当の違い
モニタリングと可観測性について説明: 既知および未知の障害、ログ、メトリクスとトレース、チェックアウト インシデントのウォークスルー、ゴールデン シグナル、OpenTelemetry、および便利なアラート。
記事を読む →DevOpsDocker ボリュームとバインド マウント: コンテナ データを正しい方法で保持する
Docker ボリュームとバインド マウントについて説明します。コンテナ データが消える理由、名前付きボリューム、バインド マウント、tmpfs、Compose の例、バックアップ、アクセス許可、およびそれぞれをいつ使用するかについて説明します。
記事を読む →テスト自動化TDD と BDD: 主な違い、1 つの機能が両方の方法で構築され、それぞれをいつ使用するか
TDD と BDD は、両方の方法で構築された 1 つの割引機能で説明されています。実行したコードによるレッド-グリーン-リファクタリング、Given-When-Then シナリオ、ツール、トレードオフ、およびそれぞれをいつ使用するかです。
記事を読む →ソフトウェアテストユーザー受け入れテスト (UAT): プロセス、チェックリスト、および実際の例
ユーザー受け入れテストの説明: 誰が実行するか、QA との違い、7 段階のプロセス、UAT テスト ケース テンプレート、チェックリスト、サインオフ基準、およびよくある間違い。
記事を読む →データベースとSQLSQL NULL 値の説明: IS NULL、COALESCE、NULLIF、および回避すべきトラップ
SQL の NULL 値について、実行したクエリで説明しました。3 つの値のロジック、IS NULL、COALESCE、NULLIF、集計、結合、並べ替えでの NULL の扱い方、およびそれが密かに引き起こすバグです。
記事を読む →データベースとSQLSQL CASE WHEN ステートメント: 構文、実際の例、およびよくある間違い
SQL CASE WHEN では、単純な検索フォーム、条件順序、SUM を使用したピボット、COUNT トリック、カスタム並べ替え、更新、回避すべき NULL トラップなど、実行したクエリを使用して説明しました。
記事を読む →ソフトウェア開発JWTとは何ですか? JSON Web トークンを実際の例で説明する
JWTとは何ですか? JSON Web トークンについて説明しました。3 つの部分、実行したコード内で構築および改ざんされたトークン、JWT とセッション、ストレージ、リフレッシュ トークン、およびセキュリティ上の間違いです。
記事を読む →ソフトウェア開発JavaScript イベントループの説明: コールスタック、マイクロタスク、タイマーと例
JavaScript イベント ループについて、実行したコードで説明しました。コール スタック、タスク キュー、マイクロタスク キュー、setTimeout 0 が即時ではない理由、ブロッキング、スターベーション、およびインタビュー クイズです。
記事を読む →ソフトウェア開発Python ジェネレーターと収量の説明: 実際の例でメモリを節約する
Python ジェネレーターと Yield について、実行したコードを使用して説明します。一時停止と再開の方法、メモリ節約の測定、パイプライン、無限シーケンス、Yield from、send、および一般的なトラップについて説明します。
記事を読む →人工知能埋め込みとは何ですか?ベクトルとコサインの類似度を簡単に説明
埋め込みとは何ですか?ベクトル、コサイン類似度、セマンティック検索に関する平易なガイド。私たちが実行した小さな例、一般的な使用法、モデルの選択、既知の制限が含まれています。
記事を読む →DevOpsBlue-Green デプロイメントと Canary デプロイメント: 違い、トレードオフ、および選択方法
ブルー グリーン デプロイメントとカナリア デプロイメントについて説明: それぞれの仕組み、コスト、リスクとロールバック、テストした安定したユーザー バケット化、データベース移行、ローリング アップデート、および選択方法。
記事を読む →テスト自動化不安定なテスト: 問題の原因とそれを永久に修正する方法
不安定なテストについては、私たちが実行したデモを使用して説明しました。主な原因、確認および診断する方法、タイミングの適切な修正、共有された状態と日付、隔離プロセスなどです。
記事を読む →ソフトウェアテスト負荷テストとストレス テスト: 違い、メトリクス、および k6 の例
ロード テストとストレス テストについて説明します。それぞれが何を証明するか、スパイク テストとソーク テスト、重要な指標、平均値が誤解を招く理由、K6 の例、テストの計画方法について説明します。
記事を読む →ソフトウェアテストテスト ケースとテスト シナリオ: 主な違い、例、およびそれぞれをいつ使用するか
テスト ケースとテスト シナリオの説明: 明確な定義、並べて表、シナリオからケースへの 1 つのパスワード リセット機能、テンプレート、およびそれぞれをいつ使用するか。
記事を読む →データベースとSQLSQL クエリの最適化: 実行プランを読み取り、タイミングを考慮して遅いクエリを修正
SQL クエリの最適化は 100 万行でテストされています。実行プランの読み取り、適切なインデックスの追加、検索対象外のフィルターの修正、複合インデックスとキーセットのページネーションの使用。
記事を読む →データベースとSQLSQL UNION と UNION ALL: 違い、例、テストされたパフォーマンス
SQL UNION と UNION ALL について、実行したクエリで説明しました。重複、両方に従うルール、実際のデータのバグ、測定されたパフォーマンス、INTERSECT と EXCEPT、およびそれぞれをいつ使用するかについて説明します。
記事を読む →ソフトウェア開発JavaScript Fetch API チュートリアル: GET、POST、エラー処理、タイムアウト
ローカル サーバーに対してテストされた JavaScript Fetch API チュートリアル: GET と POST、404 がスローされない理由、再利用可能なヘルパー、クエリ文字列、タイムアウト、CORS、およびよくある間違い。
記事を読む →ソフトウェア開発Python ファイル処理: 読み取り、書き込み、CSV、JSON、パスライブラリと例
Python のファイル処理について、実行したコードで説明します。オープン モード、大きいファイルの読み取り、CSV、JSON、パスライブラリ、バイナリ ファイル、安全な書き込み、エラー処理、およびよくある間違いについて説明します。
記事を読む →ソフトウェア開発Python のクラスとオブジェクト: 実際の例を含む OOP チュートリアル
Python のクラスとオブジェクトについて、実行したコードとともに説明します: __init__、メソッド、クラスとインスタンスの属性、継承、プロパティ、ダンダー メソッド、データクラス、およびよくある間違い。
記事を読む →人工知能大規模言語モデルとは何ですか? LLM の仕組みを誇大広告なしで説明
大規模言語モデルとは何ですか? LLM は、トークン、エンベディング、アテンション、トレーニング、温度およびコンテキスト ウィンドウ、小さな次の単語のデモ、実際の制限など、平易な言葉で説明されています。
記事を読む →DevOps初心者のための Linux コマンド: 例を含む基本ターミナル ガイド
初心者向けの Linux コマンド。ナビゲーション、ファイル、ログの表示、grep、パイプ、権限、プロセス、アーカイブなどのタスク別にグループ化されており、実用的なログ分析の例も含まれています。
記事を読む →テスト自動化Selenium と Playwright: 主な違い、コードの比較、どちらを選択するか
Selenium と Playwright の比較: アーキテクチャ、待機、ブラウザと言語のサポート、デバッグ、両方のツールでの同じテスト、移行のアドバイスと選択方法。
記事を読む →ソフトウェアテスト等価性分割: テスト設計手法を実際の例で説明
等価性パーティション化について説明しました。有効なパーティションと無効なパーティションを見つける方法、年齢、パスワード、クーポンに関する実際の例、実行したテスト、境界と組み合わせる理由。
記事を読む →ソフトウェアテストソフトウェアテストにおける重大度と優先度: 相違点、マトリックス、および実際の例
ソフトウェア テストにおける重大度と優先度について説明します。明確な定義、例を含む 4 方向のマトリックス、レベル スケール、それぞれの設定者、バグ トリアージの実行方法。
記事を読む →データベースとSQLSQL サブクエリのチュートリアル: 型、相関サブクエリ、および EXISTS と例
実行したクエリを含む SQL サブクエリのチュートリアル: スカラー、IN、FROM、SELECT サブクエリ、相関サブクエリ、EXISTS、NOT IN NULL トラップ、サブクエリ対 JOIN 対 CTE。
記事を読む →データベースとSQLSQL トランザクションと ACID の説明: COMMIT、ROLLBACK、分離レベル
SQL トランザクションと ACID について、実行した銀行振込で説明しました。COMMIT、ROLLBACK、セーブポイント、ロック、分離レベル、ダーティ リード、デッドロック、ベスト プラクティスについて説明します。
記事を読む →ソフトウェア開発Git mergeとrebaseの違い:例と使い分け
Git mergeとrebaseの違いを、実際のログ出力、比較表、rebaseの黄金律、安全なチームワークフローで解説します。
記事を読む →ソフトウェア開発Pythonのリスト内包表記:構文・例・使うべきでない場面
Pythonのリスト内包表記を解説:構文、フィルタ、if-else、ネストしたループ、実測した処理時間、そして通常のforループの方が良い場面。
記事を読む →データベースとSQLSQL JOINを例で解説(Inner・Left・Right・Full)
サンプルのテーブルとクエリでSQL JOINを順に解説。INNER、LEFT、RIGHT、FULL、CROSS、SELFに加え、よくある間違いとパフォーマンスのコツも紹介します。
記事を読む →