mysql函数、约束、多表查询命令

阅读: 评论:0

mysql函数、约束、多表查询命令

mysql函数、约束、多表查询命令

1.函数

函数是指一段可以直接被另一端程序调用的程序或代码

mysql中的函数主要有字符串函数、数值函数、日期函数、流程函数

操作函数的语法:select 函数(参数);

1.字符串函数
mysql中内置了很多字符串函数,常用的几个如下:
函数                                            功能
coucat(sn)                   字符串拼接,将s1&#sn拼接成一个字符串
lower(str)                           将字符串str全部转换为小写
upper(str)                           将字符串str全部转换为大写
lpad(str,n,pad)                      左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)                      右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)                            去掉字符串头部和尾部的空格
substring(str,start,len)             返回从字符串str从start位置起的len个长度的字符串举例:
select concat('Hello','mysql');                          结果:Hello mysql
select lower('WANGLEI');                                 结果:wanglei
select upper('wanglei');                                 结果:WANGLEI
select lpad('WL',5,'*');                                 结果:***WL
select rpad('王磊',8,'*');                               结果:王磊******
select trim('    世界     你好    ');                     结果:世界     你好
select substring('王磊平常心',1,2);                       结果:王磊                          

案列:现在统一将学生的编号变成5位,不足5位的,在编号左边补0

修改数据:update 

updata sheet set id = lpad(id,10,'*');

上面是修改之前表的数据

上面是修改之后的数据

2.数值函数
常见的数值函数如下:
函数                                      功能
ceil(x)                                 向上取整
floor(x)                                向下取整
mod(x,y)                                返回x/y的模
rand()                                  返回0~1内的随机数
round(x,y)                              求参数x的四舍五入的值,保留y位小数举例:
select ceil(1.5);                                结果:2
select floor(1.9);                               结果:1
select mod(7,5);                                 结果:2
select rand();                                   结果:0.8341995001157742
select round(3.144,2);                           结果:3.14

案列:通过数据库的函数,生成一个六位数的随机验证码

select lpad(round(rand()*1000000,0),6,'0');

结果:

090694、950872、

3.日期函数
常见的日期函数如下:
函数                                        功能
curdate();                                返回当前日期
curtime();                                返回当前时间
now();                                    返回当前日期和时间
year(date);                               获取指定date的年份
month(date);                              获取指定date的月份
day(date);                                获取指定date的日期
date_add(date,interval expr type);        返回一个日期/时间值加上一个时间间隔expr后时间值
datediff(date1,date2);                   返回起始时间date1和结束时间date2之间的天数举例:                                                    结果:
select curdate();                                     2022-03-19
select curtime();                                     21:43:26
select now();                                         2022-03-19 21:43:57
select year(now());                                   2022
select month(now());                                  3
select day(now());                                    19
select date_add(now(),interval 1 year);               2023-03-19 21:46:07
select datediff('2022-4-16','2022-3-17');             30

举例:查询所有员工的入职天数,并根据入职天天输倒序排序

select name,datediff(curdate(),entrydata) as from sheet1 order by entryData desc;

排序之后的结果:

4.流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率
函数                                                       功能
if(value,t,f)                                  如果value为true,则返回t,否者返回f
ifnull(value1,calue2)                          如果value1不为空,则返回value1,否者返回value2case when [val1] then [res]... else [default] end    
如果val1为true,返回否者返回defaultcase [expr] when [val1] then [res1]...else [default] end
如果expr的值等于val1,返回res1,否者返回default默认值举例:
select if(false,'true','wanglei');                    结果:wanglei
select ifnull('王磊','最强');                          结果:王磊

 查询学生的姓名和籍贯(四川---->一线城市,其他---->二线城市)
select name,case birthplace when '四川' then '一线城市' else '二线城市' end from message

2.约束 

