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

news/2025/2/1 22:45:59/

文章目录

  • 内置函数
    • 时间函数
    • 字符串函数
    • 数学函数
    • 其他函数
  • 复合查询
    • 多表笛卡尔积
    • 自连接
    • 在where中使用子查询
    • 多列子查询
    • 在from中使用子查询
  • 内连接
  • 外连接
    • 左外连接
    • 右外连接

内置函数

时间函数

函数描述
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()当前日期和时间

image-20230902055611224

字符串函数

函数描述
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)去除前空格或者后空格
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(薪资信息)

多表笛卡尔积

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

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

image-20230902192332359

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

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

image-20230902192616487

自连接

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

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

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

image-20230902193239466

在where中使用子查询

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

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

image-20230902193358516

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

image-20230902193744471

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

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

image-20230902194108556

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

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

image-20230902194242129

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

多列子查询

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

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

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

image-20230902194449792

在from中使用子查询

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

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

image-20230902194848868

内连接

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

select 字段 from1 inner join2 on 连接条件 and 其他条件;

image-20230903102545320

外连接

左外连接

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

image-20230903102802543

右外连接

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

image-20230903102902319


http://www.ppmy.cn/news/1085233.html

相关文章

c语言---指针

指针 前言 记录一个数据对象在内存中的存储位置,需要两个信息: 1、数据对象的首地址。 2、数据对象占用存储空间大小 基础数据类型所占内存空间大小(字节),一个字节代表8个二进制位 char 1 short 2 int 4 lon…

03_nodjs_npm的使用

03 【npm的使用】 1.包和npm 1.1 什么是包 由于 Node 是一套轻内核的平台,虽然提供了一系列的内置模块,但是不足以满足开发者的需求,于是乎出现了包(package)的概念: 与核心模块类似,就是将一…

websocket基础

下面就以代码来进行说明 1&#xff0c;先导入websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.编写websocket相关bean管理配置 Config…

ROS-4.创建发布者和订阅者

ros中非长连接的通信使用topic的方式&#xff0c;publisher向topic发布消息&#xff0c;subscriber订阅topic消息&#xff0c;对于非应答模式的通信适合使用该模式&#xff0c;如下图 接下来我们实现一个发布者和订阅者 1. 创建功能包 在实现订阅者和发布者的时候我们需要先…

Shell脚本练习——系统应用相关

显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…

[管理与领导-67]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与公司的八字是否相合

目录 前言&#xff1a; 一、概述 二、八字相合的步骤 2.1 企业文化是否相合 2.2.1 企业文化对职业选择的意义 2.2.2 个人与企业三观不合的结果 2.2.3 什么样的企业文化的公司不能加入 2.2 公司的发展前景 2.3 公司所处行业发展 2.4 创始人的三观 2.5 创始人与上司的…

【100天精通Python】Day47:Python网络编程_Web开发:web服务器,前端基础以及静态服务器

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 1.3 前后端交互的基本原理 2 Web开发基础 2.1 HTTP协议 2.2 Web服务器 2.3 前端基础 2.3.1 HTML&#xff08;超文本标记语言&#xff09; 2. 3.2 CSS&#xff08;层叠样式表&#xff09; 2.3.3 JavaScript 2.…

【微服务部署】一、使用docker-compose部署Jenkins、SonarQube、PostgreSQL

一、安装 1、编写docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml Postgres&#xff1a;作为SonarQube的数据库存储SonarQube&#xff1a;代码质量检查Jenkins&#xff1a;jenkins/jenkins:lts镜像&#xff0c;jenkinsci/blueocean镜像缺少node…