MySQLテーブル関連のいくつかの一般的な方法

2362 ワード

MySQLテーブル関連のいくつかの一般的な方法
仕事の中で私達はいつも表と表の関連付けを使ってデータを検索して、もしjoinに対して熟知しないならば、私達の要らない節の過ぎることを得ることができるかもしれなくて、ここでjoinのいくつかのよく使う方法を紹介します:表を建てておよびデータを挿入して、CREATE TABLE school(sch_id int(11)NOT NULL AUTO_INCREMENT, sch_name  varchar(50) NOT NULL, sch_addr  varchar(100) DEFAULT NULL,PRIMARY KEY ( sch_id )) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
CREATE TABLE  student  ( st_id  int(11) NOT NULL AUTO_INCREMENT, st_name  varchar(20) NOT NULL, age  smallint(6) DEFAULT NULL, hight  int(5) DEFAULT NULL, sch_id  int(11) DEFAULT NULL,PRIMARY KEY ( st_id ),KEY  sch_id  ( sch_id )) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ;
INSERT INTO school VALuES(1,'南開大学','南開'),(2,'中央財経大学','北京'),(3,'香港理工大学','香港'),(4,'西安交通大学','西安'),(5,'シドニー大学','シドニー'),(6,'マンチェスター','マンチェスター'),(8,'延安抗日軍政大学','延安');
INSERT INTO student VALuES(1,'王暁陽',26168,6),(2,'王楠',28162,2),(3,'楊振宇',30178,1),(4,'苗昕', 28162, 3),(5,'張詩雨',27171,5),(8,'李倩', 28162,4),(9,'蒋結石',26178,7);
1.左の関連:左の表を中心として、左の表の全部のデータを検出し、関連フィールドの値が等しくない場合、右の表で検出したデータは空に表示する.select * from school a left join student b on a.sch_id=b.sch_id;
2.右関連:右の表を中心に、右の表のすべてのデータを検出し、関連フィールドの値が等しくない場合、左の表で検出したデータは空に表示される.select * from school a right join student b on a.sch_id=b.sch_id;
3.内部関連:2つのテーブル関連フィールドの等値を検出するデータselect*from school a inner join student b on a.sch_id=b.sch_id;
4.左表のみのデータを検出するselect*from school a left join student b on a.sch_id=b.sch_id where b.st_id is null;
5.右表のみのデータを検出するselect*from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;
6.全てのデータを検出するselect*from school a left join student b on a.sch_id=b.sch_id union select * from school a right join student b on a.sch_id=b.sch_id;
7.左テーブルと右テーブルの関連が等しくないデータを検出するselect*from school a left join student b on a.sch_id=b.sch_id where b.st_id is null union select * from school a right join student b on a.sch_id=b.sch_id where a.sch_id is null;
転載先:https://www.cnblogs.com/jerryliuxin/p/10975032.html