MySQL 学习笔记(2):查询语句

如图所示是我们接下来要用到的students表:

 一、别名与重复记录

1.查询所有字段

select * from 表名;

例:查询students表的所有信息 

select * from students;

2.查询指定字段

select 字段1,字段2, ... from 表名;

例:查询students表的name,sex,age字段

select name,sex,age from students;

 3.字段的别名    同理表也可以起别名

select 字段名 (as) 别名 from 表名;

  • 通过 字段名 as 别名,给字段起别名,别名可以是中文
  • as可以省略

例:students表中name字段、sex字段、age字段别名分别为姓名、性别、年龄

select name as 姓名,sex as 性别,age as 年龄 from students;

select name  姓名,sex  性别,age  年龄 from students;

4.消除重复记录(不会改变原表内容)

select distinct 字段名 from 表名;

  • 通过select distinct 字段名,字段名 from 表名 过滤select查询结果中的重复记录

例:查询students表中的sex字段,用distinct取消重复记录

select distinct sex from students;

二、条件查询

1.where子句

select 字段1,字段2, ... from 表名 where 条件;

  • select 后面*或字段决定返回的字段(列)
  • select中where子句决定返回的记录(行)

例:查询students表中年龄age大于30的姓名name,班级class

select name,class from students where age>30;

2.比较运算符

等于=
大于>
大于等于>=
小于

<

小于等于<=
不等于!= 或 <>

例1:查询students表中姓名name等于'小乔'学生的年龄age 

select age from students where name='小乔';

例2:查询students表中年龄30以下的学生

select * from students where age<30;

例3:查询students表中家乡不在北京的学生

select * from students where hometown<>'北京';

3.逻辑运算符

3种:add(与)、or(或)、not(非)

例1:查询老家hometown是河南或河北的学生

select * from students where hometown='河南' or hometown='河北';

例2:查询班级class为1班且老家hometown为北京的学生

select * from students where class='1班' and hometown='北京';

例3:查询年龄age不是30的学生

select * from students where not age='30';

4.模糊查询 like

  • %表示任意多个任意字符
  • _表示一个任意字符

例1:查询姓名name为两个字的学生

select * from students where name like '__';

例2:查询name姓白且年龄age大于30的学生

select * from students where name like '白%' and age>30;

例3:查询学号studentNo以1结尾的学生

select * from students where studentNo like '%1';

 5.范围查询

  • in(值1,值2,值3):非连续范围
  • between 值1 and 值2:连续范围

例1:查询年龄age在20或25或30的女生

select * from students where age in (20,25,30) and sex='女';

例2:查询年龄age在25到30以外的学生

select * from students where not age between 25 and 30; 

6.空判断

判断空:is null 不能用 字段名 =null

判断非空:is not null

  • null与 ''是不同的
  • null:代表什么都没有
  • '':代表长度为0的字符串

7.where子句用在update和delete中

例1:修改students表中姓孙的同学,班级为1班

update students set class='1班' where name like'孙%';

例2:删除students表中年龄在20到30之间所有的男同学

delete from students where (age between 20 and 30 )and sex='男';

三、排序

select * from 表名

order by 字段1 asc|desc,字段2 asc|desc, ...

  • asc代表升序,为默认值可以省略
  • desc代表降序

例1:查询students表中所有学生信息,按年龄age从大到小排序,年龄相同时,再按学号studentNo从小到大排序

select * from students order by age desc,studentNo;

例:查询students表中所有男学生信息,按班级class从小到大排序,班级相同时,再按studentNo学号从大到小排序

select * from students where sex ='男' order by class,studentNo desc;

四、聚合函数

  • 聚合函数不能再where后面条件中使用
  • 聚合函数不能与普通字段同时出现:select name,max(age) 错误

1.count 总记录数

count(字段)

例:查询性别sex为女的学生总数

select count(*) from students where sex='女';

2.max 最大值

max(字段)

例:查询性别sex为女的最大年龄age

select max(age) from where sex='女''

3.min 最小值

4.sum 求和

sum(字段)

例1:查询students中年龄总和:

select sum(age) from students

5.avg 求平均值

avg(字段)

  • avg计算平均值时忽略null值

例1:查询所有学生的最大年龄、最小年龄、平均年龄

select max(age),min(age),avg(age) from students;

例2:查询3班年龄小于30岁的学生有几个

select count(*) from students where age<30 and class='3班';

五、数据分组

1.分组group by   配合聚合函数使用

select 字段1,字段2,... 聚合函数... from 表名 group by 字段1,字段2,...

例1:查询各个年龄段的同学数量

select age,count(*) from students group by age;

例2:分别查询1班不同性别学生数量

select sex,count(*) from students where class='1班' group by sex;

例3:统计各个班级学生总数、平均年龄、最大年龄、最小年龄

select class,count(*),avg(age),max(age),min(age) from students group by class;

例4:统计各个班级学生总数、平均年龄、最大年龄、最小年龄。但不统计3班,统计结果按班级名称从大到小排序

select class,count(*),avg(age),max(age),min(age) from students where class<>'3班' group by class order by class desc;

where、group by、oder by的顺序:

select * from 表名 where 条件 group by 字段 order by 字段;

 2.分组后的数据筛选

select 字段1,字段2,聚合 ... from 表名

group by 字段1,字段2,...

having 字段1,...聚合...

  • where先筛选符合,再统计聚合
  • having先统计聚合,再筛选符合,只能出现在group by后面
  • having后面可以用聚合函数,而where不能使用

例1:求班级人数大于3人的班级名字

select class from students group by class having count(*)>3;

例2:查询平均年龄大于30岁的班级名称和班级总人数

select class,count(*) from students group by class having avg(age)>30;

六、数据分页显示

1.limit 显示指定记录数

select * from 表名 limit start,count;

  • limit总是出现在select语句最后
  • start代表开始行数,count代表显示行数
  • 省略start默认从0开始,从第一行开始

例1:查询从第4条记录开始的三条记录

select * from students limit 3,3;

例2:查询年龄最大的女学生信息

select * from students where sex ='女' order by age desc limit 1;

2.分页

已知:每页显示m条数据,求:查询第n页的数据

select * from 表名 limit (n-1)*m,m;

例1:每页显示4条数据,查询第3页的数据

m=4,n=3,(n-1)*m=8

select * from students limit 8,4;

例2:查询students表,要求每页显示5条记录,每页用一条select语句,分别用多条select语句,显示葱第一页到最后一页的数据

students表中一共有12条数据

select * from students limit 5;

select * from students limit 5,5;

select * from students limit 10,2;

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值