MYSQL-多表查询和函数

第一题讲解

# 1. 查出至少有一个员工的部门,显示部门编号、部门名称、部门位置、部门人数。
分析:(分析要查的表): (显示的列):(关联条件):(过滤条件):[分组条件]:[排序条件]:[分页条件]:SELECT d.deptno, dname, loc, count(empno) 
FROM dept d JOIN emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno;

在这里插入图片描述

自连接查询

在这里插入图片描述

create table area(pid int primary key auto_increment,name varchar(20),city_id int
);insert into area values (1,'广东省',null),(2,'江西省',null),(3,'广州市',1),(4,'深圳',1),(5,'东莞',1),(6,'南昌',2),(7,'赣州',2),(8,'九江',2);# 例如,使用自连接查询命令完成:
# (1)把区域表tb_area分别理解成两个表:省表province、城市表city;
# (2)自连接查询省份编号、省名、城市名、城市编号的展示结果;
select province.pid,province.name,city.name,city.pid from area province join area city on province.pid = city.city_id;
# (3)自连接查询省的名称为广东省的所有城市信息。
select a.pid,a.name,b.name,b.pid from area a join area b on a.pid = b.city_id where a.name = '广东省';

子查询的三种情况

1.子查询当条件(单值对比)
2.子查询当条件(多值对比)
3.子查询当临时表(出现在from的后边位置)
-- todo 子查询三种情况--------------------
# 1.子查询当条件(单值对比--where 后边)
-- 查询 工资高于平均工资的员工信息
select * from emp where sal > (select avg(sal) from emp);# 2.子查询当条件(多值对比)
-- 查询销售部和财务部所有员工信息.
select * from emp where deptno in (select deptno from dept where dname = '销售部' or dname='财务部');
select * from emp where deptno in (select deptno from dept where dname in ('销售部','财务部'));
select e.* from emp e join dept d on e.deptno = d.deptno where dname = '销售部' or dname='财务部';-- 连接查询实现# 3.子查询当临时表(出现在from的后边位置)
-- 查询工资高于15000元的员工信息和他的部门信息
select * from emp where sal > 15000;
select d.dname,d.loc,e.* from dept d join (select * from emp where sal > 15000) e on d.deptno = e.deptno;

union连接查询

union: 纵向拼接去重
union all:纵向拼接不去重
-- 需求:查询工资大于28000或者部门是10号部门的员工信息.
select * from emp where sal > 28000
union
select * from emp where deptno = 10;select * from emp where sal > 28000
union all
select * from emp where deptno = 10;-- 两个表列和类型相同但是名字不同也可以拼接.
create table teacher(t_id int,t_name varchar(20),t_gender varchar(20)
);create table student(s_id int,s_name varchar(20),s_gender varchar(20)
);insert into teacher values (1,'张三','男'),(2,'李四','男'),(3,'王五','男'),(4,'小美','女');
insert into student values (1,'tom','男'),(2,'jerry','男'),(3,'jack','男'),(4,'rose','女');-- 需求 查询男性的学生和老师.
select t_id id,t_name name,t_gender gender from teacher where t_gender = '男'
union
select * from student where s_gender = '男';

数学函数

-- todo mysql 数学类函数----------------
-- round -- 指定小数位(四舍五入)
select round(3.1415926); -- 3
select round(3.1415926,2); -- 3.14
select round(3.145,2); -- 3.15 -- 四舍五入-- format 格式化数字展示便于阅读,指定小数位(四舍五入)
select format(12345.1415926,3);-- floor -- 舍弃小数位-- 向下取整
select floor(12345.141592);-- 12345
select floor(12345.541592);-- 12345
select floor(12345.941592);-- 12345
-- ceil -- 向上取整
select ceil(12345.141592);-- 12346
select ceil(12345.541592);-- 12346
select ceil(12345.941592);-- 12346-- mod 模运算 -- (求余数)
select mod(5,3); -- 2-- pow(x,y) x的y 次方
select pow(2,3); -- 8-- rand() 随机数函数
select rand();-- 0-1之间的随机数 -- 每次都是变化的.
select rand(10);-- 根据种子生成随机数.每次都是固定的.

字符串函数

-- todo 字符串相关的函数----------------------------
select upper('hello');
select lower('HELLO');
select s_id,upper(student.s_name),s_gender from student;
-- 第一个参数是要操作的字符串(列),要替换的字符,提换成xx字符.
select replace('黑马程序员','黑马','白马');-- 把所有参数(n个)拼接成为一个大的字符串.不可拼接null
select concat('a','黑','b','白',100,false,true);-- 按照指定字符把多个参数进行拼接.最后成为一大的字符串
select concat_ws('_','a','b','中文');-- 拼接成为二维数据--csv格式的数据.-- 重复字符串拼接--指定次数
select repeat('我错了',3);-- 把字符串内容倒序输出
select reverse('abc');
select reverse('你好吗');-- substr 按照位置截取指定个数的字符串
select substr('hello',2);-- ello
select substr('hello',1,1);-- h
select substr('hello',-2,2);-- lo
select substr('hello',-5,5);-- helloselect left('hello',3);-- 从左侧截取制定个数的字符串
select right('hello',3);-- 从右侧截取制定个数的字符串select char_length('abc');-- 求字符串长度
select char_length('你好');
select length('abc');-- 推荐这个 --求字符串长度-- 需求 : 把学生的名字首字母转大写其它不变.
select * from student;
select concat(upper(substr(student.s_name,1,1)),substr(s_name,2)) from student;

