mysql从第⼏位开始截取_MySQL提⾼篇
⼀、常⽤函数
1.字符串函数
concat(s1,)拼接字符串
select concat('aa','bb','cc');
select concat('aa','bb','cc') from dual;-- dual 为虚表
select concat('编号为',empno,'的员⼯,姓名为:',ename) from emp;
注:dual表是MySQL提供的⼀张虚拟表,主要是为了满⾜语法习惯,⼀般测试时使⽤,⽆实际意义
lower(s)将字符串变为⼩写select lower('Hello') from dual;
upper(s)将字符串变为⼤写select upper('Hello') from dual;
length(s)获取字符串的长度select length('hello') from dual;
reverse(s)将字符串反转select reverse('hello') from dual;
trim(s) 将字符串两边的空格select trim(' hello ') from dual;还有ltrim()和rtrim(),去除左边或右边的空格
replace(s,s1,s2)将字符串s中的s1替换为s2select replace('hello world','o','xx') from dual;
repeat(s,n)将字符串s重复n次返回select repeat('hello',3) from dual;
lpad(s,len,s1)在字符串的左边使⽤s1进⾏填充,直⾄长度为len select lpad('hello',8,'x') from dual;
rpad(s,len,s1)在字符串的右边使⽤s1进⾏填充,直⾄长度为len select rpad('hello',8,'x') from dual;
substr(s,i,len)从第i(i从第1开始计数)个位置开始对字符串s进⾏截取,截取len个select substr('hello',2,3) from dual;
2.数值函数
ceil(n)返回⼤于n的最⼩整数select ceil(10.1) from dual;
floor(n)返回⼩于n的最⼤整数select floor(10.1) from dual;
round(n,y)将n保留y位⼩数,四舍五⼊select round(3.1415,3) from dual;
truncate(n,y)将n保留y位⼩数,不会进⾏四舍五⼊select truncate(3.1415,3) from dual;
rand(),返回0到1的随机数select rand() from dual;
3.⽇期和时间函数
now()返回当前的⽇期时间select now() from dual;
curdate()返回当前⽇期select curdate() from dual;
curtime()返回当前时间select curtime() from dual;
year(date)返回⽇期中的年select year('2018-2-14') from dual;
month(date)返回⽇期中的⽉份select year('2018-2-14') from dual;
day(date)返回⽇期中的⽇select day('2018-2-14') from dual;
timestampdiff(interval,datetime1,datetime2)返回两个⽇期时间之间相隔的整数,单位由interval定义,
interval可取值:year、month、day、hour、minute、second select timestampdiff(day,'1993-9-23','2018-11-22') from dual;
date_format(date,pattern)格式化⽇期select date_format(now(),'%m⽉%d⽇%Y年 %H:%i:%s') from dual;
格式化参数:
%Y表⽰四位数字的年
%m表⽰两位数字的⽉
%d表⽰两位数字的⽇
%H表⽰两位数字的⼩时,24⼩时制
%h表⽰两位数字的⼩时,12⼩时制
%i表⽰两位数字的分钟
%s表⽰两位数字的秒数
4.流程控制函数
if(f,v1,v2)如果f为真,则返回v1,否则返回v2select if(5>2,'yes','no') from dual;
ifnull(v1,v2)如果v1不为null,则返回v1,否则返回v2select ifnull(null,0) from dual;
lse
else v end
end 如果f1为真,返回v1,流程结束;再判断如果f2为真,则返回v2...否则返then v1 when
when f2 then
case when
case when f1 then
回v
select case when 5>2 then 'yes' end from dual;
select case when 5<2 then 'yes' else 'no' end from dual;
select case when 5<2 then 'one' when 6>4 then 'two' else 'three' end from dual;
5.系统信息函数
database()返回当前操作的数据库select database() from dual;
user()返回当前登录的⽤户select user() from dual;
version()返回MySQL服务器的版本select version() from dual;
常⽤函数的练习:
1. 以⾸字母⼤写,其他字母⼩写的⽅式显⽰所有员⼯的姓名
select concat(upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)-1))) 姓名 from emp;
2. 将员⼯的职位⽤⼩写字母显⽰
select lower(job) from emp;
3. 显⽰员⼯姓名超过5个字符的员⼯名
select ename from emp where length(ename)>5;
4. ⽤#来填充员⼯职位job的结尾处,按10个字符长度输出。
select rpad(job,10,'#') from emp;
5. 去除字符串'  hello world  '两边的空格,并将单词间的空格改为','逗号。
select replace((select trim('  hello world  ') from dual),' ',',') from dual;
6. 以指定格式显⽰员⼯的奖⾦(格式:allen's comm is 300) 注:如果奖⾦为null显⽰为null,如smith 's comm is null。
select concat(ename,"'s comm is ",ifnull(comm,'null')) from emp;
7. 显⽰在⼀个⽉为30天的情况所有员⼯的⽇薪,忽略余数
select ceil(sal/30) from emp;
8. 显⽰员⼯在此公司⼯作了⼏个⽉
select ename,timestampdiff(month,hiredate,now()) from emp;
9. 显⽰所有12⽉份⼊职的员⼯
select * from emp where month(hiredate)=12;
10. 显⽰员⼯的年薪
select ename,(sal+ifnull(comm,0))*12 from emp;
11. 显⽰所有员⼯的姓名、加⼊公司的年份和⽉份,并且按照年份升序排列
select ename,year(hiredate) year,month(hiredate) month from emp order by year;
12. 求部门名称中带“s”字符的部门员⼯的⼯资合计、部门⼈数
select d.dname,t.unt
from dept d left join (select deptno,sum(sal+ifnull(comm,0)) sum,count(ename) count from emp group by deptno
) t on d.deptno=t.deptno where d.dname like '%s%';
13. 查询任职⽇期超过30年的员⼯,显⽰时将⽉薪加10%后显⽰
select ename,sal+sal*0.1 from emp where timestampdiff(year,hiredate,now())>30;
⼆、表和库的管理
1.数据类型
整数:tinyint、smallint、mediumint、int和bigint,共计5种
⼩数:float、double和decimal,共计3种
⽇期时间:date、time、datetime、timestamp
字符串:varchar、char、text 注:varchar为可变长度,char为固定长度
其他:clob 存储⽂本⼤数据
blob 存储⼆进制⼤数据
1.1 整数
mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表⽰的取值范围上是不同的。整数列可定义为unsigned
unsigned从⽽禁⽤负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较⼤的类型所需的存储量较⼤。
每种整数类型的名称和取值范围如图所⽰:
1.2 浮点型
不能是unsigned的,其取值范围也与整型不同,这种不同mysql 提供三种浮点类型: float、double和decimal。与整型不同,浮点类型不能是unsigned
不仅在于这些类型有最⼤值,⽽且还有最⼩⾮零值。最⼩值提供了相应类型精度的⼀种度量,这对于记录科学数据来说是⾮常重要的(当然,也有负的最⼤和最⼩值)。
每种浮点型的名称和取值范围如图所⽰:
2.创建表
语法:
create table 表名
(
列名数据类型特征,
列名数据类型,
.....
列名数据类型
) charset=utf8;
⽰例:创建⼀张表,存储⽤户信息
create table user
(
id int,
username varchar(20) ,
password varchar(50)
)
;
扩展:
create table t_student
(
id int primary key auto_increment,-- 将id作为主键,auto_increment为⾃动增加计数,默认从1开始,主键不能为空    name varchar(10) not null,-- not null不为空
age int,
sex varchar(8) not null default '⼥',-- default为设置默认值
address varchar(100),
height double,
birthday date
) charset=utf8;
插⼊数据
insert into t_student (name,age,sex,birthday,height) values ('范婷婷',18,'⼥','1998-12-4',170.6);
insert into t_student (age,sex) values (10,'男');
insert into t_student values (null,'程瑞',19,'男','南京',176.6,now());-- id 为⾃动增长,所以使⽤null代替
注:NULL与''有区别
3.修改表
添加列
语法:
alter table 表名 add 列名 数据类型;
⽰例:学⽣表新增体重列
alter table t_student add weight double;
修改列类型
语法:
alter table 表名 modify 列名 数据类型;
⽰例:学⽣表修改其中列
alter table t_student modify name varchar(250);
注:⼀般往长度⼤的改
修改列名
语法:
alter table 表名 change 原列名 新列名 数据类型;
⽰例:学⽣表修改性别列
alter table t_student change sex gender varchar(8);
删除列
语法:
alter table 表名 drop 列名;
⽰例:删除学⽣表体重列
alter table t_student drop weight;
修改表名
语法:
alter table 原表名 rename 新表名;-- 语法1
rename tabel 原表名 to 新表名;-- 语法2
mysql删除重复的数据保留一条
⽰例:学⽣表改为student
alter table t_student rename student;
rename table student to t_student;
4.删除表
语法:
drop table 表名;
drop table if exists 表名;-- 较多使⽤
⽰例:删除⽤户表
drop table user;
drop table if exists user;
5.截断表
清空表中的数据,作⽤类似于没有条件的delete语句
相当于delete from emp
语法:
truncate table 表名;
delete与truncate区别:
delete会记录⽇志,所以速度慢(数据量很⼤尤为明显);⽽truncate不记录⽇志,清空表并释放资源,速度快delete可以指定条件只删除表中的部分数据,⽽truncate只能⽤来清空表中的所有数据
delete不会将⾃动增长列归零,⽽truncate会
6.创建库
语法:
create database 数据库名 charset utf8;
create database if not exists 数据库名 charset utf8;-- 较多使⽤
⽰例:创建⼀个数据库
create database shop charset utf8;
create database if not exists shop charset utf8;-- 较多使⽤
7.删除库
语法:
drop database 数据库名;
drop database if exists 数据库名;-- 较多使⽤
⽰例:删除⼀个数据库
drop database shop;
drop database if exists shop;
8.备份表
8.1 导出数据
8.1.1 仅导出表内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。