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,一经查实,立即删除!

相关文章

「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和…

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

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

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本质…

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

作者&#xff1a;计缘 LLM Chat 应用大家应该都不陌生&#xff0c;这类应用也逐渐称为了我们日常的得力助手&#xff0c;如果只是个人使用&#xff0c;那么目前市面上有很多方案可以快速的构建出一个LLM Chat应用&#xff0c;但是如果要用在企业生产级别的项目中&#xff0c;那…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

python文件自动化(4)

接上节课内容&#xff0c;在开始正式移动文件到目标文件夹之前&#xff0c;我们需要再思考一个问题。在代码运行之前&#xff0c;阿文的下载文件夹里已经存在一些分类文件夹了&#xff0c;比如图例中“PDF文件”这个文件夹就是已经存在的。这样的话&#xff0c;在程序运行时&am…

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext new ClassPathXmlApplicationContext("bean.xml"); } BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanFactory的功能相似&#xff0c;都是…

linux 安装redis

1. 更新系统和安装依赖 sudo apt update sudo apt install build-essential tcl2. 下载 Redis 源码(没有opt文件夹&#xff0c;则先创建opt文件夹) cd /opt wget http://download.redis.io/releases/redis-6.2.6.tar.gz3. 解压和编译 Redis 解压下载的文件&#xff0c;并进入…

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备&#xff0c;支持IPC和NVR&#xff0c;依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址&#xff0c;比如主码流地址、子码流地址。可对每个设备设…

深入了解以太坊

1. 以太坊编程语言和操作码 以太坊中智能合约的代码以高级语言编写&#xff0c;如 Serpent、LLL、Solidity 或 Viper,并可转换为 EVM 可以理解的字节码&#xff0c;以便执行。 Solidity 是为以太坊开发的高级语言之一&#xff0c;它具有类似 JavaScript 的语法&#xff0c;可以…