声明に参加するのMysql

1つの強力な機能をのmysql:参加

で、リミット順に配置しなければならないことにより、グループの前には、またはエラーになりますあなたは、SELECT、UPDATEでのMySQLを使用することができ、およびDELETEステートメントは、共同でマルチテーブルクエリを登録しよう。一般的に以下の3つのカテゴリに分類(だけでなく、これらの3種類)に参加:INNERは(接続、または同等接続)に参加:2つのテーブル間の関係にレコードマッチングフィールドを取得し、MySQLのINNER JOINを使用して(であってもよいです使用省略INNERは同じ効果)、JOINをレコードが右表のマッチングに対応していない場合でも、左側のテーブルにすべてのレコードを取得します。左結合(左接続)。該当する一致するレコードが存在しない場合でも、LEFTは対照的に参加、権利を取得するためのテーブルのすべてのレコード、左表:RIGHT(右リンク)に参加します。

1.まず、二つのテーブル:

SELECT  *  から my_test_copy;#最初のテーブル

 

SELECT  *  から my_test;#第二のテーブル

 

2.   インナー参加新しい列を形成するように結合されます

選択 a.id、a.name_people、b.name_adress から my_test_copyのように内側に 参加 my_testのように B  a.name_adress = b.name_adress。#可用、或者用:(即不用也行'と')
 を選択 a.id、a.name_people、b.name_adress から my_test_copy 内側に 参加 my_test Bを a.name_adress = b.name_adressと、#也可用

 

SELECT a.id、a.name_people、a.name_adress から my_test A インナー 参加 my_test_copy Bを a.name_adress = b.name_adress、必要なリターンのデカルト積の列に対応する列の#

 

SELECT  *  から my_test A インナー 参加 my_test_copy BをON a.name_adress = b.name_adress;#同じ行自動数値差

 

3.が参加左連結左、値がNULLを示す場合、任意の場合に、値Aが返され、Bは存在せず、接続が新しい列を形成するために一緒に接続された表し、それはまた、デカルト積<A、B>と考えられます。左JOINを左意味接続がテーブルに加えて、データの残りの部分を残した二つのテーブルの交点です。まだビューのデカルト積の観点から言えば、それはON句の条件でデカルト製品を選択することを開始することです(最後の3の結果を参照)、左側のテーブルから残りのレコードを追加したレコードを保持している、と。

選択 a.id、a.name_people、a.name_adress、b.id として B_ID、b.name_people として name_peopleをから my_test_copy  ジョイン my_test Bを a.name_adress = b.name_adress。

 

select * from my_test_copy a left join my_test b on a.name_adress=b.name_adress where b.name_adress is NULL; # 即left join中左边多余的部分

 

4. 右连接 right join,不管怎样,b的值都会返回,a的值中如果不存在则用NULL表示;连接表示连在一起,形成新的列,也算笛卡尔积 <a, b>;同理右连接RIGHT JOIN就是求两个表的交集外加右表剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。

select a.id, a.name_people, a.name_adress, b.id as b_id, b.name_people as name_people from my_test_copy a right join my_test b on a.name_adress=b.name_adress;

 

select * from my_test_copy a right join my_test b on a.name_adress=b.name_adress where a.name_adress is NULL; # 即right join中左边多余的部分,此时该表为空。

 

5. 使用 using进行连接,using与on的效果相同,但是要两个表的列名相同

# using 
select * from my_test_copy right join my_test using(name_adress);

6. where也可以用于连接

select * from my_test_copy, my_test where my_test_copy.name_adress=my_test.name_adress;  # 这样也可以做到连接两个表

7 附加:外连接,即求两个集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果UNION操作来实现,例如:

select * from my_test_copy a left join my_test b on a.name_adress=b.name_adress
union 
select * from my_test_copy a right join my_test b on a.name_adress=b.name_adress;

 

参考:

https://www.cnblogs.com/beili/p/9140019.html

https://www.runoob.com/w3cnote/sql-join-image-explain.html

https://www.runoob.com/mysql/mysql-join.html

おすすめ

転載: www.cnblogs.com/qi-yuan-008/p/12337587.html