有两张表:user和department
User表:
CREATETABLE`user`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(30)DEFAULTNULL,
`age`int(11)DEFAULTNULL,
`birthday`dateDEFAULTNULL,
PRIMARYKEY(`id`)
)
INSERT INTO USER VALUE(NAME,age,birthday)
VALUES("张三",20,"-10-31");
表内数据如下:
部门表:
CREATETABLE`department`(
`id`bigint(11)NOTNULL,
`name`varchar(10)NOTNULL,
`descr`varchar(50)DEFAULTNULL,
PRIMARYKEY(`id`)
)
INSERT INTO department (id,NAME,descr)
VALUES(1,"开发部","开发高级产品");
表内数据如下:
一、正常两表联合查询的sql语句:
SELECT u.id,u.name,u.age,d.name,d.descr
FROM USER u,department d WHERE u.id=d.id
查询结果
(或者:SELECT * FROM USER u,department d WHERE u.id=d.id)
二、左联查询sql语句:
SELECT * FROM USER u LEFT JOIN department d
ON u.id=d.id
查询结果:
根据查询结果可以看出:左联查询把前面表(user)全部查出,右表只查出部分,左表有的右表没有就为空
三、右联查询sql语句:
SELECT * FROM USER u RIGHT JOIN department
d ON u.id=d.id
查询结果:
根据结果可以看出:右联查询把后面表(department)全部查出,左表只查出部分,右表有的左表没有就为空
四、内联查询sql语句:
SELECT * FROM USER u INNER JOIN department
d ON u.id=d.id
其结果与SELECT * FROM USER u,department d WHERE u.id=d.id查询结果一样,查出两表中满足条件的记录(是两张表同时满足哦)
还可以使用where或and带条件查询。
SELECT * FROM USER u INNER JOIN department
d ON u.id=d.id AND u.age=20
查询结果:
SELECT * FROM USER u LEFT JOIN department d
ON u.id=d.idWHERE u.name LIKE '%王%'
SELECT * FROM USER u RIGHT JOIN department
d ON u.id=d.idAND u.age=20
查询结果:
根据以上可以看出:
1、使用外联查询时,添加and查询条件,不影响内外联查询的性质,只是查询的结果满足查询条件,添加where查询条件时,只能查到满足条件的记录(结果与内联查询一样)。
2、内联查询时,添加and或where条件时,查询结果都一样,只与查询条件有关