MySQL笔记2(DQL查询语言【条件、分组、排序、限制、子查询、左右连接、内连接、联合查询】)

DQL数据查询语言与项目高级查询实战

先安装数据库并创建一个库

并创建以下数据

/*创建部门表*/CREATE TABLE dept(
deptnu INT PRIMARY KEY comment '部门编号',
dname VARCHAR(50) comment '部门名称',
addr VARCHAR(50) comment '部门地址'
);/*某个公司的员工表*/
CREATE TABLE employee(
empno INT PRIMARY KEY comment '雇员编号',
ename VARCHAR(50) comment '雇员姓名',
job VARCHAR(50) comment '雇员职位',
mgr INT comment '雇员上级编号',
hiredate DATE comment '雇佣日期',
sal DECIMAL(7,2) comment '薪资',
deptnu INT comment '部门编号'
)ENGINE=MyISAM DEFAULT CHARSET=utf8;/*创建工资等级表*/
CREATE TABLE salgrade(
grade INT PRIMARY KEY comment '等级',
lowsal INT comment '最低薪资',
higsal INT comment '最高薪资'
);/*插入dept表数据*/
INSERT INTO dept VALUES (10, '研发部', '北京');
INSERT INTO dept VALUES (20, '工程部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '深圳');/*插入emp表数据*/
INSERT INTO employee VALUES (1009, '唐僧', '董事长', NULL, '2010-11-17', 50000, 10);
INSERT INTO employee VALUES (1004, '猪八戒', '经理', 1009, '2001-04-02', 29750, 20);
INSERT INTO employee VALUES (1006, '猴子', '经理', 1009, '2011-05-01', 28500, 30);
INSERT INTO employee VALUES (1007, '张飞', '经理', 1009, '2011-09-01', 24500,10);
INSERT INTO employee VALUES (1008, '诸葛亮', '分析师', 1004, '2017-04-19', 30000, 20);
INSERT INTO employee VALUES (1013, '林俊杰', '分析师', 1004, '2011-12-03', 30000, 20);
INSERT INTO employee VALUES (1002, '牛魔王', '销售员', 1006, '2018-02-20', 16000, 30);
INSERT INTO employee VALUES (1003, '程咬金', '销售员', 1006, '2017-02-22', 12500, 30);
INSERT INTO employee VALUES (1005, '后裔', '销售员', 1006, '2011-09-28', 12500, 30);
INSERT INTO employee VALUES (1010, '韩信', '销售员', 1006, '2018-09-08', 15000,30);
INSERT INTO employee VALUES (1012, '安琪拉', '文员', 1006, '2011-12-03', 9500, 30);
INSERT INTO employee VALUES (1014, '甄姬', '文员', 1007, '2019-01-23', 7500, 10);
INSERT INTO employee VALUES (1011, '妲己', '文员', 1008, '2018-05-23', 11000, 20);
INSERT INTO employee VALUES (1001, '小乔', '文员', 1013, '2018-12-17', 8000, 20);/*插入salgrade表数据*/
INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990);

部门表dept

员工表employee


工资等级表salgrade

mysql查询子句之一where条件查询

简单查询

select * from employee;select empno,ename,job as ename_job from employee

精确条件查询

select * from employee where ename='后裔';select * from employee where sal != 50000;select * from employee where sal <> 50000;select * from employee where sal > 10000;

模糊条件查询

show variables like '%aracter%';select * from employee where ename like '林%';

范围查询

select * from employee where sal between 10000 and 30000;select * from employee where hiredate between '2011-01-01' and '2017-12-1';

离散查询

select * from employee where ename in ('猴子','林俊杰','小红','小胡');

清除重复值

select distinct(job) from employee;

统计查询(聚合函数)

-- count(code)或者count(*)
select count(*) from employee;
select count(ename) from employee;-- sum() 计算总和
select sum(sal) from employee;-- max() 计算最大值
select * from employee where sal= (select max(sal) from employee);-- avg() 计算平均值
select avg(sal) from employee;-- min() 计算最低值
select * from employee where sal= (select min(sal) from employee);-- concat函数: 起到连接作用
select concat(ename,' 是 ',job) as aaaa from employee;

