Mysql—表内容的增删改查04

连接查询

连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。

实际上,两个表的完全的连接是这样的一个过程:

左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到的所有数据行的结果。

连接之后,并非形成了一个新的数据表,而只是一种“内存形态”。

1.交叉连接

from 表1 join 表2

2.内连接

from 表1 join 表2 on 表1.字段1=表2.字段2

例如:select * from student join sorce on student.id=sorce.id

3.左外连接

from 表1 left join 表2 on 连接条件

含义是:内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应放右边表的字段的位置就自动补为null”值。

4.右外连接

from 表1 right 表2 on 连接条件

含义是:内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应放左边表的字段的位置就自动补为“null”值。

5.全外连接

from  1  full  [outer]  join  2  on  连接条件

含义是:其实是左右连接的“并集”(消除重复项),即内连接的结果,加上左表中不满足条件的所有行(右边对应补null),再加上,右表中不满足条件的所有行(左边对应补null)。{mysql不认此语法,了解即可}

6.子查询:子查询就是把一个查询的结果当作另一个查询的条件。

可以使用in子查询:

select * from product  where  protype_id in (

select protype_id from product_type where protype_name like '%%')

7.联合查询

联合查询就是将两个select语句的查询结果“层叠”到一起成为一个“大结果”。

两个查询结果的能够进行“联合”的先觉条件是:结果字段数相等。

1,两个select语句的输出段(结果字段)数目一样,应用中通常类型一样才有意义。

2,结果集中的字段以第一个select语句的字段为准。

3,第一个select语句的字段可以做别名,但如果做别名,则后续的wheregrouporder等子句应该用该别名。

4,如果要对整个联合结果进行排序或limit,则应该对各自的select语句加括号:

select 语句1

union

select 语句2

order  by .....  limit ....

例如:select name,age from student union select grade,sex from teacher

猜你喜欢

转载自www.cnblogs.com/sunlangui/p/11434789.html