数据库mysql no.4

1.流程控制函数


①if(条件表达式,表达式1,表达式2):

                                         如果条件表达式成立,返回表达式1,否则返回表达式2
     case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end

    case情况2
case 
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end

2.分组函数

sum  求和     avg  平均值              max 最大值    min 最小值    count 计算个数

只能处理数值型                              任何类型都可以处理

他们都忽略null值

3.分组查询 group by 

筛选条件

数据源位置关键字
分组前筛选原始表group by子句前where
分组后筛选分组后的结果集group by子句后having

注意:分组函数作为筛选条件的时候一定是放在having子句中

          分组查询也可以用排序order by,一般置于最后

          优先使用分组前筛选,即where筛选

4.连接查询

内连接:等值连接,非等值连接(betweenand..)自连接(两个表为一个)

外连接:左外连接(left outer join),右外连接,全外连接(full outer join)

交叉连接(cross outer join)

注意:如果给表起了别名,则查询的字段就不能使用原来的表名去限定

5.SQL练习

-- 分组查询GROUP BY
-- 查询每个部门的平均工资
SELECT AVG(salary),job_id FROM employees GROUP BY job_id;
-- 查询每个位置上的部门个数
SELECT COUNT(*),location_id FROM departments GROUP BY location_id;-- 添加筛选条件  查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;-- 查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;SELECT  COUNT(*),department_id FROM employees GROUP BY department_id HAVING count(*)>2;-- 查询每个工种有奖金的员工的最高工资》12000的工种编号和最高工资
SELECT MAX(salary),job_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING max(salary)>12000;-- 查询领导编号>102的每个领导手下的最低工资》5000的领导编号是哪个以及最低工资SELECT MIN(salary),manager_id FROM employees WHERE manager_id>102 GROUP BY manager_id HAVING MIN(salary)>5000; -- 按员工姓名的长度分组,查询每一组的员工个数筛选员工个数>5的有哪些
SELECT COUNT(*) c,LENGTH(last_name) a from employees GROUP BY a HAVING c>5;-- 按多个字段分组
-- 查询每个部门每个工种的员工的平均工资
SELECT AVG(salary),department_id,job_id FROM employees WHERE department_id IS NOT NULL GROUP BY department_id,job_id HAVING AVG(salary)>12000 ORDER BY AVG(salary) DESC;-- 查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id FROM employees GROUP BY job_id;
-- 查询员工最高工资和最低工资的差距
SELECT max(salary)-MIN(salary) difference FROM employees;
-- 查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT MIN(salary),manager_id FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)>=6000;
-- 查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
SELECT department_id,COUNT(*),AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary) DESC
-- 选择具有各个job_id的员工人数
SELECT COUNT(*),job_id FROM employees GROUP BY job_id;SELECT last_name,department_name FROM employees,departments where employees.department_id=departments.department_id;-- 查询员工名 工种号,工种名
SELECT last_name,jobs.job_id,job_title FROM employees,jobs WHERE employees.job_id=jobs.job_id;
-- 别名
SELECT last_name,a.job_id,job_title FROM employees a,jobs b WHERE a.job_id=b.job_id;-- 查询有奖金的员工名、部门名
SELECT last_name,department_name, commission_pct FROM employees e,departments d WHERE e.department_id=d.department_id AND e.commission_pct is not null;-- 查询城市名中第二个字符为o的部门名和城市名
SELECT department_name,city FROM departments d,locations l WHERE d.location_id=l.location_id and city LIKE '_o%'-- 查询每个城市的部门个数
SELECT COUNT(*) 个数,city FROM departments,locations
WHERE departments.location_id=locations.location_id GROUP BY city;-- 查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title,COUNT(*) FROM jobs,employees WHERE
jobs.job_id=employees.job_id GROUP BY job_title ORDER BY COUNT(*) DESC;-- 查询员工名,部门名和所在的城市
SELECT last_name,department_name,city FROM employees e,departments d,locations l WHERE
e.department_id=d.department_id and d.location_id=l.location_id GROUP BY last_name,department_name,city ORDER BY department_name DESC;-- 自连接
-- 查询员工名和上级的名称
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m WHERE e.manager_id=m.employee_id;-- 显示员工表的最大工资,工资平均值
SELECT max(salary),ROUND(AVG(salary),2) FROM employees;SELECT employee_id,job_id,last_name FROM employees ORDER BY department_id DESC,salary ASC;SELECT job_id FROM employees WHERE job_id LIKE '%a%e%';SELECT NOW();
SELECT TRIM(' s s s   ');
SELECT TRIM('a' FROM 'aaa hejun aaa');
SELECT SUBSTR('hejun',3,3);-- 显示所有员工的姓名,部门号和部门名称
SELECT last_name,e.department_id,d.department_name FROM employees e,departments d WHERE e.department_id=d.department_id; -- 查询90号部门员工的job_id和90号部门的location_id
SELECT job_id,location_id FROM employees e,departments d WHERE
e.department_id=d.department_id AND e.department_id=90;-- 查询每个国家下的部门个数大于2的国家编号
SELECT country_id,COUNT(*) 部门个数 FROM departments d,locations l WHERE d.location_id=l.location_id GROUP BY country_id HAVING 部门个数>2;SELECT e.last_name employees,e.employee_id "Emp#",m.last_name manager,m.manager_id "Mgr#" FROM employees e,employees m WHERE
e.manager_id=m.employee_id AND e.last_name='kochhar';-- 用内连接实现等值连接
-- 查询员工名 部门名
SELECT last_name,department_name FROM employees e INNER JOIN
departments d on e.department_id=d.department_id;-- 查询名字中包含e的员工名和工种名
SELECT last_name,job_title FROM employees e INNER JOIN
jobs j on e.job_id=j.job_id WHERE e.last_name LIKE '%e%';-- 查询员工名部门名工种名并按部门名降序
SELECT last_name,department_name,job_title FROM employees e
INNER JOIN departments d on e.department_id=d.department_id
INNER JOIN jobs j on e.job_id=j.job_id ORDER BY department_name
DESC;-- 查询姓名中包含字符k的员工的名字,上级的名字
SELECT e.last_name,m.last_name FROM employees e
INNER JOIN employees m on e.manager_id=m.employee_id
AND e.last_name like '%k%';
SELECT e.last_name,m.last_name FROM employees e
INNER JOIN employees m on e.manager_id=m.employee_id
WHERE e.last_name like '%k%';SELECT * FROM beauty;
SELECT * FROM boys;SELECT b.`name`,bo.* FROM beauty b left OUTER JOIN
boys bo on b.boyfriend_id=bo.id WHERE bo.id is not NULL;SELECT b.`name`,bo.* FROM boys bo right OUTER JOIN
beauty b on b.boyfriend_id=bo.id WHERE bo.id is not NULL;-- 查询哪个部门没有员工
SELECT d.*,e.employee_id 
FROM employees e 
RIGHT OUTER JOIN departments d 
on d.department_id=e.department_id 
WHERE e.department_id is null;SELECT b.id,b.name,bo.*
FROM beauty b LEFT JOIN
boys bo on b.boyfriend_id=bo.id
WHERE b.id>3;SELECT city,d.* FROM locations l 
left outer join departments d ON
l.location_id=d.location_id
WHERE d.location_id is NULL;

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

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

