在数据库的学习和使用中,表的查询一直是使用非常多的一种操作,也是最为重要的一种操作。
首先,我们先创建一个表,并插入一些数据,以下的查找都是基于这张表的。
基础查询
在写查询语句的时候一定要清楚查询的是什么,看清楚主语,接下来跟查询的限制条件或者排序等关键字。
1. select指定查询内容,多个内容之间以逗号分隔;
例如:查找学生的id,姓名和数学成绩
2. 去重查询(distinct)
在上面的七个数学成绩中,有两个90,去重查询,就是查到的数据中只有一个90;
3. 在select语句中进行运算并起别名(as关键字)
查询学生的总成绩:
4. where子句
a. “like,not like”模糊查询;
查询所有姓李的学生信息以及总成绩
b. where子句后不能使用别名,因为语句的执行时有先后顺序的;
查询总分大于200的同学信息:
c. between…and… and or in
查询所有英语成绩在80-90之间的同学信息(between…and..):
查找总分大于200并且数学成绩小于语文成绩的姓唐的同学(and):
查询数学成绩在89,90,91的同学信息(or、in):
5. select order by子句
a. 默认是升序,如果需要降序排列,使用关键字desc;
对英语成绩进行降序排列:
b. order by语句一定要放在查询语句的结尾
c. order by是可以使用别名的;
6. 常用函数
a. count(*)统计一共有多少条记录,count(列名)统计此列中不为null的记录
统计表中一共有多少名数学成绩大于等于90的学生:
b. sum 求和
统计一个班的数学总成绩:
c. avg 求平均值,如果记录中有null,则去掉null后在求平均值
d. max/min 求最大值/最小值
统计一个班总成绩中的最高分和最低分
7. group by子句
a. 对属性进行分组
b. 多次分组,不同分组之间按照”,”分隔,并且有先后顺序
显示每个部门每种岗位的平均工资和最高工资:
c. 在group by子句中,要想进行条件过滤,只能使用having语句,having语句也只能作用于group by语句。
显示平均工资低于2000的部门编号和平均工资:
常用函数
1. 日期函数
select current_date(); /*返回当前日期*/
select current_time(); /*返回当前时间*/
select current_timestamp(); /*返回年月日 时分秒*/
select datediff(date1,date2); /*两个时间差 以天为单位*/
select date_add(date,interval d_value_d_type); /*返回当前日期+相应天数后的日期*/
例如:
2. 字符串函数
charset(str); /*返回字符串字符集*/
concat(string2[,...]); /*连接字符串*/
ucase(string2) /*转换为大写*/
lcase(string2) /*转换为小写*/
length(string) /*求string的长度*/
instr(string,substring) /*返回substring在string中出现的位置,没有返回0*/
left(string2,length) /*从string2中的左边起取length个字符*/
replace(str, search_str, replace_str) /*str中用replace_str替换search_str*/
strcmp(string1,string2) /*逐字符比较两个字符串的大小*/
substring(str, position [,length]) /*从str的position开始,取length个字符*/
要求将student表中的数据格式化输出,格式为:xx的语文成绩是xx,数学成绩是xx,英语成绩是xx:(使用字符串连接的函数)
要求查看student表中的姓名的字节数:
将student表中名字有“李”的替换为“小李”:
截取student表中name中的第二个到第三个字符:
3. 常用数学函数
函数 | 作用 |
---|---|
abs | 求绝对值 |
bin | 十进制转换为二进制 |
ceiling | 向上取整 |
conv | 进制转换 |
flooer | 向下取整 |
format | 保留小数位数 |
hex | 转换为十六进制 |
rand() | 返回随机浮点数值,范围0到1 |
mod | 余数 |
例如:
4. 其他函数
user()查询当前用户
md5(str)可以对一个字符串进行md5加密,得到一个32位的字符
database()正在使用的数据库
password()对mysql用户加密
ifnull(val1, val2)如果val1为Null,返回val2,否则返回val1
例如: