Mysql中对表进行简单查询的操作

首先,创建一个表格,命名为student。
这里写图片描述
插入数据:
这里写图片描述
前边查询时,我们经常会用到查询所有的,一旦有大量数据时,这样查询的效率就会很低。
这里写图片描述

1.指定查询内容

select id, name, math from student;
这里写图片描述

2.去重查询

select distinct math from student;
distinct如果结果中有相同的,去除重复的。
这里写图片描述

3.在select语句中进行运算并且起别名

例3.1:查询学生总成绩

select id, name, (chinese+math+english) from student;
这里写图片描述
我们会想到这样的查询方式,但是看起来不是很方便,就有了下边的这种起别名的方式。
select id, name, (chinese+math+english) as ‘总成绩’ from student;
这里写图片描述
将所有姓唐的同学总成绩增加60%
select id, name, (chinese+math+english)*1.6 as ‘总成绩’ from student
where name like ‘唐%’;
这里写图片描述

4.select的where语句

使用where语句,进行查询过滤。

例4.1:查询所有姓李的学生信息以及总成绩

select id, name, (chinese+math+english) as ‘总成绩’ from student
where name like ‘李%’;
这里写图片描述

例4.2:查询所有英语成绩大于90的同学信息

select id, name, english from student
where english > 90;
这里写图片描述

例4.3:查询所有总分大于200分的同学

按照我们的正常思路来说应该需要这样得查询语句。
select id, name, (chinese+math+english) as ‘总成绩’
from student
where ‘总成绩’ > 200;
这里写图片描述
发现查询结果为空,这是为什么呢?
因为该select语句中先执行where语句,再执行select语句。所以,’总成绩’这个字段不会被查询到。所以,where语句中不能使用别名。
select id, name, (chinese+math+english) as ‘总成绩’
from student
where (chinese+math+english) > 200;
这里写图片描述

例4.4:查询姓李并且id小于10的学生信息(and)

select id, name
from student
where name like ‘李%’ and id < 10;
这里写图片描述

例4.5:查询英语成绩大于语文成绩的同学

select id, name
from student
where english > chinese;
这里写图片描述

例4.6:查询所有总分大于200并且数学成绩小于语文成绩的姓唐的学生信息

select id, name
from student
where (chinese+math+english) > 200 and math < chinese and name like ‘唐%’;
这里写图片描述

例4.7:查询所有英语成绩在80~90分的同学信息

select id, name
from student
where english>=80 and english<=90;
这里写图片描述
也可以这样写。
select id, name
from student
where english between 80 and 90;
这里写图片描述
注意:between…and只能用于闭区间。

例4.8:查询数学成绩为89,90,91的同学信息

select id, name
from student
where math=89 or math=90 or math=91;
这里写图片描述
也可以这样写。
select id, name
from student
where math in(89,90,91);
这里写图片描述
表示若干个特定值,可以用in。

总结:

like 模糊查询
not like
and
or
between … and

5.select order by(排序)语句

a.默认升序(asc),如果要降序使用关键字desc
b. order by语句一定放在语句结尾

例5.1:对数学成绩排序

select math from student order by math asc;
这里写图片描述

例5.2:总成绩从高到低输出

select (chinese+math+english) as ‘总成绩’
from student
order by ‘总成绩’;
这里写图片描述
order by可以使用别名,是与where语句不同的。
原因是order by进行排序时,会先拿到数据进行,然后进行排序。

例5.3:对所有姓李的学生按照成绩进行倒序排序

select id, name, (chinese+math+english) as ‘总成绩’
from student
where name like ‘李%’
order by 总成绩 desc;
这里写图片描述

6.常用函数

a.count()或count(列名):统计数量

只能用于数值型。

例6.1:统计当前表中一共有多少学生

select count(*) as ‘学生人数’
from student;
这里写图片描述

例6.2:统计一个班中数学成绩大于等于90的学生人数

select count(*) as ‘学生人数’
from student
where math >= 90;
这里写图片描述
说明:count(*)会统计为null的情况,count(列名)不会统计为空的情况

select count(*) from student;
select count(math) from student;
这里写图片描述
通过比较,可以看出count(列名)为空的不会统计。

b.sum()

只能用于数值型。

例6.3:统计一个班的数学总成绩

select sum(math)
from student;
这里写图片描述

例6.4:统计一个班的所有成绩的总成绩

select sum(chinese),sum(math),sum(english)
from student;
这里写图片描述

c.avg()

只能用于数值型。

当我们学过了sum和count函数,将这两个函数结合使用就可以计算平均成绩。
select sum(math)/count(math) as ‘平均成绩’
from student;
这里写图片描述

例6.5:全班数学成绩的平均分

select avg(math)
from student;
这里写图片描述
我们发现avg函数求均分的时候是不包括null的。

d.max(),min()

只能用于数值型。

例6.6:求一个班级的最高分以及最低分

select max(chinese+math+english) as ‘最高成绩’,
min(chinese+math+english) as ‘最低成绩’
from student;
这里写图片描述

e.日期函数

函数表示含义
current_date()当前日期
current_time()当前时间
current_timestamp当前时间戳
date(datetime)返回datetime的日期部分
date_add(date,interval d_value_d_type)在date上加上日期或时间
data_sub(date,interval d_value_d_type)在date上减去日期或时间
datedeff(date1,date2)两个日期差
now()当前时间

这里写图片描述
这里写图片描述

说明:

* date_add()和date_sub()中的interval后面可以是year minute second day
* datediff(data1,date2)得到的是天数,date1-date2.

例6.7:创建一张用于记录生日的表

这里写图片描述
添加当前日期
insert into tmp values(1,current_date());
这里写图片描述
创建一张留言表
这里写图片描述
查询在十分钟内发布的帖子
select * from msg where date_add(sendtime, interval 10 minute) > now();
这里写图片描述

f.字符串函数

函数表达含义
charset(str)返回字符串字符集
concat(stri1,str2,…)连接字符串
instr(str,substr)返回substr在str中出现的位置,没有则返回0
ucase(str)将str转换成大写
lcase(str)将str转换成小写
left(str,length)从str中的左边开始取length个字符
length(str)str的长度
replace(str,search_str,replace_str)在str中用replace_str替换search_str
strcmp(str1,str2)逐字符比较两字符串大小
substring(str,pos[,length])从str的pos位开始,取length个字符
ltrim(str)、rtrim(str)、trim(string)去除前空格或后空格

例6.8:获取msg表列的字符集

这里写图片描述

例6.9:要求将student表中的数据格式化输出。

格式为XXX的语文成绩为XXX,数学成绩为XXX,英语成绩为XXX。
select concat(name,’的语文成绩,’,chinese,’数学成绩,’,math,’英语成绩,’,english) as ‘分数’
from student;
这里写图片描述

例6.10:获取学生表中姓名占用的字节数

select length(name), name from student;
这里写图片描述

例6.11:将student表中所有姓名中带‘红’的替换为’上海’

select replace(name,’红’,’上海’),name from student;
这里写图片描述
这里写图片描述
注意:replace只是在查询的时候替换,不会改变原表。

例6.12:以首字母小写的形式展示所有员工的姓名(组合使用)

select concat(lcase(substring(name,1,1)),substring(name,2)) from student;
这里写图片描述

g.常用的数学函数

函数含义
abs(number)绝对值
bin(number)十进制转二进制
ceiling(number)向上取整
conv(number,from_base,to_base)进制转换
floor(number)向下取整
format(number,decimal_places)保留小数位数(小数四舍五入)
hex(decimal_num)转换成16进制
rand()返回随机浮点值,范围0~1
mod(num,denominator)余数

h.其他常用函数

user():查询当前用户
mds(str):对一个字符串str进行加密
password():对mysql用户加密
ifnull(val1,val2):如果val1为null,返回val2,否则返回val1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值