首先,创建一个表格,命名为student。

MySql查询学分 mysql查询学生的总成绩_表


插入数据:

MySql查询学分 mysql查询学生的总成绩_mysql_02


前边查询时,我们经常会用到查询所有的,一旦有大量数据时,这样查询的效率就会很低。

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_03

1.指定查询内容

select id, name, math from student;

MySql查询学分 mysql查询学生的总成绩_select_04

2.去重查询

select distinct math from student;

distinct如果结果中有相同的,去除重复的。

MySql查询学分 mysql查询学生的总成绩_select_05

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

例3.1:查询学生总成绩

select id, name, (chinese+math+english) from student;

MySql查询学分 mysql查询学生的总成绩_数据库查询_06


我们会想到这样的查询方式,但是看起来不是很方便,就有了下边的这种起别名的方式。

select id, name, (chinese+math+english) as ‘总成绩’ from student;

MySql查询学分 mysql查询学生的总成绩_mysql_07


将所有姓唐的同学总成绩增加60%

select id, name, (chinese+math+english)*1.6 as ‘总成绩’ from student

where name like ‘唐%’;

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_08

4.select的where语句

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

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

select id, name, (chinese+math+english) as ‘总成绩’ from student

where name like ‘李%’;

MySql查询学分 mysql查询学生的总成绩_mysql_09

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

select id, name, english from student

where english > 90;

MySql查询学分 mysql查询学生的总成绩_表_10

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

按照我们的正常思路来说应该需要这样得查询语句。

select id, name, (chinese+math+english) as ‘总成绩’

from student

where ‘总成绩’ > 200;

MySql查询学分 mysql查询学生的总成绩_数据库查询_11


发现查询结果为空,这是为什么呢?

因为该select语句中先执行where语句,再执行select语句。所以,’总成绩’这个字段不会被查询到。所以,where语句中不能使用别名。

select id, name, (chinese+math+english) as ‘总成绩’

from student

where (chinese+math+english) > 200;

MySql查询学分 mysql查询学生的总成绩_select_12

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

select id, name

from student

where name like ‘李%’ and id < 10;

MySql查询学分 mysql查询学生的总成绩_表_13

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

select id, name

from student

where english > chinese;

MySql查询学分 mysql查询学生的总成绩_select_14

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

select id, name

from student

where (chinese+math+english) > 200 and math < chinese and name like ‘唐%’;

MySql查询学分 mysql查询学生的总成绩_mysql_15

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

select id, name

from student

where english>=80 and english<=90;

MySql查询学分 mysql查询学生的总成绩_mysql_16


也可以这样写。

select id, name

from student

where english between 80 and 90;

MySql查询学分 mysql查询学生的总成绩_表_17


注意:between…and只能用于闭区间。

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

select id, name

from student

where math=89 or math=90 or math=91;

MySql查询学分 mysql查询学生的总成绩_表_18


也可以这样写。

select id, name

from student

where math in(89,90,91);

MySql查询学分 mysql查询学生的总成绩_select_19


表示若干个特定值,可以用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;

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_20

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

select (chinese+math+english) as ‘总成绩’

from student

order by ‘总成绩’;

MySql查询学分 mysql查询学生的总成绩_表_21


order by可以使用别名,是与where语句不同的。

原因是order by进行排序时,会先拿到数据进行,然后进行排序。

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

select id, name, (chinese+math+english) as ‘总成绩’

from student

where name like ‘李%’

order by 总成绩 desc;

MySql查询学分 mysql查询学生的总成绩_mysql_22

6.常用函数

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

只能用于数值型。

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

select count(*) as ‘学生人数’

from student;

MySql查询学分 mysql查询学生的总成绩_select_23

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

select count(*) as ‘学生人数’

from student

where math >= 90;

MySql查询学分 mysql查询学生的总成绩_表_24


说明:count(*)会统计为null的情况,count(列名)不会统计为空的情况select count(*) from student;

select count(math) from student;

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_25


通过比较,可以看出count(列名)为空的不会统计。

b.sum()

只能用于数值型。

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

select sum(math)

from student;

MySql查询学分 mysql查询学生的总成绩_select_26

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

select sum(chinese),sum(math),sum(english)

from student;

MySql查询学分 mysql查询学生的总成绩_mysql_27

c.avg()

只能用于数值型。

当我们学过了sum和count函数,将这两个函数结合使用就可以计算平均成绩。

select sum(math)/count(math) as ‘平均成绩’

from student;

MySql查询学分 mysql查询学生的总成绩_表_28

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

select avg(math)

from student;

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_29


我们发现avg函数求均分的时候是不包括null的。

d.max(),min()

只能用于数值型。

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

select max(chinese+math+english) as ‘最高成绩’,

min(chinese+math+english) as ‘最低成绩’

from student;

MySql查询学分 mysql查询学生的总成绩_数据库查询_30

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()

当前时间

MySql查询学分 mysql查询学生的总成绩_数据库查询_31


MySql查询学分 mysql查询学生的总成绩_mysql_32

说明:

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

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

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_33


添加当前日期

insert into tmp values(1,current_date());

MySql查询学分 mysql查询学生的总成绩_表_34


创建一张留言表

MySql查询学分 mysql查询学生的总成绩_MySql查询学分_35


查询在十分钟内发布的帖子

select * from msg where date_add(sendtime, interval 10 minute) > now();

MySql查询学分 mysql查询学生的总成绩_数据库查询_36

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表列的字符集

MySql查询学分 mysql查询学生的总成绩_表_37

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

格式为XXX的语文成绩为XXX,数学成绩为XXX,英语成绩为XXX。

select concat(name,’的语文成绩,’,chinese,’数学成绩,’,math,’英语成绩,’,english) as ‘分数’

from student;

MySql查询学分 mysql查询学生的总成绩_mysql_38

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

select length(name), name from student;

MySql查询学分 mysql查询学生的总成绩_数据库查询_39

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

select replace(name,’红’,’上海’),name from student;

MySql查询学分 mysql查询学生的总成绩_表_40


MySql查询学分 mysql查询学生的总成绩_mysql_41


注意:replace只是在查询的时候替换,不会改变原表。

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

select concat(lcase(substring(name,1,1)),substring(name,2)) from student;

MySql查询学分 mysql查询学生的总成绩_表_42

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.