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

1.函数

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

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

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

1.字符串函数
mysql中内置了很多字符串函数,常用的几个如下:
函数                                            功能
coucat(s1,s2...sn)                   字符串拼接,将s1,s2...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、482280...

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,否者返回value2

case when [val1] then [res]... else [default] end    
如果val1为true,返回res1...否者返回default

case [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
当在父表中删除/更新对应记录时,首先检查该记录是否有对应的外键,如果有则设置子表中该外键值为null

set 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;

 

 

​​​​​​​

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: MySQL 是一种开源的关系型数据库管理系统,被广泛应用于各种不同规模的企业和个人项目中。它具有高性能、可靠性高和易于使用等优点,因此备受开发者青睐。 在 MySQL 中,我们可以通过命令行工具 csdn 来执行各种数据库操作。csdn 工具提供了一系列命令,让我们能够连接数据库服务器并执行各种管理和查询操作。 常用的 MySQL 命令包括: 1. connect:连接到 MySQL 数据库服务器。通过指定主机名、用户名和密码来建立与服务器的连接。 2. create database:创建新的数据库。我们可以指定数据库的名称和其他可选参数来创建一个新的数据库。 3. use database:选择要使用的数据库。我们可以使用该命令来切换数据库,以便在该数据库上执行其他操作。 4. create table:创建新的数据表。我们可以定义表的名称、列名和类型等信息,并指定约束条件来创建一个新的表。 5. alter table:修改数据表结构。通过该命令,我们可以添加、修改和删除数据表的列,并进行其他结构变更操作。 6. insert into:向数据表插入新的数据。通过该命令,我们可以将新的数据插入到指定的数据表中的指定列中。 7. select:从数据表中查询数据。我们可以通过 select 命令来获得满足指定条件的数据,并进行排序、分组和筛选等操作。 8. update:更新数据表中的数据。通过该命令,我们可以修改数据表中指定列的值。 9. delete:删除数据表中的数据。我们可以通过该命令来删除指定数据表中满足条件的数据。 10. quit:退出 csdn 工具。该命令用于断开与数据库服务器的连接,并退出命令行工具。 通过使用这些命令,我们可以在 MySQL 数据库中进行各种各样的操作,包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据等。这些操作能满足我们对数据库的管理和数据操作需求。 ### 回答2: MySQL命令是一种用于与MySQL数据库进行交互的命令行工具。CSDN是一个技术社区,用于分享程序开发、数据库、网络安全等方面的知识与经验。 MySQL命令提供了一系列的命令,用于管理数据库、表、索引、用户权限等操作。通过MySQL命令,我们可以创建数据库和表,插入、删除、修改数据,查询数据,执行事务等。MySQL命令的语法相对简单,但功能强大,可以满足各种数据库操作的需求。 CSDN是一个面向程序员和技术爱好者的知识分享平台。在CSDN上,人们可以找到各种编程语言、开发工具、数据库等领域的学习资源和经验分享。CSDN上有大量的技术文章、教程和博客,提供了解决各类技术问题的方法和思路。 当我们遇到MySQL命令的问题时,可以在CSDN上搜索相关的文章和帖子,通过阅读他人的经验和解答来解决问题。在社区中向其他技术人员提问,也可以得到及时的帮助和解答。CSDN的应用和讨论领域广泛,无论是初学者还是资深开发者都能在其平台上获得帮助和提高。 综上所述,MySQL命令是管理MySQL数据库的工具,而CSDN是一个技术社区,提供了广泛的技术资源和经验分享,帮助人们解决各类技术问题。 ### 回答3: MySQL是一种关系型数据库管理系统,它使用结构化查询语言(SQL)对数据库进行操作和管理。 MySQL命令可分为三类:数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)。 DDL命令包括创建表、修改表结构和删除表等操作。例如,使用CREATE TABLE命令可以创建一个表,使用ALTER TABLE命令可以修改表结构,使用DROP TABLE命令可以删除表。 DML命令用于对表中的数据进行操作,包括插入、查询、更新和删除数据等。例如,使用INSERT INTO命令可以插入一条新的数据记录,使用SELECT命令可以查询数据,使用UPDATE命令可以更新数据,使用DELETE命令可以删除数据。 DCL命令用于对数据库的访问权限进行管理。例如,使用GRANT命令可以赋予用户特定的数据库权限,使用REVOKE命令可以撤销用户的数据库权限。 除了以上这些基本命令外,MySQL还提供了一些其他命令函数,可以进行更加复杂的操作,例如对数据进行排序、聚合和分组等。同时MySQL还支持存储过程、触发器和事件等高级功能,让开发人员可以更加灵活和高效地进行数据库开发和管理。 总之,MySQL是一种强大而灵活的关系型数据库管理系统,通过使用MySQL命令,可以对数据库进行各种操作和管理,满足各种不同需求的开发人员和管理员的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值