mysql查询子句之二group by分组查询(分组)

作用:把行 按 字段 分组

语法:group by 列1,列2....列N

适用场合:常用于统计场合,一般和聚合函数连用

select deptnu,count(*) from employee group by deptnu;select deptnu,job,count(*) from employee group by deptnu,job;select job,count(*) from employee group by job;

mysql查询子句之三having条件查询(筛选)

作用:对查询的结果进行筛选操作

语法:having 条件 或者 having 聚合函数 条件

适用场合:一般跟在group by之后

select job,count(*) from employee group by job having job ='文员';select deptnu,job,count(*) from employee group by deptnu,job having count(*)>=2;select deptnu,job,count(*) as 总数 from employee group by deptnu,job having 总数>=2;

mysql查询子句之四order by排序查询(排序)

作用:对查询的结果进行排序操作

语法:order by 字段1,字段2 .....

适用场合:一般用在查询结果的排序

select * from employee order by sal;select * from employee order by hiredate;select deptnu,job,count(*) as 总数 from employee group by deptnu,job having 总数>=2
order by deptnu desc;select deptnu,job,count(*) as 总数 from employee group by deptnu,job having 总数>=2
order by deptnu asc;select deptnu,job,count(*) as 总数 from employee group by deptnu,job having 总数>=2
order by deptnu;-- 顺序:where ---- group by ----- having ------ order by

mysql查询子句之五limit限制查询(限制)

作用:对查询结果起到限制条数的作用

语法:limit n,m n:代表起始条数值,不写默认为0;m代表:取出的条数

适用场合:数据量过多时,可以起到限制作用

select * from employee LIMIT 3,4;

mysql查询之exists型子查询

exists型子查询后面是一个受限的select查询语句

exists子查询,如果exists后的内层查询能查出数据,则返回 TRUE 表示存在;为空则返回 FLASE则不存在。

select 1 from employee where 1=1;
select * from 表名 a where exists (select 1 from 表名2 where 条件);-- eg:查询出公司有员工的部门的详细信息
select * from dept a where exists (select 1 from employee b where a.deptnu=b.deptnu);
select * from dept a where not exists (select 1 from employee b where a.deptnu=b.deptnu);

mysql查询之左连接查询与右连接查询

左连接称之为左外连接 右连接称之为右外连接 这俩个连接都是属于外连接

左连接关键字:left join 表名 on 条件 / left outer 表名 join on 条件 右连接关键字:right join 表名 on 条件/ right outer 表名 join on 条件

