SELECT语句返回所有符合条件的行!
使用情景:我们想要SELECT查询出来的数据第一行或者前几行记录,或者要对查询出来的记录进行分页。
1.查询案例递进
查询问题1:查询出来所有商品的名称。
查询SQL: SELECT prod_name FROM Products;
查询结果:
查询问题2:查询出来所有商品名称,但是每一种商品名称只可以出现一次。
查询结果:
查询问题3:查询出来所有的商品,但相同名称的商品只出现1次,只取出前5条数据。
查询SQL:SELECT DISTINCT prod_name FROM Products LIMIT 5;
2.LIMIT说明
2.1 LIMIT num1,num2
命令解释:
1.num1和num2是数字;
2.mysql的第一行是从行0开始,即num1最小值是0而非1;有过编程经历的人都知道,索引值的第一位通常是0;
num1表示开始位置,即从哪里开始;num2表示要查询的行数,即取出来几条数据,所以LIMIT num1,num2是命令mysql返回num1行开始后的总条数是num2的若干行。比如LIMIT 2,3的含义是取出行2(第3行)开始后的3行数据,即行2(第三行)、行3(第四行)、行4(第五行)。
类比现实:小学5年级排成1队从左边起第3个人(从哪开始)开始出来2个(个数)人,就是第3个人和第4个人出队;
案例SQL:
结果分析:
SELECT DISTINCT prod_name FROM Products;查询的是全部符合条件的数据,共9条。
SELECT DISTINCT prod_name FROM Products LIMIT 1,3;查询的是从行1开始后的3条数据。从图标中可以看到是取出来的数据是第2,3,4行数据
2.2.LIMIT num2
命令解释:请参考LIMIT num1,num2命令来对比理解LIMIT num2.
1.num2是数字,要查询出来的行数。如果不告诉从哪里开始取值,只告诉取出来个数,那么就存在随便从哪个位置开始,然后取出来num2条数据;
LIMIT num2等价于LIMIT 0,num2,即从行0记录开始,查询出来num2条记录。因此可以知道LIMIT num2,不是随意位置乱取数据,而是从行0记录开始,查询出来num2条记录。
SELECT DISTINCT prod_name FROM Products LIMIT 2;
结果分析:表示告诉mysql返回从行0记录开始的后面2行记录。参考上图对比,取出来的记录是行0,行1记录。
2.3注意事项
a.行号,是指计算机对数据的索引值,计算机识别的顺序。行号从0开始,检索的第1个数据的索引值是行0;
b.第几行,是指人的对数据的索引值的识别顺序,人查询个数从1开始,查询的第1个数据的索引值是1而非0;
c.案例a、b、c、d四条记录,计算机索引值说b的行号是1,人的常规认识说b是第2行数据.
d.如果记录不够,比如一共就10条记录,现在要查询LIMITE 9,5;没有足够的行数,那么mysql有多少行就返回多少行。mysql不会进行无中生有。
2.4LIMIT新语法
鉴于LIMIT num1,num2语法可能引起误解,从行num1开始获取num2条数据。MySql5支持LIMIT的新语法。
语法如下:LIMIT num2 OFFSET num1
新语法简单明了,OFFSET是偏移的意思,从num1位置偏移num2.
从上面案例可以看出,LIMIT 3 OFFSET 2,从行2开始获取3条记录。
2.5LIMIT使用场景
1.使用LIMIT进行数据分页;
2.想要查询某种条件的数据是否存在,可以使用LIMIT 1;