相关文章

新一代工厂融合广播系统,助力工业行业可持续发展

在当今高度竞争的工业环境中,工厂的运营效率和生产安全至关重要。为了实现这一目标,新一代工厂融合广播系统应运而生,将指挥中心、值班中心、融合通信调度主机、厂区终端和防爆话机紧密连接,构建了一个全面、高效的通信网络。 系统…

Linux进程管理、ps命令、kill命令

每一个程序在运行的时候都会被操作系统注册为系统中的一个进程 补充一下操作系统的内容: 进程实体(又称进程映像):程序段、相关数据段、PCB三部分构成 进程是进程实体的运行过程,是系统进行资源分配的一个独立单位 …

团结引擎的安装

团结引擎有多种方式可以安装,具体可以参考团结引擎官方文档,这里我们使用最简单的安装方式,通过团结Hub来安装。 1. 安装 Tuanjie Hub 进入团结引擎官网,点击右上角的【下载Unity】,进入下载界面,选择“下载…

C++——冒泡排序

作用:最常用的排序算法,对数组内元素进行排序 1,比较相邻的元素,如果第一个比第二个大,就交换他们两个。 2,对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。 3&…

摘:国六排放法规下的重型车车载终端的革新

系列文章目录 文章目录 系列文章目录一、国六排放法规下的重型车车载终端的革新二、使用步骤1.引入库2.读入数据 一、国六排放法规下的重型车车载终端的革新 添加链接描述 ascii码 二、使用步骤 1.引入库 代码如下(示例): import numpy a…

并发编程(六)

1、HashMap、HashTable、ConcurrentHashMap的比较 HashMap、HashTable和ConcurrentHashMap是Java中的几种重要的数据结构,它们都可以用来存储键值对。但是,它们之间存在一些重要的差异,尤其是在线程安全和性能方面。以下是它们之间的比较&am…