左连接说明: left join 是left outer join的简写,左(外)连接,左表(a_table)的记录将会全部表示出来, 而右表 (b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

右连接说明:right join是right outer join的简写,与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合 搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

-- 列出部门名称和这些部门的员工信息,同时列出那些没有的员工的部门
-- dept,employee
select a.dname,b.* from dept a left join employee b on a.deptnu=b.deptnu;
select b.dname,a.* from employee a right join dept b on b.deptnu=a.deptnu;

mysql查询之内连接查询与联合查询

内连接查询

内连接:获取两个表中字段匹配关系的记录

主要语法:INNER JOIN 表名 ON 条件;

-- 想查出员工张飞的所在部门的地址
select a.addr from dept a inner join employee b on a.deptnu=b.deptnu and b.ename='张飞';
select a.addr from dept a,employee b where a.deptnu=b.deptnu and b.ename='张飞';

联合查询

联合查询:就是把多个查询语句的查询结果结合在一起

主要语法1:... UNION ... (去除重复) 主要语法2:... UNION ALL ...(不去重复)

union查询的注意事项:

(1)两个select语句的查询结果的“字段数”必须一致;

(2)通常,也应该让两个查询语句的字段类型具有一致性;

(3)也可以联合更多的查询结果;

(4)用到order by排序时,需要加上limit(加上最大条数就行),需要对子句用括号括起来

-- 对销售员的工资从低到高排序,而文员的工资从高到低排序
( SELECT * FROM employee a WHERE a.job = '销售员' ORDER BY a.sal LIMIT 999999 ) UNION
( SELECT * FROM employee b WHERE b.job = '文员' ORDER BY b.sal DESC LIMIT 999999 );

mysql查询之项目高级查询实战一

查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。

select deptnu,count(*) from employee group by deptnu;select a.deptnu,a.dname,a.addr,b.zongsu from dept a,(select deptnu,count(*)as zongsu from employee group by deptnu)b where a.deptnu =b.deptnu

列出薪金比安琪拉高的所有员工。

select * from employee where sal > (select a.sal from employee a where a.ename="安琪拉");

列出所有员工的姓名及其直接上级的姓名。

select a.ename, ifnull(b.ename,'BOSS') as leader from employee a LEFT JOIN employee b ON a.mgr= b.empno;

列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。

SELECTa.deptnu AS '员工编号',a.ename,c.dname AS '部门',a.hiredate AS '入职时间',b.hiredate AS '上级入职时间',ifnull( b.ename, 'BOSS' ) AS leader 
FROMemployee aLEFT JOIN employee b ON a.mgr = b.empnoLEFT JOIN dept c ON a.deptnu = c.deptnu 
WHEREa.hiredate > b.hiredate;

列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

SELECTa.dname,b.*
FROMemployee AS bRIGHT JOIN dept a ON a.deptnu = b.deptnu;

列出所有文员的姓名及其部门名称,所在部门的总人数。

-- SELECT deptnu,COUNT(deptnu)as zongshu FROM employee GROUP BY deptnuSELECT b.dname ,a.ename,c.zongshu FROM employee a ,dept b, (SELECT deptnu,COUNT(deptnu)as zongshu FROM employee GROUP BY deptnu) c
where a.job = '文员' and a.deptnu= b.deptnu and b.deptnu = c.deptnu

列出最低薪金大于15000的各种工作及从事此工作的员工人数

SELECT job,COUNT(*) FROM `employee` GROUP BY job HAVING MIN(sal) >"15000"

列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。

SELECT * FROM employee  a RIGHT JOIN dept b ON a.deptnu = b.deptnu WHERE b.dname ="销售部"

列出薪金比 在部门30工作的员工的薪金 还高的员工姓名和薪金、部门名称。

SELECT* from employee WHERE sal>(SELECT MAX(sal) FROM employee b WHERE b.deptnu =30 )

列出每个部门的员工数量、平均工资。

SELECT deptnu ,COUNT(deptnu) as '员工数量' ,AVG(sal)AS"平均工资" FROM `employee` GROUP BY deptnu

列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。

SELECTc.dname,b.ename,d.grade 
FROMemployee a,employee b,dept c,salgrade d 
WHEREa.empno = b.mgr AND ( SELECT AVG( sal ) FROM `employee` ) < a.salAND  a.sal BETWEEN d.lowsal AND d.higsalAND a.deptnu = c.deptnu

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

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

相关文章

Python闭包示例代码

代码示例&#xff1a; def outer_function(x):def inner_function(y):return x yreturn inner_functionclosure_example outer_function(5) result closure_example(3) # 输出为 8在这个示例中&#xff0c;outer_function 是一个包含内部函数的闭包。让我们逐步分析它的工…

金融业开源技术 术语

金融业开源技术 术语 1 范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全设备类型

一、隔爆型 隔爆型定位设备是将可能产生火花、电弧和危险温度的零部件都放置在一个隔爆外壳内。当内部发生爆炸时&#xff0c;外壳能够承受爆炸压力而不损坏&#xff0c;并且不会使内部爆炸传播到周围的爆炸性环境中。隔爆型产品通常比较坚固耐用&#xff0c;但相对来说体积和重…

「ComfyUI」比 joy_caption 更好用的提示词反推模型!

前言 距离我们上次介绍 joy_caption 还没几天呢&#xff0c;这就又出新模型来与 joy_caption 一争高下了。 今天我们要介绍的是&#xff1a;Florence-2-X-PromptGen-v1.5&#xff0c;是在 Florence-2 的基础上进行精细调优的一款高级图像标注工具&#xff0c;专门为生成和标注…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文&#xff08;网名wendux&#xff09;创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》&#xff0c;网址&#xff1a;第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门

1. C#与.NET的发展历程 C#是由Microsoft开发的现代编程语言&#xff0c;最初伴随着.NET Framework发布。随着技术的进步&#xff0c;特别是针对跨平台开发的需求&#xff0c;Microsoft推出了.NET Core&#xff0c;这是一个开源且跨平台的框架&#xff0c;支持Windows、macOS和…

项目实战 ---- 商用落地视频搜索系统(8)---优化(2)---查询逻辑层优化

目录 背景 技术衡量与方案 一种可实现方案 可实现方案及设计描述 可能存在的问题 一种创新实现方案 方案的改良设计 策略公式 优化的实现 完整代码 代码解释 异常场景的考量 处理方式 运行注意事项 运行结果 结果优化对比与解释 背景 在项目实战 ---- 商用落地…

发票真伪识别接口费用-发票真伪查验接口-发票验真示例

发票信息核验是一个重要的财务和会计过程&#xff0c;涉及到对发票上的信息进行验证&#xff0c;以确保其真实性和准确性。在数字化时代&#xff0c;这一过程企业通常想通过调用发票查验接口的方式实现自动化管理模式。 发票查验接口费用不同的服务提供商会有不同的收费标准&a…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息&#xff0c;甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗&#xff1f;如果是&#xff0c;你有利…

LeetCode 每日一题 2024/9/2-2024/9/8

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/2 3153. 所有数对中数位不同之和9/3 2708. 一个小组的最大实力值9/4 2860. 让所有学生保持开心的分组方法数9/5 3174. 清除数字9/6 3176. 求出最长好子序列 I9/7 3177. 求…

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs

828华为云征文&#xff5c;华为云Flexus X实例docker部署MinIO对象存储系统obs 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定…

数据分析:R语言计算XGBoost线性回归模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…

5G网络建设

题目描述 现需要在基城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基 站能互联互通&#xff0c;不同基站之间假设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤…

GeekDesk:不只是桌面美化,更是你的时间管理与效率提升专家

前言 科技&#xff0c;如同织就未来的经纬线&#xff0c;以智慧为梭&#xff0c;穿梭于生活的每一个角落&#xff0c;编织出一张便捷之网&#xff0c;让人类的生活如诗如画&#xff0c;绚烂多彩--这一理念深刻地影响着每一个科技产品的诞生与发展。在众多旨在提升工作效率与生…

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

函数指针和指针函数

指针 指针函数 指针函数一个函数&#xff0c;只不过这个函数的返回值是一个地址值 和普通函数唯一的区别就是在函数名前面多了一个*号 函数返回值必须用同类型的指针变量来接受 也可以将其返回值定义为 void*类型&#xff0c;在调用的时候强制转换返回值为自己想要的类型 str…

一、selenium自动化简介selenium工具集

文章目录 一、简介二、组成部分三、selenium工具集3.1 Selenium IDE3.2 Selenium WebDriver3.3 Selenium Grid3.4 Appium 一、简介 官方网站 Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互&#xff0c;用于扩展浏览器分…

Excel使用VLOOKUP公式匹配不出正确公式,返回#N/A

问题&#xff1a; Excel使用VLOOKUP公式匹配不出正确公式&#xff0c;返回#N/A 原因&#xff1a; 原数据和匹配的数据格式不一致 解决办法&#xff1a; 把格式都设置为文本。 例如添加一列&#xff0c;输入英文符号&#xff0c;然后把数据源拼接起来&#xff0c;转换为文…

Linux入门攻坚——31、rpc概念及nfs和samba

NFS&#xff1a;Network File System 传统意义上&#xff0c;文件系统在内核中实现 RPC&#xff1a;函数调用&#xff08;远程主机上的函数&#xff09;&#xff0c;Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…

java实操(二)-酒店管理系统

一、题目 使用二维数组实现酒店管理系统。功能如下&#xff1a; 1.查看酒店所有房间的状态 2.预定房间 3.退房 4.退出系统 二、程序 1.Hotel.java package Hotel;public class Hotel {private int id;private String standard;private String status;public Hotel() {}…