目录
7.1 文本处理函数
7.1.1 upper
?7.1.2 lower
7.1.3 substring
?7.1.4 length
7.1.5 left
?7.1.6 right
?7.2 时间函数
7.3 组合查询/并查询
7.4 关系型数据库的三大范式
7.5 视图?
7.1 文本处理函数
作用:这些函数是为了处理文本使用的
7.1.1 upper
只针对于英文字母 把英文字母转换成大写
语法:upper(列名)
select upper(列名) as 大写 from 表名;
?7.1.2 lower
只针对于英文字母 把英文字母转换成小写
select lower(列名) as 小写 from 表名;
7.1.3 substring
substring(列名, 开始位置): 从开始位置截取到末尾 包含第三个字符
select substring(列名, 开始截取的位置) as 截取 from 表名;
substring(列名, 开始位置, 长度):从开始位置开始 截取指定长度的字符?
select substring(列名, 开始截取的位置, 长度) as 截取 from 表名;
?7.1.4 length
length(列名):返回当前列下所有数据的长度
select length(列名) as 长度 from 表名;
locate(要查找的字符, 列名): 要查找的字符去指定列中 查找第一次出现的位置 如果找到则返回对应的位置 如果没有则返回0
select locate('8', teachertel) as `index` from teacherinfo;
?# `:撇点 ?因为index是mysql中的关键字 但是如果你想使用这个关键字当成一个普通的名字 则使用撇点包裹起来 就会被认为是一个普通的名字
locate(要查找的字符, 列名, 开始位置):从指定的开始位置开始 去查找字符 找到则返回对应的位置 如果没有则返回0
7.1.5 left
left(列名, 长度):从左往右截取指定长度的字符
select left(列名, 要截取的长度) as 截取后 from 表名;
?7.1.6 right
right(列名, 长度):从右往左截取指定长度的字符
select right(列名, 要截取的长度) as 截取后 from 表名;
?7.2 时间函数
操作时间的函数
mysql更加支持四位数的年份
所以日期时间的格式是 yyyy-MM-dd HH:mm:ss
y: year
m: month
d: day
H: hour
m: minute
s: second
now(列名):获得当前时间的年月日 时分秒
year(列名): 获得时间的年份
month(列名):获得时间的月份
day(列名):获得时间的天数部分
hour(列名):获得时间的小时部分
minute(列名):....分钟部分
second(列名): 秒钟部分
案例:分别获得一个时间的年月日 时分秒
select year(stujointime), month(stujointime), day(stujointime),
hour(stujointime), minute(stujointime), second(stujointime) from studentinfo;
time(列名):获得时间部分
date(列名):获得日期部分
select time(stujointime), date(stujointime) from studentinfo;
curtime():获得当前日期时间的时间部分
curdate():获得当前日期时间的日期部分
select curtime(), curdate();
adddate(列名, 天数):在指定的时间上往前或者往后推移指定天数
天数是负数 则往前推移 如果是正数 则往后推移
select adddate(stujointime, -1) from studentinfo;
adddate(列名,INTERVAL 数量 单位):在指定的时间上推移指定数量单位的时间
单位:YEAR 年,MONTH 月,DAY 天,HOUR 小时,MINUTE 分钟,SECOND 秒钟,WEEK 周,YEAR_MONTH 年和月,DAY_HOUR 天和时,DAY_MINUTE 天和分钟,DAY_SECOND 天和秒钟,HOUR_MINUTE 小时和分钟,HOUR_SECOND 小时和秒钟,MINUTE_SECOND 分钟和秒钟
多个单位的数量书写方式: 数量1和数量2之间可以使用任意符号
"数量1-数量2"
data_add()这个函数和adddate(列名,INTERVAL 数量 单位) 使用方法一致
datediff(大的时间,小的时间)计算两个时间的差值 返回值是一个天数
select datediff(now(), stujointime) as 时间差 from studentinfo;
dayofweek():获得当前时间在这一周中是第几天 星期天是一周的第一天 星期六是一周的最后一天
所以 一周有7天 数字为7则表明是星期6 数字为1表明周日
4-> 周三
6-> 周五
select DAYOFWEEK(now()) as 第几天;
7.3 组合查询/并查询
概念:把多个结构相同的查询语句查询的结果 放到一个结果集中显示
关键字:union/union all
union:把多个结果组合在一起之后 会去掉重复的数据
union all:会显示所有的数据 不管数据是否重复
例:基于products表。假如需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。当然,可以利用WHERE子句来完成此工作,不过这次我们将使用UNION。
select vend_id,prod_id,prod_price from products where prod_price <= 5
union all
select vend_id,prod_id,prod_price from products where vend_id in(1001,1002);
# 注意事项:
1.如果组合查询中 组合了多个sql语句 那么分好一定要写在最后一条中
2.两条sql语句之间 需要使用一个union关键字组合起来 2条就一个关键字 3条就2个关键字 以此类推...
3.在组合查询中 结构一定是相同或者相似(数据类型) 如果结构不一致 那么不会报错 只会认为这个数据无效 可读性很差
4.在组合查询中 只能在最后一条sql语句中 添加排序和分组
7.4 关系型数据库的三大范式
范式一:表中的每一条数据 都是不可分割的一条数据 ?一个单元格只能存放一个数据 范式二:要求数据库表中的每个实例或行必须可以被惟一地区分。 你在创建表的时候 一定要给每一个表添加一个唯一的标识列 主键列 范式三:要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。不是相同类别或者性质的数据 不要放到一个表中。
7.5 视图?
是一种查询的优化? ? ?作用:可以简化复杂的查询
创建视图:
create view 视图名 as 查询语句; 想到于把查询语句的结果储存到该视图中.
create view 学生总分表 as
select stuid, stuName, sum(examResult) as 总分 from studentinfo left join studentexam
on stuid = estuid group by estuid;
select * from 学生总分表;
# 注意事项:视图中的数据是根据表来进行变化的
# 视图的本意:不是用来修改数据的 而是用来查看数据的 视图的操作中 一般 只会用来做查询
# 只牵扯到一个表的视图 可以被修改
# 如果修改了视图 那么表中的数据也会跟着变化
# 视图也是一个表 视图不允许重名(包括表名)
# 如果想修改视图的内容 只能先删除视图 后修改SQL语句在重新执行
drop view if exists 学生部分信息表;
if exists:判断当前的视图是否存在 如果存在 则删除成功 不存在也不会产生报错
|