mysqy(其他函数,表的约束,连表查询)
1. 其他得函数
sql也是一种编程语言,它里面也有函数,分为内置得函数和自定义得函数(高级)。
内置函数:
1.聚合函数。
2.字符串函数。---操作字符串
3.时间函数--->操作得时间
4.算术函数--->数学操作。
5.其他函数
1.1 字符串函数。---操作字符串
常用函数:
函数 | 功能 |
---|---|
CONCAT(s1, s2, ..., sn) | 字符串拼接,将s1, s2, ..., sn拼接成一个字符串 |
LOWER(str) | 将字符串全部转为小写 |
UPPER(str) | 将字符串全部转为大写 |
LPAD(str, n, pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 |
RPAD(str, n, pad) | 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str, start, len) | 返回从字符串str从start位置起的len个长度的字符串 |
CREATE TABLE `t_student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生表的 主键列',
`name` varchar(255) ,
`age` int(11) ,
`address` varchar(255),
PRIMARY KEY (`id`) USING BTREE
) ;
INSERT INTO `t_student` VALUES (1, '张三', 18, '北京');
INSERT INTO `t_student` VALUES (2, '李四', 19, '北京');
INSERT INTO `t_student` VALUES (3, '王五', 19, '北京');
INSERT INTO `t_student`VALUES (4, '钱七', 19, '北京');
INSERT INTO `t_student`VALUES (5, '关羽', 25, '南京');
INSERT INTO `t_student` VALUES (6, '张飞', 25, '南京');
INSERT INTO `t_student`VALUES (7, '赵云', 28, '南京');
INSERT INTO`t_student` VALUES (8, '项羽', 19, '南京');
INSERT INTO `t_student` VALUES (9, '刘备', 30, '上海');
INSERT INTO `t_student` VALUES (10, '曹操', 40, '许昌');
INSERT INTO `t_student` VALUES (11, '夏侯', 36, '许昌');
INSERT INTO `t_student` VALUES (12, '诸葛亮', 38, '上海');
INSERT INTO `t_student` VALUES (13, '周瑜', 78, '江东');
INSERT INTO `t_student` VALUES (14, '小乔', 56, '江东');
INSERT INTO `t_student` VALUES (15, '孙尚香', 59, '江东');-- 字符串拼接函数
select name from t_student;select concat('我的名字叫:',name,",年龄:",age) as n from t_student;-- 字符串转换为大写和小写
select name,upper(name),LOWER(name) from t_student;-- 去除前后空格
select address,trim(address) from t_student;-- 找到姓李得学生 字符串得截取
select * from t_student where name like '李%';select * from t_student where substr(name,1,1)='李'
1.2 数字函数
常见函数:
函数 | 功能 |
---|---|
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x, y) | 返回x/y的模 |
abs(x) |
求某个数得绝对值 |
-- 向上取整 5.1你给定得值
select ceil(5.1),floor(5.9),mod(10,3),abs(-5.9) from t_student;-- 要求如果status为0变为1 为1变为0 update
update aaa set status=abs(status-1);
1.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之间的天数 |
DROP TABLE IF EXISTS `tb_emp`;
CREATE TABLE `tb_emp` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工编号',`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '员工姓名',`age` int(11) NULL DEFAULT NULL COMMENT '员工年龄',`job` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '岗位',`salary` int(11) NULL DEFAULT NULL COMMENT '薪水',`entrydate` date NULL DEFAULT NULL COMMENT '员工入职时间',`managerid` int(11) NULL DEFAULT NULL COMMENT '员工领导编号',`dept_id` int(11) NULL DEFAULT NULL COMMENT '员工所在部门编号',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tb_emp
-- ----------------------------
INSERT INTO `tb_emp` VALUES (1, '金庸', 66, '总裁', 20000, '2000-01-01', NULL, 5);
INSERT INTO `tb_emp` VALUES (2, '张无忌', 20, '项目经理', 12500, '2005-12-01', 1, 1);
INSERT INTO `tb_emp` VALUES (3, '杨逍', 33, '开发', 8400, '2000-11-03', 2, 1);
INSERT INTO `tb_emp` VALUES (4, '韦一笑', 48, '开发', 11000, '2002-03-05', 2, 1);
INSERT INTO `tb_emp` VALUES (5, '常豫川', 43, '开发', 10500, '2004-09-01', 2, 1);
INSERT INTO `tb_emp` VALUES (6, '小昭', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1);
INSERT INTO `tb_emp` VALUES (7, '灭绝', 60, '财务总监', 8500, '2002-09-12', 1, 3);
INSERT INTO `tb_emp` VALUES (8, '周芷若', 60, '会计', 48000, '2006-06-01', 7, 3);
INSERT INTO `tb_emp` VALUES (9, '丁敏君', 19, '出纳', 4000, '2009-06-01', 7, 3);
INSERT INTO `tb_emp` VALUES (10, '赵敏', 23, '市场总监', 14000, '2009-06-01', 1, 2);
INSERT INTO `tb_emp` VALUES (11, '鹿仗客', 56, '职员', 3750, '2009-06-01', 10, 2);
INSERT INTO `tb_emp` VALUES (12, '鹤比翁', 19, '职员', 3750, '2009-06-01', 10, 2);
INSERT INTO `tb_emp` VALUES (13, '方东白', 19, '职员', 3750, '2009-06-01', 10, 2);
INSERT INTO `tb_emp` VALUES (14, '张三丰', 88, '销售总监', 14000, '2004-06-01', 1, 4);
INSERT INTO `tb_emp` VALUES (15, '玉莲舟', 38, '销售', 4600, '2009-06-01', 14, 4);
INSERT INTO `tb_emp` VALUES (16, '宋远桥', 40, '销售', 4600, '2009-06-01', 14, 4);
INSERT INTO `tb_emp` VALUES (17, '陈友谅', 42, NULL, 2000, '2022-04-25', 1, NULL);
-- CURDATE()返回当前日期 后面可以不用跟表名
select curdate();
-- 可以用在where
select * from tb_emp where curdate()-entrydate=1-- CURTIME()返回当前时间
select curtime() ;-- NOW()返回当前日期和时间
select now();-- YEAR(date)获取指定date的年份
select year('2022-04-25');select * from tb_emp where year(entrydate)=2022-- DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
SELECT DATE_ADD('2020-04-25', INTERVAL 3 YEAR);-- DATEDIFF(date1, date2)返回起始时间date1和结束时间date2之间的天数
select datediff('2020-05-25','2020-04-25');
-- 入职30天得员工.
select * from tb_emp where DATEDIFF(now(),entrydate)>30
1.4 流程函数
常用函数:
函数 | 功能 |
---|---|
IF(value, t, f) | 如果value为true,则返回t,否则返回f |
IFNULL(value1, value2) | 如果value1不为空,返回value1,否则返回value2 |
CASE WHEN [ val1 ] THEN [ res1 ] ... ELSE [ default ] END | 如果val1为true,返回res1,... 否则返回default默认值 |
CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] ... ELSE [ default ] END | 如果expr的值等于val1,返回res1,... 否则返回default默认值 |
-- 如果年龄>30妇女 否则少女
select age,if(age>30,'妇女','少女') from tb_emp;-- ifnull 如果为null,则
select job,ifnull(job,'工作待定') from tb_emp;
2. 约束
什么是约束? 就是在表中为某些列添加约束,使该列得值必须符合这个约束。
分类:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段的数据不能为null | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束(8.0.14版本后) | 保证字段值满足某一个条件 | CHECK |
外键约束 | 用来让两张图的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
约束是作用于表中==字段==上的,可以再==创建表==/==修改表==的时候添加约束。
create table t_teacher(id int primary key auto_increment, -- 要求该列得值必须唯一且不能为null.tname varchar(20) unique, -- unique 唯一约束 表示该列得值必须唯一。但是可以运行多个nullage int not null, -- not null 非空约束 表示该列得值不能为null.sex char(2) default '男' -- default 默认约束 表示如果该列没有给定值 则默认为男
)
select * from t_teacher;
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',15,'女');
-- Duplicate entry '刘德华' for key 'tname' 由于tname具有唯一约束 表中有名字为刘德华 所以不能在添加刘德华名称
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',18,'男');
-- Column 'age' cannot be null 因为age设置了非空约束所以 添加数据时年龄必须有值。
insert into t_teacher(id,tname,age,sex) values(null,'张学友',null,'男');-- 因为sex有默认约束 所以在添加数据时可以不为sex设置值,则采用默认值。
insert into t_teacher(id,tname,age) values(null,'张学友',22);
2.1 外键约束
外键约束用来让两张图的数据之间建立连接,保证数据的一致性和完整性。
-- 外键
create table t_class(cid int primary key auto_increment,cname varchar(20)
);
create table t_stu(sid int primary key auto_increment,sname varchar(20),classid int -- 表示外键列。
);
-- add contraint 约束得名称 foregin key 外键得列名 REFERENCES 主表名(主键) -- alter table 从表名 add contraint 约束名随便起 foreign key 外键列名 references 主表(主键)
alter table t_stu add CONSTRAINT fk_stu_class FOREIGN key (classid) REFERENCES t_class(cid);insert into t_class values(null,'QY145'),(null,'QY151');insert into t_stu values(null,'李青华',2);
-- 因为classid=3 这个值 在我们得班级表中不存在。所以不能添加
insert into t_stu values(null,'张青',1);
mysqy(其他函数,表的约束,连表查询)相关推荐
- 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·003【表的约束、表的CRUD操作(DDL语句)】
文章目录 一.表的约束 1.约束类型 2.添加约束 二.表的CRUD操作(DDL语句) 1.C(Create):创建 2.R(Retrieve):查询 3.U(Update):更新 4.D(Delet ...
- sql server给表新建约束提示 表不存在或者没有权限#找不到对象“dbo.Student”,因为它不存在或者你没有所需的权限。
在给指定表添加字段约束的时候,提示找不到对象"dbo.Student",因为它不存在或者你没有所需的权限. 1修改权限 右击指定数据库-属性-文件-修改所有者为sa 浏览-sa 2 ...
- Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查
什么是数据库? 存储数据的仓库 数据库的存储介质:磁盘和内存. 为什么要用数据库不用文件?(数据库与文件进行数据存储的区别) 1.文件存储安全性低 2.数据库对数据进行良好的存储,查询以及管理 3.便 ...
- 数据库实验2 创建数据表修改数据表和删除数据表
实验2 创建数据表修改数据表和删除数据表 实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的: (1)了解数据表的结构特点. (2)掌握表中列定义时所用到的各种数据类型. (3) ...
- 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询
约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...
- MySQL基础(3)----其他函数 约束 多表查询 子查询 组合查询
1.其他函数 1.1.字符串函数 --- 操作字符串 常用函数: 函数 功能 CONCAT(s1, s2, ..., sn) 字符串拼接,将s1, s2, ..., sn拼接成一个字符串 LOWER ...
- SQL Server学习1(建数据库,建表,建约束)
--建数据库NetBarDB IF exists(select * from sys.sysdatabases where [NAME]='NetBarDB') drop database N ...
- mssql的T-SQL教程(从建登陆到建库、表和约束)
本文引用自:http://www.cnblogs.com/seerlin/archive/2009/02/05/1384901.html 1 2--1,创建登录,可以有两种方式: 3--(1 ...
- MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 3.mysql的中文问题,database级操作,表级操作,数据CRUD,分组操作,时间和日期,字符串相关函数,表的约束
1 连接MYSQL服务器:mysql–uroot –p123456 查看中文问题 show variables like 'character%'; 2 修改mysql的字符集,退出mysql提 ...
最新文章
- 再次升级,985博士整理的71个OpenCV实战项目教程开放下载!
- solidworks工具集_【第1975期】SolidWorks!从3D扫描到3D打印的一站式设计工具
- html(2)标签(1)
- android IO流_Flutter实战经验(十):打包和发布到 Android 平台
- codeUp 2031 To fill or not to fill 复杂贪心
- JEECG 技术交流群
- javaee怎么做到只有登录才可以进网页_java初学者,应该怎么去学习?(建议收藏)...
- 54.Linux/Unix 系统编程手册(下) -- POSIX 共享内存
- Android教程 第四章 用户界面设计基础
- html下拉菜单的某个值被选定,使用JavaScript在下拉列表中获取选定的值?
- iar烧录程序步骤_如何利用IAR单片机编程软件建立烧录程序
- godot读写本地文件
- 制定目标的SMART原则(思维导图)
- 三阶魔方大中小魔公式_七步玩转三阶魔方还原公式图解 + 视频
- 培养孩子讲故事的心得
- 音乐和计算机跨界融合,上海尝试音乐创新:中国传统文化与西方艺术跨界融合...
- java 全角_java 全角半角字符转换的方法实例
- 2022-2028年全球与中国热电堆和微测辐射热计红外探测器行业发展趋势及投资战略分析
- mysql pk uk ak,最重要的MySQL开发规范 全都在这了
- 区块链游戏的 1.0 2.0 3.0 4.0 时代