约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库数据的正确性、有效性、完成性
分类:
约束                描述                                                    关键字
非空约束          限制该字段的数据不能为null                            not null
唯一约束          保证该字段的所有数据都是唯一性、不重复的                unique
主键约束          主键是一行数据的唯一标识,要求非空且唯一                primary key
默认约束          保存数据时,如未指定该字段的值,则采用默认值            default
检测约束          保证字段值满足某一个条件                               check
外键约束          让两张表的数据之间建立连接,保证数据的一致性和完整性     foreign key注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束
案列:根据需求,完成表结构的创建
字段名字段含义字段类型约束条件约束关键字
idID唯一标识int主键,并且自动增长primary key,auto_increase
name姓名varchar(10)不为空,并且唯一not null,unique
age年龄int大于0,并且小于等于120check
status状态char(1)如果没有指定该值,默认为1default
gender性别char(1)
create table user(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check ( age>0&&age<120 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
) comment '用户表';
insert into user (name, age, status, gender) value ('王磊',23,1,'男');
insert into user (name, age, status, gender) value  ('覃泽宏',25,0,'男');
insert into user (name, age, status, gender) value  ('黄齐鹏',25,0,'男');
insert into user (name, age, status, gender) value  ('尹朝龙',21,0,'男');
insert into user (name, age, gender) value  ('啊资曲不',21,'男');

外键约束:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
有外键连接的表称为子表,外键连接的表称为父表
语法:
create table 表名(字段名 数据类型...[constraint] [外键名称] foreign key (外键字段名) reference 主表 (主表列表)
);
或者:alter table 表名 add constraint 外键名称 foreign key (外键字段名) reference 主表 (主表列名);删除外键语法:alter table 表名 drop foreign key 外键名称;

例子:为emp表的dept_id添加外键

insert into dept (id, name) values 
(1,'研发部'),
(2,'市场部'),
(3,'财务部'),
(4,'销售部'),
(5,'总经办');insert into emp(id, name, age, job, salary, entrydate, managerid, dept_id) values
(1,'金庸',66,'总裁',20000,'2000-01-01',null,5),
(2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
(3,'杨晓',33,'开发',8400,'2000-11-03',2,1),
(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
(5,'鲳鱼小',43,'开发',10500,'2004-09-07',3,1),
(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1);

 

添加外键:

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

 添加之后的结果:

外键约束删除/更新行为:
行为
说明
no action        
当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新restrict
当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则不允许删除/更新cascade
当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则也允许删除/更新外键在子表中的记录set null
当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则设置子表中该外键值为nullset default
父表变更时,子表将外键设置成一个默认值语法:alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名 (主表字段名) on update cascade on delete cascade;
多表查询:
多表关系、多表查询概述、内连接、外连接、自链接、子查询、多表查询案列
多表关系:项目开发中,在进行数据结构设计时,会根据业务需求和业务之间的关系,分析并设计表的结构,由于业务之间的关联,所以各个表结构之间也存在着这种联系,基本分为三种————一对多、多对多、一对一

1.一对多

案列:部门与员工之间的关系(关系:一个部门对应多个员工,一个员工对应一个部门)

实现:在多的一方建立外键,指向一的一方的主键

 

2. 多对多

案列:学生与课程的关系(关系:一个学生可以选修多门课程,一门课程也可以供多个学生选着)

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

创建学生表
create table student(id int auto_increment primary key comment '主键',name varchar(10) comment '姓名',number varchar(10) comment '学号'
) comment '学生表';
插入学生数据
insert into student values 
(null,'黛绮丝','2000100101'),
(null,'谢逊','2000100102'),
(null,'音天邦','2000100103'),
(null,'韦一笑','2000100104');创建课程表
create table course(id int auto_increment primary key comment '主键ID',name varchar(10) comment '课程名称'
) comment '课程表';
插入课程数据
insert into course values (null,'java'),(null,'PHP'),(null,'mysql'),(null,'Hadoop');创建中间表
create table student_course(id int auto_increment comment '主键' primary key ,studentid int not null comment '学生ID',courseid int not null comment '课程ID',constraint fk_courseid foreign key (courseid) references course (id),constraint fk_studentid foreign key (studentid) references student (id)
)comment '学生课程中间表';
插入中间表数据
insert into student_course values (null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);

 

 

 

一对一:
案列:用户与用户详情的关系(关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率)
实现:在任意一方加入外键,关联另一方的主键,并且设置成外键为唯一的(unique)create table tb_user(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',age int comment '年龄',gender char(1) comment '性别',phone char(11) comment '手机号'
)comment '用户基本信息表';create  table tb_user_edu(id int auto_increment primary key comment '主键ID',degree varchar(20) comment '学历',major varchar(50) comment '小学',middleschool varchar(50) comment '中学',university varchar(50) comment '大学',userid int unique comment '用户ID',constraint fk_userid foreign key (userid) references tb_user(id)
)comment '用户教育信息表';insert into tb_user(id, name, age, gender, phone) values(null,'黄渤',45,'男','18800001111'),(null,'冰冰',35,'女','18800002222'),(null,'马云',55,'男','18800008888'),(null,'李彦宏',40,'男','18800009999');insert into tb_user_edu(id, degree, major, middleschool, university, userid) values(null,'本科','舞蹈','静安区第一中学','北京舞蹈学院',1),(null,'硕士','表演','朝阳区第一中学','北京电影学院',2),(null,'本科','英语','杭州市第一小学','杭州师范大学',3),(null,'本科','应用数学','阳泉第一小学','清华大学',4);

 

 

 3.多表查询

多表查询分类
连接查询:内连接、外连接、子查询
内连接:相当于查询A、B交集部分数据
外连接:左外连接————查询左表所有数据,以及两张表交集部分数据,右外连接————查询右表所有数据,以及两张表交集部分数据自链接:当前表与自身的连接查询,自链接必须使用别名
内连接查询语法:
隐式内连接:select 字段列表 from 表1,表2 where 条件;
显式内连接:select 字段名 from 表1 [inner] join 表2 on 连接条件;隐式
select emp.name,dept.name from emp,dept where emp.dept_id = dept.id;
#显式
select emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id;

 

 

​​​​​​​

 

本文发布于:2024-02-08 19:45:51,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170739284368440.html

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

标签:函数   命令   mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23