LEFT OUTER JOIN
来源:互联网 发布:mac ps破解 编辑:程序博客网 时间:2024/05/03 06:05
主要目的:
①表关联查询时,被关联的表(就是没有外键的那个表)需要使用多次(起多个别名),
这个表中的主键是一个复合主键(其中一个是那个外键,另一个是自己的一个...),
我们想得到这个关联的信息,同时条件是...,
还要把这些数据在一行记录中显示!
②当第二个表中的数据不存在时,对应记录显示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日更新)
- left outer join partition
- LEFT OUTER JOIN
- left outer join right outer join
- left join 或 left outer join
- LEFT JOIN 或 LEFT OUTER JOIN
- left join 和 left outer join
- 关于left join 和 left outer join
- left join 和 left outer join
- left join 和left outer join
- LEFT OUTER JOIN 使用实况
- LEFT OUTER JOIN 使用实况
- LEFT OUTER JOIN 使用实例
- left outer join 的真谛
- hive left outer join问题
- DefaultIfEmpty and Left Outer Join
- Hibernate中的left outer join
- hive left outer join 两次
- ORACLE- join,inner join 与 left join, left outer join
- Linux学习之系统重装
- 有关js方面知识的整理(二)
- shishikan
- Rabbit Mq 异步消息的使用
- 向Mysql插入数据后,含中文的数据如何读取
- LEFT OUTER JOIN
- 未完 Android 编译环境
- i++,++i的困扰
- SQL求中值
- TCP/IP 详解 卷1 ch30 其他的TCP/IP应用程序
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
- JTextPane 如何换行缩进
- SPI驱动分析