获取部分行
当数据量过大时,在一页中查看数据是一件非常麻烦的事情语法
select * from 表名 limit start,count说明
从start开始,获取count条数据 --限制查询出来的个数 select * from students where gender=1 limit 2; --查询前5个数据 select * from students limit 0, 5; --查询6-10(包含)的数据 select * from students limit 5, 5; --每页显示2个,第1个页面 select * from students limit 0, 2; --每页显示2个,第2个页面 select * from students limit 2, 2; --每页显示2个,第3个页面 select * from students limit 4, 2; --每页显示2个,第4个页面 select * from students limit 6, 2; -- ---> limit (第n页-1)*每个的个数,每一页的个数; --每页显示2个,显示第6也的信息,按照年龄从小到大排序 --错误的查询方法1:select * from students limit 2*(6-1), 2; --错误的查询方法2:select * from students limit 10, 2 order by age asc; select * from students order by age asc limit 10, 2; select * from students where gender=2 order by height desc limit 0, 2;mysql支持三种类型的连接查询,分别为:
内连接查询:查询的结果为两个表匹配到的数据外链接分为“左链接与右链接”
左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充 右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充语法
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列内链接查询示例:
取交集 --查询 有能够对应班级的学生以及班级信息 select * from students inner join classes on students.cls_id=classes.id; --按照要求显示姓名、班级 select students.*,classes.name from students inner join classes on students.cls_id=classes.id; select students.name,classes.name from students inner join classes on students.cls_id=classes.id; --给数据表起名字 select s.name,c.name from students as s. inner join classes as c on s.cls_id = c.id; --查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称 select s.*,c.name from student as s inner join classes as c on s.cls_id=c.id; --在以上的查询中,将班级姓名显示在第1列 select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id; --查询 有能够对应班级的学生以及班级信息,按照班级进行排序 select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name; --当是同一个班的时候,按照学生的id进行从小到大排序 select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;左链接查询示例:
在左边的表,以该表为基准去取数据,取不到的,默认为NULL --查询每位学生对应的班级信息 select * from students as s left join classes as c on s.cls_id=c.id; --查询没有对应班级信息的学生 select * from students as s left join classes as c on s.cls_id=c.id having c.id is null; select * from students as s left join classes as c on s.cls_id=c.id where c.id is null; 使用 having与where都可以实现,但是两者的区别在哪里呢? 如果是从原表里判断结果,那么就使用 where如果是从查到的新的结果当作一个结果集的话,在结果集中判断结果,那么就使用 having右链接查询示例:
在右边的表,以该表为基准去取数据,取不到的,默认为NULL一般情况下不常用,因为将两个表名字互换一下位置,用left join 亦可完成