十七、mysql中对于数据表中记录/数据的一些中级操作三

1、limit子句

limit子句是一种限制结果的语句(本质上是限制数量);该语句主要有两种使用方式:
1、用来限制长度,即数据量(比如查询多少条记录或者更新多少条记录等)
基本语法:limit n表示取出n条数据
实例:查询前3个学生的信息
在这里插入图片描述
2、限制起始的位置和数量(长度),比如从第2个开始,找出后面连续的3个
基本语法:limit n,m从n开始,找m个数据,需要注意的是,n从0开始,也就是说,(limit 0,m)表示从第一个开始,找m个数据。
实例:从第二个开始,找3条学生信息
在这里插入图片描述
附(针对指定初识位置的): 此方案主要用于业务分页(也就是说可以利用此语句实现mysql的分页查询功能(后面详细说明)),为用户节省时间,提高服务器的响应效率,减少资源的浪费,对于用户来讲,可以点击的分页按钮:1,2,3,…,n;对于服务器来讲,根据用户选择的页码来获取不同的数据;此功能就可以通过limit offset,length实现,具体的参数计算:length:每页显示的数据量offset:offset=(页码-1)*每页显示的数据量

2、连接查询

连接查询简介

定义: 将多张表(可以大于2张)进行记录的连接(按照某个指定的条件进行数
据拼接);最终结果是:记录数有可能变化,字段数一定会增加(至少两张表的合并)。
意义: 在用户查看数据的时候,需要显示的数据来自多张表,使用连接查询就可以完成此任务。
分类: 连接查询总共分为四类,分别为交叉连接、内连接、外连接、自然连接
连接查询的关键字:join

交叉连接

定义: 从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做笛卡尔积。
基本语法: 左表 cross join 右表等价于:from 左表,右表
实例: 交叉连接stu和student两张表
在这里插入图片描述
解析:从stu表中循环取出每一条记录,然后去student表中匹配,保留每一条记录,得到上述结果。
注: 从上面可以看到这种连接获取到的是一个笛卡尔积连接结果,没有意义,应该尽量避免,也就是说交叉连接基本没用,交叉连接存在的价值主要是保证这种结构的完整性。

内连接

定义: 从左表中取出每一条记录,去右表中与所有的记录进行匹配,匹配必须是某个条件在左表中与右表中相同最终才会保留结果;否则不保留结果(内连接也可以没有连接条件)
基本语法: 左表 [inner] join 右表 on 左表.字段 = 右表.字段
基本语法说明: on后面的表示连接条件,也就是说只有满足此条件,结果才会被保留;而字段则是两个表中业务含义相同的两个字段。
实例: 连接student表和computer_course表,当两个的id相等时(这里仅仅是为了说明内连接的效果,但连接本身可能并无意义)
在这里插入图片描述
从中可以看出,id和sno必须相等,才可以被保留并显示。
字段别名和表别名的使用: 在查询数据的时候,不同表有同名字段,这个时候需要加上表名才能区分,而表名如果太长的话,书写起来可能不方便,这时就可以给表名起个别名以解决此问题。
具体的使用方法如下:

select * from 表名1 别名1 inner join 表名2 别名2 on 别名1.字段 判断符号 别名2.字段;
实例:
 select * from student s inner join computer_course c on s.id=c.id;//用s和c分别代表student和computer_course

注: 当内连接没有连接条件时(即没有on之后的内容),这个时候系统就会保留所有结果(笛卡尔积);内连接还可以使用where代替on关键字,但是where没有on效率高。

外连接

定义: 以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留,能匹配,正确保留,不能匹配,其他表的字段都置空NULL
内连接与外连接的区别: 内连接会有匹配条件(没有则是笛卡尔连接),如果满足匹配条件,才会被保留,也就是说查询结果中没有null字段,而外连接不管能不能匹配上,最终都会保留,只不过将无法匹配的字段置为null。
外连接分类: 依照以那张表为主,外连接被分为左连接和右连接
基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;
实例:
1、左连接:连接computer表和student表,条件为student中的sno与computer中的id相等
select s.*,c.course_name,c.id c_name from student s left join computer c on s.sno = c.id;
在这里插入图片描述
解析:从中可以看出,以student表为主,去匹配computer表中的记录,条件为sno与id相等,其中sno为4和5时,匹配到了computer表中的记录(即有满足条件的记录),而sno为6时,computer表中没有满足条件的记录,所以后面的关于computer表中的字段被设置为Null。
2、右连接:连接computer表和student表,条件为student中的sno与computer中的id相等
select s.*,course_name,c.id c_name from student s right join computer c on s.sno=c.id;
在这里插入图片描述
解析:此连接以右表computer为主表,依次在左表student中查找相符条件的记录,其中前3条数据都没有找到相应的记录,只有后面两条记录找到了相应的记录,此时,只有后面两条记录有数据,而其他的记录都被置为了空。
注: 虽然左连接和右连接有主表差异,但是显示的结果永远是左表的数据在左边,右表的数据在右边;不过左连接和右连接可以互换(互相转换)。

自然连接

定义: 就是自动匹配连接条件,系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段都作为条件),连接之后会合并同名字段。
自然连接的分类: 自然连接可以分为自然内连接和自然外连接,而自然外连接又可以分为自然左连接和自然右连接。
自然内连接基本语法: 左表 natural [inner] join 右表
实例:
select * from student natural inner join class;
自然左连接和自然右连接基本语法: 左表 natural left/right join 右表
自然左右连接与左右连接的区别: 和左/右外连接差不多,唯一的区别就是自然外连接合并了同名字段;其实内连接和外连接都可以模拟自然连接,使用同名字段并且少取一个字段即可,具体语法如下:

//语法:
左表 left/right/inner join 右表 using(字段名); //; //使用同名字段作为连接操作的合并条件
//实例:
select * from student left join class using(id);//用id作为条件,且id为两表的同名字段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值