MySQL 詳解_MySQL

Jun 01, 2016 pm 02:06 PM
b join null

還是先 Create table 吧

create table emp(
  id   int not null primary key,
  name     varchar(10)
);

create table emp_dept(
  dept_id       varchar(4) not null,
  emp_id        int not null,
  emp_name      varchar(10),
  primary key (dept_id,emp_id));


insert into emp() values
(1,"Dennis-1"),
(2,"Dennis-2"),
(3,"Dennis-3"),
(4,"Dennis-4"),
(5,"Dennis-5"),
(6,"Dennis-6"),
(7,"Dennis-7"),
(8,"Dennis-8"),
(9,"Dennis-9"),
(10,"Dennis-10");

insert into emp_dept() values
("R&D",1,"Dennis-1"),
("DEv",2,"Dennis-2"),
("R&D",3,"Dennis-3"),
("Test",4,"Dennis-4"),
("Test",5,"Dennis-5");

>> left join
-------------
select a.id,a.name,b.dept_id
from  emp a left join emp_dept b on (a.id=b.emp_id);

# 挑出左邊的 table emp 中的所有資料,即使 emp_dept 中沒有的資料也挑出來,沒有的就用 NULL 來顯示,
# 也即顯示資料是以左邊的 table emp 中的資料為基礎

mysql> select a.id,a.name,b.dept_id
    -> from  emp a left join emp_dept b on (a.id=b.emp_id);
+----+-----------+---------+
| id | name      | dept_id |
+----+-----------+---------+
|  1 | Dennis-1  | R&D     |
|  2 | Dennis-2  | DEv     |
|  3 | Dennis-3  | R&D     |
|  4 | Dennis-4  | Test    |
|  5 | Dennis-5  | Test    |
|  6 | Dennis-6  | NULL    |
|  7 | Dennis-7  | NULL    |
|  8 | Dennis-8  | NULL    |
|  9 | Dennis-9  | NULL    |
| 10 | Dennis-10 | NULL    |
+----+-----------+---------+

# 挑出 table emp 中有而 table emp_dept 中沒有的人員資料
select a.id,a.name,b.dept_id
from emp a  left join  emp_dept b on (a.id=b.emp_id)
where b.dept_id IS NULL;

mysql> select a.id,a.name,b.dept_id
    -> from emp a  left join  emp_dept b on (a.id=b.emp_id)
    -> where b.dept_id IS NULL;
+----+-----------+---------+
| id | name      | dept_id |
+----+-----------+---------+
|  6 | Dennis-6  | NULL    |
|  7 | Dennis-7  | NULL    |
|  8 | Dennis-8  | NULL    |
|  9 | Dennis-9  | NULL    |
| 10 | Dennis-10 | NULL    |
+----+-----------+---------+

# 把 table emp_dept 放在左邊的情形(當然以 emp_dept 中的數據為基礎來顯示資料,emp 中比emp_dept 中多的資料也就不會顯示出來了):

select a.id,a.name,b.dept_id
from  emp_dept b left join  emp a on (a.id=b.emp_id);
mysql> select a.id,a.name,b.dept_id
    -> from  emp_dept b left join  emp a on (a.id=b.emp_id);
+------+----------+---------+
| id   | name     | dept_id |
+------+----------+---------+
|    2 | Dennis-2 | DEv     |
|    1 | Dennis-1 | R&D     |
|    3 | Dennis-3 | R&D     |
|    4 | Dennis-4 | Test    |
|    5 | Dennis-5 | Test    |
+------+----------+---------+

>> right join
---------------
select a.id,a.name,b.dept_id
from  emp a right join emp_dept b on (a.id=b.emp_id);
# 挑資料時以右邊 table emp_dept 中的資料為基礎來顯示資料

mysql> select a.id,a.name,b.dept_id
    -> from  emp a right join emp_dept b on (a.id=b.emp_id);
