mysql里分页一般用limit来实现,例如:
select* from user limit 3
表示直接取前三条数据
select * from user limit 1,3;
表示取1后面的第2,3,4三条条数据
select * from user limit 3 offset 1;
表示取1后面第2,3,4三条条数据
解释:
当 limit后面跟一个参数的时候,该参数表示要取的数据的数量
例如select* from user limit 3
表示直接取前三条数据
当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如
select
*
from
user
limit 1,3;表示取第2,3,4条数据
当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。就是跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据
例如select * from user limit 3 offset 1;
表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据
on是建立关联关系在生成临时表时候执行,where是在临时表生成后对数据进行筛选的。
以left join为例
①当两张表是在left join来关联时,条件跟在on后面:无论on条件是否成立,都会返回左表的值;
②当两张表是在left join来关联时,当条件放在where后面时:只有满足条件的记录会返回。
以下面两张表为例
Select * from book left join student on book.stuid =student.stuid
On book.stuid =student.stuid ,中间表如下:而关键字on就是在生成这个中间表的时候用的连接条件
Select * from book left join student on (book.stuid =student.stuid) where student.name = ‘猪八戒’
这条语句先得到之前的中间表,然后在中间表的情况下(这里可以理解为单表)使用where判断条件来再次筛选,得到一条数据
现有两张表,Table A 是左边的表。Table B 是右边的表
INNER JOIN 产生的结果是AB的交集
1 |
|
LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
1 |
|
.RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。
1 |
|
FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。
1 |
|
你可以通过is NULL将没有匹配的值找出来:
1 2 |
|
5. CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。
1 |
|
为什么最好用join?因为用“,”做表连接的话,A,B表直接产生笛卡尔积,然后在用where筛选结果。但是join连接,A,B表连接的时候就会根据on后面的条件筛选,然后在根据where条件筛选结果