LEFT OUTER JOIN

主要目的:


①表关联查询时,被关联的表 (就是没有外键的那个表) 需要使用多次(起多个别名)

    这个表中的主键是一个复合主键(其中一个是那个外键,另一个是自己的一个...),

    我们想得到这个关联的信息,同时条件是...,   

    还要 把这些数据在一行记录中显示!


②当第二个表中的数据不存在时,对应记录显示null(mesg)

   同时 不会影响已查出来的数据。

(即,不会因为这个条件不符和,使查处的记录数为零)

(这个条件是AND C.stauts=2


具体意思直接看代码!

------------------------------------------------------------------------------------

 

创建表和数据:

create table studentMesg
(
    id varchar(3),
    stauts int,
    mesg varchar(10),

  primary key(id ,stauts)

);


insert into studentMesg values('001',1,'TomMesg1');
insert into studentMesg values('001',2,'TomMesg2');

insert into studentMesg values('001',3,'TomMesg3');

insert into studentMesg values('002',1,'JeckMesg1');
+-----+--------+-----------+
| id  | stauts | mesg      |
+-----+--------+-----------+
| 001 |      1 | TomMesg1  |
| 001 |      2 | TomMesg2  |

| 001 |      3 | TomMesg3   |
| 002 |      1 | JeckMesg1 |
+-----+--------+-----------+

create table student
(
    id varchar(3) primary key,
    name varchar(10),
    age int,
    foreign key(id) references studentMesg(id)


);

insert into student values('001','Tom',23);
insert into student values('002','Jeck',23);
insert into student values('003','Marry',23);//无法插入
+-----+------+------+
| id  | name | age  |
+-----+------+------+
| 001 | Tom  |   23 |
| 002 | Jeck |   23 |
+-----+------+------+

 

------------------------------------------------------------------------------------------


执行查询:

 

SELECT A.id, A.name, A.age,B.mesg,C.mesg from Student AS A

LEFT OUTER JOIN studentMesg AS B
ON A.id = B.id
AND B.stauts=1

LEFT OUTER JOIN studentMesg AS C
ON A.id = C.id
AND C.stauts=2

WHERE A.id ='001 ';


结果1

+-----+------+------+----------+----------+
| id  | name | age  | mesg     | mesg     |
+-----+------+------+----------+----------+
| 001 | Tom  |   23 | TomMesg1 | TomMesg2 |
+-----+------+------+----------+----------+

 

结果1, 说明:通过这种方式,表关联时,我们可以把数据整合在一行。

 

--------------------------------------------------------------------
SELECT A.id, A.name, A.age,B.mesg,C.mesg from Student AS A

LEFT OUTER JOIN studentMesg AS B
ON A.id = B.id
AND B.stauts=1

LEFT OUTER JOIN studentMesg AS C
ON A.id = C.id
AND C.stauts=2

WHERE A.id ='002 ';

 

结果2
+-----+------+------+-----------+------+
| id  | name | age  | mesg      | mesg |
+-----+------+------+-----------+------+
| 002 | Jeck |   23 | JeckMesg1 | NULL |
+-----+------+------+-----------+------+

 

结果2, 说明:不会因为C中没有002的数据,从而使整个数据不存在。

 

 

 

 

      写SQL时,一定要注意SQL条件的位置,是在JONI ON里面,还是在

最外面的WHERE里面。

      在里面时,连接的数据如果不存在,也会查出数据,只是连接内容为空

一定注意!!!

 

                                                                                                                         (以上内容2010年10月22日更新


你可能感兴趣的:(JOIN,sql,table,null,insert,2010)