Python 基础(八):函数

1 简介 简单来说函数就是一段实现特定功能的代码,使用函数可以提高代码的重复利用率。Python 中有很多内置函数,比如之前常用的 print 函数,当内置函数不足以满足我们的需求时,我们还可以自定义函数。 2 自定义函数 Python 使用…

JDK21和 Flowable 7.0.0

JDK21和 Flowable 7.0.0 一.Flowable二.项目搭建1.依赖包2.数据库3.资源文件1.YML配置文件2.Drools kbase3.Drools rule4.DMN 决策表5.BPMN 流文件 4.BPMN 流程图绘制插件5.测试代码1.启动类2.Flowable 配置3.Camel 配置1.Camel 配置2.Camel Router 定义 4.扩展类监听1.外部工作…

SOP-8 SOIC-8 SO-8封装区别

学习自记: SO8和SO-8封装是相同的,SOP8和SOP-8封装也是相同的。SO8封装与SOP8封装的尺寸稍有差异,但差别不大。在 PCB 板上,这两种封装之间没有区别。 SOP也是一种很常见的封装形式,始于70年代末期。SOP封装的应用范围…

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…

在Windows Server 2012中部署war项目

目录 一.安装jdk 二.安装tomcat 三.安装MySQL 四.部署项目 好啦今天就到这了,希望帮到你了哦 前言:具体步骤: 1.安装JDK: 2.安装tomcat: 3.安装MySQL: 4.部署项目: 一.安装jdk 将所需文件放…

苍穹外卖学习----出错记录

1.微信开发者工具遇到的问题: 1.1appid消失报错: {errMsg: login:fail 系统错误,错误码:41002,appid missing [20240112 16:44:02][undefined]} 1.2解决方式: appid可在微信开发者官网 登录账号后在开发栏 找到 复制后按以下步骤粘贴即…

2024.1.4力扣每日一题——被列覆盖的最多行数

2024.1.4 题目来源我的题解方法一 回溯位运算优化 题目来源 力扣每日一题;题序:2397 我的题解 方法一 回溯位运算优化 这道题一看就会想到使用回溯法,但是采用回溯法后如何判断有多少行被覆盖,直接计算矩阵时间复杂度较高&…

怎么将文件批量重命名为不同名称?

怎么将文件批量重命名为不同名称?有许多情况下可以考虑对文件进行批量重命名为不同名称,文件分类和整理:当您需要对一组文件进行分类、整理或重新组织时,可以考虑将它们批量重命名为不同的名称。这有助于更好地组织文件并使其更易…

提升测试多样性,揭秘Pytest插件pytest-randomly

大家可能知道在Pytest测试生态中,插件扮演着不可或缺的角色,为开发者提供了丰富的功能和工具。其中,pytest-randomly 插件以其能够引入随机性的特性而备受欢迎。本文将深入探讨 pytest-randomly 插件的应用,以及如何通过引入随机性…

在线项目实习分享:股票价格形态聚类与收益分析

01前置课程 数据挖掘基础数据探索数据预处理数据挖掘算法基础Python数据挖掘编程基础Matplotlib可视化Pyecharts绘图 02师傅带练 行业联动与轮动分析 通过分析申银万国行业交易指数的联动与轮动现象,获得有意义的行业轮动关联规则,并在此基础上设计量…

树莓派 gpio 安装及简单使用

安装 git clone https://github.com/WiringPi/WiringPi cd WiringPi/ ./build查看版本 gpio -v gpio version: 2.70列出io gpio readall-----------------------------Model B1-----------------------------| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name…

【NI-DAQmx入门】LabVIEW中DAQmx同步

1.同步解释 1.1 同步基础概念 触发器:触发器是控制采集的命令。您可以使用触发器来启动、停止或暂停采集。触发信号可以源自软件或硬件源。 时钟:时钟是用于对数据采集计时的周期性数字信号。根据具体情况,您可以使用时钟信号直接控制数据采…

并发编程(十一)

性能测试的常用命令 1、Netstat是在内核中访问网络连接状态及其相关信息的程序,它能够显示协议统计和当前TCP/IP的网络连接。 Netstat命令的常用格式如下: netstat -a:显示所有网络连接和侦听端口。 netstat -b:显示在创建网络…

基于SSM的驾校预约管理系统

基于SSM的驾校预约管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 详情 管理员界面 摘要 随着社会的不断发展,驾驶技能的需求逐渐增…