+------+----------+---------+
| id   | name     | dept_id |
+------+----------+---------+
|    2 | Dennis-2 | DEv     |
|    1 | Dennis-1 | R&D     |
|    3 | Dennis-3 | R&D     |
|    4 | Dennis-4 | Test    |
|    5 | Dennis-5 | Test    |
+------+----------+---------+
5 rows in set (0.00 sec)

# 我們再把 table 的位置交換一下,再用 right join 試試

select a.id,a.name,b.dept_id
from  emp_dept b  right join emp a on (a.id=b.emp_id);

mysql> select a.id,a.name,b.dept_id
    -> from  emp_dept b  right join emp a on (a.id=b.emp_id);
+----+-----------+---------+
| id | name      | dept_id |
+----+-----------+---------+
|  1 | Dennis-1  | R&D     |
|  2 | Dennis-2  | DEv     |
|  3 | Dennis-3  | R&D     |
|  4 | Dennis-4  | Test    |
|  5 | Dennis-5  | Test    |
|  6 | Dennis-6  | NULL    |
|  7 | Dennis-7  | NULL    |
|  8 | Dennis-8  | NULL    |
|  9 | Dennis-9  | NULL    |
| 10 | Dennis-10 | NULL    |
+----+-----------+---------+

# 是不是和 left join 一樣了?

>> direct join
--------------
# 如果用right join 同不用 Join 直接挑資料是相同的,它等介於以下的指令

select a.id,a.name,b.dept_id
from  emp a ,emp_dept b
where a.id=b.emp_id;


mysql> select a.id,a.name,b.dept_id
    -> from  emp a ,emp_dept b
    -> where a.id=b.emp_id;
+----+----------+---------+
| id | name     | dept_id |
+----+----------+---------+
|  2 | Dennis-2 | DEv     |
|  1 | Dennis-1 | R&D     |
|  3 | Dennis-3 | R&D     |
|  4 | Dennis-4 | Test    |
|  5 | Dennis-5 | Test    |
+----+----------+---------+


怎樣,弄明白了嗎?

Enjoy it!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ASUS b450 マザーボードに Windows 11 をインストールする方法 ASUS b450 マザーボードに Windows 11 をインストールする方法 Dec 31, 2023 am 10:10 AM

ASUS b450 は、多くのユーザーを持つ非常に優れたマザーボードです。このマザーボードに win11 システムをインストールしたい場合は、tpm2.0 とセキュア ブート オプションを有効にする必要があります。多くの友人は有効にする方法を知らないかもしれません。以下のエディターは、操作方法を見てみましょう。 ASUS b450にwin11をインストールする方法: 1. まずシステムを再起動し、「F2」を使用してBIOS設定に入り、右下隅の「詳細モード」をクリックしてに入ります。 2. 次に、「スタートアップ」オプションで「セキュアブート」と入力します。 3. 次に、「オペレーティングシステムの種類」の右側にある「Windows UEFI モード」を選択します。 4. 設定が完了したら、右上隅の「検索」をクリックして、検索を入力してください。 5. 次に「PTT」を検索し、クリックします。

MySQLでJOINを使用する方法 MySQLでJOINを使用する方法 Jun 04, 2023 am 08:02 AM

JOIN の意味は英語の「結合」と同じで、2 つのテーブルを結合するもので、内部結合、外部結合、右結合、左結合、自然結合に大別されます。まず 2 つのテーブルを作成します。例として次のものが使用されます。 CREATETABLEt_blog(idINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(50),typeIdINT);SELECT*FROMt_blog;+----+------+--------+ | id|title|typeId|+----+----------+--------+|1|aaa|1||2|bbb|2||3|ccc|3 |

C言語のnullとNULLの違いは何ですか C言語のnullとNULLの違いは何ですか Sep 22, 2023 am 11:48 AM

null と C 言語の NULL の違いは次のとおりです。 null は C 言語のマクロ定義であり、通常は null ポインタを表すために使用され、ポインタ変数を初期化したり、条件文でポインタが null であるかどうかを判断したりするために使用できます。 NULL は、C 言語のマクロ定義です。 の定義済み定数で、通常は NULL 値を表すために使用され、NULL ポインター、NULL ポインター配列、または NULL 構造体ポインターを表すために使用されます。

