SQL联合查询(内联、左联、右联、全联)的语法

1.数据环境准备

CREATE TABLE CUST_INFO(CST_ID VARCHAR(40),CST_NM VARCHAR(100),PASSWORD VARCHAR(6));
INSERT INTO CUST_INFO VALUES('1','郭啸天','123456');
INSERT INTO CUST_INFO VALUES('2','杨铁心','123456');

CREATE TABLE CUST_INFO_DETAIL(CST_ID VARCHAR(40),SEX VARCHAR(4),AGE INT);
INSERT INTO CUST_INFO_DETAIL VALUES('1','',34);
INSERT INTO CUST_INFO_DETAIL VALUES('3','',38);

 

1.1 表CUST_INFO

CST_ID

CST_NM

PASSWORD

1

郭啸天

123456

2 杨铁心 123456

1.2 表CUST_INFO_DETAIL

CST_ID SEX AGE
1 34
3 38

 

 

2.各种连接

2.1 内联(inner join)

如果想把用户信息列写出来,那么一般这么写:
SELECT * FROM CUST_INFO T1 ,CUST_INFO_DETAIL T2 WHERE T1.CST_ID=T2.CST_ID

等同于

SELECT * FROM CUST_INFO T1  INNER JOIN  CUST_INFO_DETAIL T2  ON T1.CST_ID=T2.CST_ID

把两个表中都存在CST_ID的行拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。

运行结果如下:

CST_ID

CST_NM

PASSWORD

CST_ID

SEX

AGE

1

郭啸天

123456

1

34

2.2 左联(left join)

显示左表CUST_INFO中的所有行,并把右表CUST_INFO_DETAIL中符合条件加到左表CUST_INFO中;右表CUST_INFO_DETAIL中不符合条件,就不用加入结果表中,并且NULL表示

SQL:

CST_ID

CST_NM

PASSWORD

CST_ID

SEX

AGE

1

郭啸天

123456

1

34

2 杨铁心 123456 NULL NULL NULL

2.3 右连接(right join)

显示右表CUST_INFO_DETAIL中的所有行,并把左表CUST_INFO中符合条件加到右表CUST_INFO_DETAIL中;左表CUST_INFO中不符合条件,就不用加入结果表中,并且NULL表示。

T_ID

CST_NM

PASSWORD

CST_ID

SEX

AGE

1

郭啸天

123456

1

34

NULL NULL NULL 3 38

2.4 全连接(full join)

显示左表CUST_INFO、右表CUST_INFO_DETAIL两边中的所有行,即把左联结果表+右联结果表组合在一起,然后过滤掉重复的。

ID

CST_NM

PASSWORD

CST_ID

SEX

AGE

1

郭啸天

123456

1

34

NULL NULL NULL 3 38
  杨铁心 123456 NULL NULL NULL
posted @ 2017-04-11 16:36  OLIVER_QIN  阅读(3417)  评论(0编辑  收藏  举报