时间日期函数

-- todo 时间日期相关函数----------------------
select now();-- 2024-09-25 15:56:31
select current_date();-- 2024-09-25
select current_time();-- 15:57:15-- 第一个时间要大于第二个时间.求的是第一参减去第二参的时间差(单位是天)
select datediff('2023-09-18','2022-09-10');-- 8-- 加时间
select date_add(now(),INTERVAL 1 DAY);
select date_add(now(),INTERVAL -1 DAY);-- 加负数就是减
select date_add(now(),INTERVAL 10 YEAR);-- 时间减法
select date_sub('2000-10-11',interval 1 day);-- 2000-10-10
select date_sub(20001010,interval 1 day);-- 2000-10-09-- 把第二个时间添加到第一个时间上并返回.
select timestamp(now(),'10:10:10');select YEAR(now());-- 单独获取年
select MONTH(now());-- 单独获取月
select day(now());-- 单独获取日
select hour(now());-- 单独获取时-- 使用格式化指定时间格式
select date_format(now(),'%Y年%m月%d日 %H:%i:%s');-- 2024年09月25日 16:16:35
select date_format(now(),'%Y-%m-%d %H:%i:%s');-- 2024-09-25 16:16:30
select date_format(now(),'%Y/%m/%d %H:%i:%s');-- 2024/09/25 16:16:24-- 把年月日变成秒值.
select unix_timestamp();-- 1727252256
select unix_timestamp(now());-- 1727252256
select unix_timestamp('1970-01-01');-- 1727252256 -- 有时候数据库存储的时间就是秒值-- 把秒值时间抓换为年月日时间
select from_unixtime(0);
select from_unixtime(1727252256);select '2020-10-10' > '2020-10-09'; -- 底层是转秒值然后对比.

时间日期案例

-- ------sql日期案例------2020年最后一次登录------------------------------------------------------------
Create table If Not Exists Logins (user_id int, time_stamp datetime);
Truncate table Logins;
insert into Logins (user_id, time_stamp) values ('6', '2020-06-30 15:06:07');
insert into Logins (user_id, time_stamp) values ('6', '2021-04-21 14:06:06');
insert into Logins (user_id, time_stamp) values ('6', '2019-03-07 00:18:15');
insert into Logins (user_id, time_stamp) values ('8', '2020-02-01 05:10:53');
insert into Logins (user_id, time_stamp) values ('8', '2020-12-30 00:46:50');
insert into Logins (user_id, time_stamp) values ('2', '2020-01-16 02:49:50');
insert into Logins (user_id, time_stamp) values ('2', '2019-08-25 07:59:08');
insert into Logins (user_id, time_stamp) values ('14', '2019-07-14 09:00:00');
insert into Logins (user_id, time_stamp) values ('14', '2021-01-06 11:59:59');
-- select * from logins where time_stamp > '2020-01-01' and time_stamp < '2020-12-31';
select user_id,max(time_stamp) from logins where year(time_stamp) = 2020 group by user_id;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#从零开始学习(基本语法概念)(2)

深入C# 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 控制台项目结构 每个C#程序采用同样的方式组织,命名空间,类和方法 using System;namespace helloworld//命名空间 {class Program//类{static void Main(string[] args)//程序入口{Console.Writ…

YOLOv11改进-卷积-空间和通道重构卷积SCConv

本篇文章将介绍一个新的改进模块——SCConv&#xff08;小波空间和通道重构卷积&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。为了减少YOLOv11模型的空间和通道维度上的冗余&#xff0c;我们引入空间和通道重构卷积。首先&#xff0c;…

C语言笔记(指针的进阶)

