MySQL中的关键字的用法(二)

MySQL中的关键字的用法(二)



limit:偏移量和数量
注意limit和offset的区别,下面有写到offset,注意区分;
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能;常用的大概就是分页了吧。
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。
select * from user limit 5,10;
//为了检索初始偏移量是5,数量是10个的数量
select * from user limit 95,-1;
//为了检索初始偏移量是95之后的所有数据,则把第二个数据设置成-1即可;
select * from user limit 5;
//这是为了从头开始检索5个数据,换句话就是limit 0,5这个样子咯;
limit执行效率高?
常说的limit效率高,其实是在特定的情况下,数据库的量很大,但是只需要查找一部分的数据就可以;
高效率的原理:避免全表扫描,提高查询效率;比如:每个用户的email是唯一的,如果用户使用email作为用户名登陆的话,就需要查询出email对应的一条记录。
select * from user where email=?;
上面的语句实现了查询email对应的一条用户信息,但是由于email这一列没有加索引,会导致全表扫描,效率会很低。
select * from user where email=? limit 1;
如果后面加上(limit 1)的时候,当扫描到相应的email的时候便不会继续向下扫描;
limit执行效率低?
在一种情况下效率很低,那就是只使用limit来查询语句,并且偏移量特别大的情况;比如之下的例子:
语句1:
select * from table limit 150000,1000;
语句2:
select * from table while id>=150000 limit 1000;
语句1为0.2077秒;语句2为0.0063秒。两条语句的时间比是:语句1/语句2=32.968

比较以上的数据时,我们可以发现采用where…limit….性能基本稳定,受偏移量和行数的影响不大,而单纯采用limit的话,受偏移量的影响很大,当偏移量大到一定后性能开始大幅下降。不过在数据量不大的情况下,两者的区别不大。所以应当先使用where等查询语句,配合limit使用,效率才高。在sql语句中,limt关键字是最后才用到的。以下条件的出现顺序一般是:where->group by->having-order by->limit



having和where:条件
 where,过滤条件的关键字,但是它只能对group by之前的数据进行过滤筛选;
 having,也是过滤条件的关键字作用和where是一样的,但是它过滤的是分组后的数据,就是对分组后得到的结果集进行过滤筛选。
 出现having其实我觉得就是为了解决一条语句出现两个where的问题,把它们区分开来;
 select * from user where id>100 group by user.sex having user.sex=‘1’;
 这里注意一个问题:一旦经过group by关键字分组后,别的数据便无法显示;只能最多显示两列数据,即分组group by后面根据的条件后分组后的数据的计算。count,sum,avg,等



offset: 
select * from user limit 2,1;
//表示初始偏移量是2个,然后取一个数据;
select * from user limit 2 offset 1;
//limit 2 offset 1表示的是跳过1个数据,获取2个数据;

注意:
1.数据库数据计算是从0开始的
2.offset X是跳过X个数据,limit Y是选取Y个数据
3.limit X,Y 中X表示跳过X个数据,读取Y个数据

这两个都是能完成需要,但是他们之间是有区别的:
①是从数据库中第三条开始查询,取一条数据,即第三条数据读取,一二条跳过
②是从数据库中的第二条数据开始查询两条数据,即第二条和第三条。



Join和ON相关:连接
一般在真正的应用中都是多个数据表中读取数据;
JOIN 按照功能大致分为如下三类:

1.INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
2.LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
3.RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
关键字On是指怎么把两个表连接起来,如on a.name=b.name;
是一行一行的比较,然后联合起来,此时并没有判断where子句的内容;
where 关键字是在表连接之后进行筛选;


内连接可不加on条件,而外连接必须加条件;
select * from user a left (outer) join people b ON a.uuid=b.id;
//外连接必须加on关键字,on后面跟连接的条件,如果后面不跟on连接条件的话会报错;
select * from user a inner join people b ON a.uuid=b.id;
//内连接如果后面不跟on的条件的话,便跟完全连接的效果一样了;介绍一下完全连接,也就是交叉连接,比如A表有a行数据,B表有b行数据,完全连接就有a*b行数据了;
在内连接中on关键字跟where关键字的用法没有区别的;

Where关键字是对最终结果集的筛选;
On关键字是代表两个表建立联系的规则;



NULL:空值
在MySQL中关于NULL的处理,你不能使用=NULL或者是!=NULL来查询,于是MySQL就提供了一种方式,
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。



in和 NOT IN:
在一些固定的数据中的操作
select * from user where user.id in (1,5,8);
//查询ID是1,5,8的用户;
可以用in关键字来替换or关键字;

in作为查询条件,一般典型有两种用法:
一是IN常量,例如下面语句查询一、三年级的学生:
SELECT * FROM student WHERE grade IN (‘一’,‘三’);
二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:
SELECT * FROM student WHERE classno IN (
select classno from scores where score<60
);



alter:用来修改表的属性、列的属性
删除、增加、修改字段:
alter table user drop age;//删除user表的age字段;
alter table user add age int not null;//在user表中添加age字段;
alter table user modify age char(100)//在user表中修改age字段的属性;

总结

上面两篇文章大致介绍了MySQL中常用的关键字以及用法,我感觉这些关键字基本已经涵盖了平时工作中非专业人员的常用范围了,对某些关键字有更深兴趣的再去单独查阅资料去了解即可,这里不必纠结太深;

在这里插入图片描述
/*************************************************************************
/*************************************************************************
此文章版权方是个人,目的是为自己记录学习历程的同时为大家提供一些参考;如果有不正确的地方,欢迎大家提出!

/*************************************************************************
/*************************************************************************

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读