MySQL的内置函数&复合查询&内外连接

文章目录

内置函数

时间函数

函数 描述
current_date() 当前日期
current_time() 当前时间
current_timestamp() 当前时间戳
date(datetime) 返回datetime参数的日期部分
date_add(date, interval val) 在date中加上参数的日期或时间
date_sub(date, interval val) 在date中加上参数的日期或时间
datediff(date1, date2) 返回两个日期之间的时间差,单位为天
now() 当前日期和时间

字符串函数

函数 描述
charset(str) 返回字符串的字符集
concat(str2 , ...) 连接字符串
instr(string, ch) 返回ch在string中出现的位置,没有返回0
ucase(str) 转换为大写
lcase(str) 转换为小写
left(str, length) 从str中的左边起取length个字符
length(str) str的长度
replace(string, str, replace_str) 在string中用replace_str替换str
strcmp(str1, str2) 逐字符比较两字符串的大小
substring(str, pos , length) 从str的pos开始取length个字符
ltrim(str) rtrim(str) trim(str) 去除前空格或者后空格
sql 复制代码
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from
student;

数学函数

函数 描述
abs(num) 绝对值函数
bin(num) 十进制转换二进制
hex(num) 转换为十六进制
conv(num, from_base, to_base) 进制转换
ceiling(num) 向上去整
floor(num) 向下去整
format(num, decimal_places) 格式化,保留小数位数
rand() 返回随机浮点数,范围[0.0, 1.0)
mod(num, denominator) 取模,求余

向上去整:往上找比数值大的最小整数

向下去整:往下找比数值小的最大整数

0向去整:找比数值更靠近0的并且里数值最近的整数

其他函数

函数 描述
user() 查询当前用户
md5(str) 对一个字符串进行md5摘要,摘要后得到一个32为字符串
database() 显示当前正在使用的数据库
password() 对用户加密
ifnull(val1, val2) 如果val1为null,返回val2, 否则返回val1

复合查询

为了更好演示效果,演示的数据库中有三张表, emp(员工信息)、dept(部门信息)、salgrad(薪资信息)

多表笛卡尔积

如果想要查询的结果需要多张表结合才能搜索出,则可以直接多表结合去查询。

需要注意,如果查询的列中有大于一张表拥有同名的列信息则需要指明表

可以看到如图的写法就会出现很多重复的员工信息,这是因为直接结合的话会把所有表的数据都结合进去,这样并不符合实际场景。

因此可以加上筛选条件,因为两张表是具有外键关联的,所以可以使用外键的列作为结合的条件

自连接

并不需要有多张真实存在的物理属性的表才可以结合,因为单张表操作得出的结果也可以看作是一张表,在MySQL中一切皆为表结构,所以单张表得出的虚拟表也可以和其本身去结合

不过需要注意如果使用自连接需要对表进行不同的别名,这样系统才能分辨出区别

例如:找出名为SMITH的员工的上级领导的编号和姓名(mgr是员工领导的编号--empno)

在where中使用子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

例如:显示SMITH同一部门的员工

例如:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号

其中关键字in的作用是,查询集合是否包含了该条件

例如:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

其中关键字all表示:集合中的所有数据

例如:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号

其中关键字any表示:集合中的任意一个数据

多列子查询

这是只使用一列作为子查询的条件,也可以同时使用多列作为查询条件

多列子查询是指查询返回多个列数据的子查询语句

例如:查询和SMITH的部门和岗位完全相同的所有雇员

在from中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用

例如:**查找每个部门工资最高的人的姓名、工资、部门、最高工资 **

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选

sql 复制代码
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

外连接

左外连接

左侧的表完全显示就是左外连接,如果右侧的表不对应左侧的表则为NULL

右外连接

右侧的表完全显示就是右外连接,如果左侧的表不对应右侧的表则为NULL

相关推荐
java_logo3 分钟前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
广州灵眸科技有限公司7 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒10 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手10 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh12 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户713335851562413 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD13 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo13 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程