目录 1.字符指针 2.指针数组 3.数组指针 3.1.创建数组指针 3.2.&数组名和数组名 1.字符指针 int main() { char ch w;char* pc &ch;const char *p "abcdef";//常量字符串 产生的值就是首元素的地址//常量字符串不能被修改 因此需要加上一个…

10月18日

二次型矩阵要是对称矩阵 通解要带入特解 集体化 逆反思维 先定特解&#xff0c;再求通解 反函数...我谢谢你 依旧是原函数

视频的编解码格式

文章目录 视频的编解码格式概念术语视频处理流程视频封装格式视频编码格式视频编解码器&#xff0c;视频容器和视频文件格式之间的区别补充视频码率 参考资料 视频的编解码格式 概念术语 两大组织主导视频压缩的组织及其联合(joint)组织 ITU-T(VCEG) ITU-T的中文名称是国际电信…

【动手学深度学习】6.2 图像卷积(个人向笔记)

1. 互相关运算 严格来说&#xff0c;卷积层是一个错误的叫法&#xff0c;因为它本质上是互相关运算而不是卷积运算。我们暂时忽略通道看看二维图像数据和隐藏表示。那么输出大小可以表示为 我们自己实现一个二维互相关运算 2. 卷积层 卷积层中有两个参数&#xff1a;卷积核权…

工业物联网关-TCP透传

TCP透传功能提供类似于DTU(Data Transmit Unit)的功能&#xff0c;用户在网络端使用TCP协议连接网关&#xff0c;与串口通道绑定&#xff0c;建立起TCP与串口的通道&#xff0c;网关相当于一个中转点。 菜单选择"数据上行-tcp透传"&#xff0c;查看当前透传通道列表&…

QtCreator14调试Qt5.15出现 Launching Debugger 错误

1、问题描述 使用QtCreator14调试程序&#xff0c;Launching Debugger 显示红色&#xff0c;无法进入调试模式。 故障现象如下&#xff1a; 使能Debugger Log窗口&#xff0c;显示&#xff1a; 325^error,msg"Error while executing Python code." 不过&#xff…

反走样算法(MSAA、TAA、FXAA、DLSS)

光栅化的采样过程会导致图形走样,走样有很多种形式: 锯齿 摩尔纹 走样的本质原因是采样速度跟不上信号变化的速度 采样频率低,使得我们将连续变化的信号离散化. 反走样方法 anti-alisaing MSAA 多重采样反走样 超采样 优点&#xff1a; 对几何反走样效果良好 缺点…

【Python语言进阶(二)】

一、函数的使用方式 将函数视为“一等公民” 函数可以赋值给变量函数可以作为函数的参数函数可以作为函数的返回值 高阶函数的用法&#xff08;filter、map以及它们的替代品&#xff09; items1 list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10)))) # filter…

uniapp uni.uploadFile errMsg: “uploadFile:fail

uniapp 上传后一直显示加载中 1.检查前后端上传有无问题 2.检查失败信息 await uni.uploadFile({url,filePath,name,formData,header,timeout: 30000000, // 自定义上传超时时间fail: async function(err) {$util.hideAll()// 失败// err 返回 {errMsg: "uploadFile:fai…

stata基本操作

文章目录 数据导入及存储变量的标签、审视数据变量的标签审视数据数据删除数据排序 画图直方图使用帮助文件散点图 统计分析描述性分析频数分析相关分析 生成新变量、计算器、终止命令生成新变量设置哑变量修改变量名更改变量内容调用命令和终止命令 日志命令库更新、学习资源 …

如何用pyhton修改1000+图片的名字?

import os oldpath input("请输入文件路径&#xff08;在windows中复制那个图片文件夹的路径就可以):") #注意window系统中的路径用这个‘\分割&#xff0c;但是编程语言中一般都是正斜杠也就是’/‘ #这里写一个代码&#xff0c;将 \ > / path "" fo…

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件&#xff0c;用于支持MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…

用Java爬虫API,轻松获取电商商品SKU信息

在电子商务的精细化运营时代&#xff0c;SKU信息的重要性不言而喻。SKU&#xff08;Stock Keeping Unit&#xff09;信息不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。如何高效、准确地获取这些信息&#xff0…

LLM 的推理优化技术纵览

推理是 LLM 应用的重要一环&#xff0c;在部署服务环节影响重大&#xff0c;本文将讨论主流的 LLM 的推理优化技术。 一、子图融合&#xff08;subgraph fusion&#xff09; 图融合技术即通过将多个 OP&#xff08;算子&#xff09;合并成一个 OP&#xff08;算子&#xff09;&…

腾讯云宝塔面板前后端项目发版

后端发版 1. 打开“网站”页面&#xff0c;找到java项目&#xff0c;点击状态暂停服务 2.打开“文件”页面&#xff0c;进入jar包目录&#xff0c;删除原有的jar包&#xff0c;上传新jar包 3. 再回到第一步中的网站页面&#xff0c;找到jar项目&#xff0c;启动项目即可 前端发…

SHELL脚本之循环语句的for循环以及中断循环的语句

循环应用 一.循环介绍 重复 for&#xff0c;while&#xff0c;until&#xff0c; 循环&#xff1a; 1.循环的开始条件 2.循环的操作 3.循环的结束条件 二.for循环的使用 注意&#xff1a;for循环读取文件区分行时&#xff0c;会按照换行符&#xff0c;空白字符区分行。…

计算力学|采用python进行有限元模拟

从abaqus输出的inp文件中读取节点和单元信息 import meshio mesh meshio.read(Job-3.inp) coords mesh.points###coords即为各个节点的坐标 Edof mesh.cells_dict[triangle]#Edof为三角形单元的节点号 1.单元刚度矩阵 def element_stiffness(n1,coords,E,v,t): node1 c…

UNIX网络编程-传输层

概述 传输层主要包括&#xff1a;TCP、UDP、SCTP&#xff08;流控制传输协议&#xff09;&#xff01; 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议&#xff0c;最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP&#xff1a;或是…