SQL联合语句的视觉解释_MySQL
我认为Ligaya Turmelle的关于SQL联合(join)语句的帖子对于新开发者来说是份很好的材料。SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看是很自然而然的。不过正如在她的帖子的回复中所说的,在测试中我发现韦恩图并不是十分的匹配SQL联合语法。
不过我还是喜欢这个观点,所以我们来看看能不能用上韦恩图。假设我们有下面两张表。表A在左边,表B在右边。我们给它们各四条记录。
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja
我们用过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹配。
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 3 Ninja 4 Ninja
内联合(inner join)只生成同时匹配表A和表B的记录集。(如下图)
——————————————————————————-
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader
全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。(如下图)
——————————————————————————-
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name id name id name -- ---- -- ---- 1 Pirate 2 Pirate 2 Monkey null null 3 Ninja 4 Ninja 4 Spaghetti null null
左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。(如下图)
——————————————————————————-
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null
为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。(如下图)
——————————————————————————-
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null id name id name -- ---- -- ---- 2 Monkey null null 4 Spaghetti null null null null 1 Rutabaga null null 3 Darth Vader
为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。(如下图)
———————————————————–
还有一种笛卡尔积或者交叉联合(cross join),据我所知不能用韦恩图表示:
SELECT * FROM TableA CROSS JOIN TableB
这个把“所有”联接到“所有”,产生4乘4=16行,远多于原始的集合。如果你学过数学,你便知道为什么这个联合遇上大型的表很危险。
英文原文;Jeff Atwood,编译:伯乐在线 – @奇风余谷
译文链接:http://blog.jobbole.com/40443/

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ほとんどのユーザーは Excel を使用してテーブル データを処理します。実は Excel にも VBA プログラムがあります。専門家を除けば、この関数を使用したユーザーはあまり多くありません。VBA で記述するときによく使用されるのが iif 関数です。実際には、次の場合と同じです。関数の機能は似ていますが、iif関数の使い方を紹介します。 SQL ステートメントには iif 関数があり、Excel には VBA コードがあります。 iif 関数は Excel ワークシートの IF 関数と似ており、論理的に計算された真値と偽値に基づいて真偽値を判定し、異なる結果を返します。 IF 関数の使用法は (条件、はい、いいえ) です。 VBAのIF文とIIF関数、前者のIF文は条件に応じて異なる文を実行できる制御文であり、後者は条件に応じて異なる文を実行できる制御文です。

Oracle データベースのログ情報は、次の方法でクエリできます: SQL ステートメントを使用して v$log ビューからクエリを実行する; LogMiner ツールを使用してログ ファイルを分析する; ALTER SYSTEM コマンドを使用して現在のログ ファイルのステータスを表示する;特定のイベントに関する情報を表示するには、TRACE コマンドを使用します。システム ツールの操作を使用して、ログ ファイルの末尾を確認します。

MySQL データベースのストレージ構造をクエリするには、次の SQL ステートメントを使用できます。 SHOW CREATE TABLE table_name; このステートメントは、テーブルの列定義とテーブル オプション情報 (テーブルの列名、データ型、制約、一般プロパティなど) を返します。 、ストレージ エンジンや文字セットなど。

Navicat でクエリ結果をエクスポートする: クエリを実行します。クエリ結果を右クリックし、[データのエクスポート] を選択します。必要に応じてエクスポート形式を選択します: CSV: フィールド区切り文字はカンマです。 Excel: Excel 形式を使用したテーブル ヘッダーが含まれます。 SQL スクリプト: クエリ結果を再作成するために使用される SQL ステートメントが含まれています。エクスポート オプション (エンコード、改行など) を選択します。エクスポート先とファイル名を選択します。 「エクスポート」をクリックしてエクスポートを開始します。

MySQL データベースの初期化失敗の問題を解決するには、次の手順に従います。 権限をチェックし、適切な権限を持つユーザーを使用していることを確認します。データベースがすでに存在する場合は、それを削除するか、別の名前を選択します。テーブルが既に存在する場合は、テーブルを削除するか、別の名前を選択します。 SQL ステートメントに構文エラーがないか確認してください。 MySQL サーバーが実行中であり、接続可能であることを確認します。正しいポート番号を使用していることを確認してください。他のエラーの詳細については、MySQL ログ ファイルまたはエラー コード ファインダーを確認してください。

MySQL SQL ステートメントは、次の方法で実行できます。 MySQL CLI (コマンド ライン インターフェイス) を使用する: データベースにログインし、SQL ステートメントを入力します。 MySQL Workbench の使用: アプリケーションを起動し、データベースに接続し、ステートメントを実行します。プログラミング言語を使用します。MySQL 接続ライブラリをインポートし、データベース接続を作成し、ステートメントを実行します。 DB Browser for SQLite などの他のツールを使用します。アプリケーションをダウンロードしてインストールし、データベース ファイルを開いて、ステートメントを実行します。

MySQL トランザクション処理: 自動送信と手動送信の違い。MySQL データベースでは、トランザクションは一連の SQL ステートメントです。すべての実行が成功するか、すべての実行が失敗するかのいずれかで、データの一貫性と整合性が保証されます。 MySQL では、トランザクションは自動送信と手動送信に分けられ、その違いはトランザクション送信のタイミングとトランザクションの制御範囲にあります。以下では、自動送信と手動送信の違いを詳しく紹介し、具体的なコード例を示して説明します。 1. MySQL が表示されない場合は自動的に送信する

MySQL と PL/SQL は 2 つの異なるデータベース管理システムであり、それぞれリレーショナル データベースと手続き型言語の特性を表しています。この記事では、具体的なコード例を示しながら、MySQL と PL/SQL の類似点と相違点を比較します。 MySQL は、構造化照会言語 (SQL) を使用してデータベースを管理および操作する、一般的なリレーショナル データベース管理システムです。 PL/SQL は Oracle データベースに固有の手続き型言語であり、ストアド プロシージャ、トリガー、関数などのデータベース オブジェクトを記述するために使用されます。同じ