MySQL Join の使用原理は何ですか? MySQL Join の使用原理は何ですか? May 26, 2023 am 10:07 AM

結合タイプ leftjoin は、左側のテーブルを駆動テーブルとして使用し、左側のテーブルを結果セットの基礎として使用します。右側のテーブルのデータは結果セットに接続されます。rightjoin は、右側のテーブルを駆動テーブルとして使用し、右側のテーブルを結果セットとして使用します。左側のテーブルを接続するための結果セットの基礎 データは結果セットの innerjoin に追加されます 結果セットは 2 つのテーブルの共通部分を取得します fulljoin 結果セットは 2 つのテーブルの結合を取得します MySQL にはfulljoin。union と Unionall の違いは、union がクロスジョインのデカルト積の重複を排除することです。where 条件が使用されていない場合、結果セットは、関連付けられた 2 つのテーブル行の積になります。違いは、クロスジョインが結果を作成するときの点です。設定されている場合は、on 条件に従って渡されます。

未定義と null は何を意味しますか? 未定義と null は何を意味しますか? Nov 20, 2023 pm 02:39 PM

JavaScript では、未定義と null はどちらも「何もない」という概念を表します: 1. 未定義は初期化されていない変数または存在しないプロパティを表します。変数が宣言されていても値が割り当てられていない場合、変数の値は未定義です。オブジェクト内に存在しないプロパティにアクセスする場合、戻り値も未定義になります; 2. null は空のオブジェクト参照を表します。場合によっては、オブジェクト参照を null に設定して、オブジェクト参照が占有しているメモリを解放できます。

null と unknown を使用する場合 null と unknown を使用する場合 Nov 13, 2023 pm 02:11 PM

null と unknown はどちらも、値が欠落しているか、未定義の状態であることを示します。使用シナリオに応じて、null または unknown の使用を選択するための指針がいくつかあります。1. 変数が空または無効であることを明確に示す必要がある場合、 null を使用できます; 2. 変数が宣言されていても値が割り当てられていない場合、デフォルトで未定義に設定されます; 3. 変数が空か未定義かを確認する必要がある場合は、厳密な等価演算子 "= を使用します。 == 変数が null か未定義かを判断します。

nullと未定義の違いは何ですか nullと未定義の違いは何ですか Nov 08, 2023 pm 04:43 PM

null と未定義の違いは次のとおりです: 1. 意味上の意味; 2. 使用シナリオ; 3. 他の値との比較; 4. グローバル変数との関係; 5. 関数パラメーターとの関係; 6. Nullability チェック; 7. パフォーマンスに関する考慮事項; 8 . JSON シリアル化のパフォーマンス; 9. 型との関係。詳細な紹介: 1. セマンティックな意味。null は通常、この変数が有効なオブジェクト値を持たないことがわかっていることを意味し、未定義は通常、変数に値が割り当てられていない、またはオブジェクトにこの属性がないことを意味します。 2. 使用シナリオ、など。

mysqlの結合クエリと複数のクエリ方法とは何ですか? mysqlの結合クエリと複数のクエリ方法とは何ですか? Jun 02, 2023 pm 04:29 PM

結合クエリと複数のクエリを比較すると、MySQL の複数テーブル関連のクエリと複数の単一テーブルのクエリのどちらが効率的ですか?データの量が十分に大きくない場合、結合を使用しても問題ありませんが、通常はサービス層で実行されます。第一に、スタンドアロン データベースのコンピューティング リソースは非常に高価であり、データベースは書き込みと書き込みの両方に対応する必要があります。データベースを作成するために、スループットが高くなり、数百マイクロ秒からミリ秒の遅延ギャップを気にする必要がなくなり、ビジネスはより多くの計算をサービス層に投入するようになります。結局のところ、コンピューティングリソースは水平拡張が容易で、データベースは難しいので、ほとんどのビジネスは純粋なコンピューティング操作をサービス層に置き、データベースをトランザクション機能を備えたkvシステムとして使用する重いビジネスです。

See all articles