数据库limit where与on 内外连接

limit

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三条数据

where与on 

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判断条件来再次筛选,得到一条数据

 

INNER JOIN   LEFT [OUTER] JOIN  RIGHT [OUTER] JOIN  FULL [OUTER] JOIN

现有两张表,Table A 是左边的表。Table B 是右边的表

 

INNER JOIN 产生的结果是AB的交集

1

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

 

LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

1

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

 

 

.RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

1

SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name

FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。 

1

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

你可以通过is NULL将没有匹配的值找出来:

1

2

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableA.id IS null OR TableB.id IS null

 

 

5. CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

1

SELECT * FROM TableA CROSS JOIN TableB

为什么最好用join?因为用“,”做表连接的话,A,B表直接产生笛卡尔积,然后在用where筛选结果。但是join连接,A,B表连接的时候就会根据on后面的条件筛选,然后在根据where条件筛选结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库LIMIT语法用于限制查询结果的数量。它可以在SELECT语句中使用,以指定从查询结果中返回的行数的范围。LIMIT语法通常需要两个参数:startIndex和length,startIndex表示起始位置,length表示取几个。 如果没有指定位置偏移量,只想要取前几条数据,可以使用以下语法: SELECT * FROM YourTableName LIMIT length; 如果指定了位置偏移量,想要从某个位置开始取几条数据,可以使用以下语法: SELECT * FROM YourTableName LIMIT startIndex, length; 在这里,startIndex表示起始位置,length表示取几个数据。注意,startIndex的计数是从0开始的,所以如果想要从第三条记录开始取四条数据,startIndex应该是2。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Mysqllimit用法](https://blog.csdn.net/Rao_Limon/article/details/88832614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [数据库(14)limit的用法](https://blog.csdn.net/weixin_43923223/article/details/104162165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值