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

news/2024/9/18 17:45:36/ 标签: mysql, 笔记, 数据库

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.ppmy.cn/news/1523320.html

相关文章

html备忘录

备忘录 网站收藏数据&#xff1a; 网站收藏.js const webLinks [{ title: "智能翻译", src: "https://fanyi.baidu.com" },{ title: "哔哩哔哩", src: "https://www.bilibili.com" },{ title: "百度一下&#xff0c;你就知道&…

漫谈设计模式 [9]:外观模式

引导性开场 菜鸟&#xff1a;老鸟&#xff0c;我最近在做一个项目&#xff0c;感觉代码越来越复杂&#xff0c;我都快看不懂了。尤其是有好几个子系统&#xff0c;它们之间的调用关系让我头疼。 老鸟&#xff1a;复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你…

微信支付开发避坑指南

1 微信支付的坑 1.1 不能用前端传递过来的金额 订单的商品金额要从数据库获取&#xff0c;前端只传商品 id。 1.2 交易类型trade type字段不要传错 v2版API&#xff0c;不同交易类型&#xff0c;要调用的支付方式也不同。 1.3 二次签名 下单时&#xff0c;在拿到预支付交…

记录深度学习量化操作

0. 简介 深度学习中做量化提升运行速度是最常用的方法&#xff0c;尤其是大模型这类非常吃GPU显存的方法。一般是高精度浮点数表示的网络权值以及激活值用低精度&#xff08;例如8比特定点&#xff09;来近似表示达到模型轻量化&#xff0c;加速深度学习模型推理&#xff0c;目…

MySQL表的操作与数据类型

目录 前言 一、表的操作 1.创建一个表 2.查看表的结构 3.修改表 4.删除一个表 二、 MySQL的数据类型 0.数据类型一览&#xff1a; 1.整数类型 2.位类型 3.小数类型 4.字符类型 前言 在MySQL库的操作一文中介绍了有关MySQL库的操作&#xff0c;本节要讲解的是由库管理的结构——…

TinyWebSever源码逐行注释(三)_ thread_pool.cpp

前言 项目源码地址 项目详细介绍 项目简介&#xff1a; Linux下C轻量级Web服务器&#xff0c;助力初学者快速实践网络编程&#xff0c;搭建属于自己的服务器. 使用 线程池 非阻塞socket epoll(ET和LT均实现) 事件处理(Reactor和模拟Proactor均实现) 的并发模型使用状态机…

python基础语法四-数据可视化

书接上回&#xff1a; python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 1. plot函数绘制简单折线图 (1)需要的模块&#xff1a;matplotlib.pyplot (2)语法&#xff1a;matplotlib.pyplot.plot(x, y, format_string, **kwargs) x: x轴数…

C语言程序设计-练习篇

不知道结果仍义无反顾地才是勇士。 三&#xff0c;打印整数二进制的奇数位和偶数位 题目内容&#xff1a; 获取一个整数二进制序列中所有的奇数位和偶数位&#xff0c;分别打印出二进制序列 #include <stdio.h>//打印整数二进制的奇数位和偶数位 int main() {int i 0…

C语言从头学55——学习头文件errno.h、float.h

1、头文件 errno.h 中的变量 errno 的使用 在 errno.h 定义了一个 int 类型的变量 errno&#xff08;错误码&#xff09;&#xff0c;如果发现这个变量出现非零值&#xff0c;表示已经执行的函数发生了错误。这个变量一般多用于检查数学函数运算过程中发生的错误。 …

Vue面试题——项目介绍以及SPA介绍

谈谈你开发的项目背景与、架构和技术栈 项目背景 假设我们正在开发一个名为“智慧旅游助手”的Web平台。该平台旨在为用户提供一站式的旅游服务&#xff0c;包括目的地推荐、酒店预订、行程规划、在线购票&#xff08;如门票、机票&#xff09;、旅游攻略分享以及基于地理位置…

不到200行代码,一键写出简单贪吃蛇网页游戏!附详细代码!快来看看吧!

​哈喽大家好&#xff0c;这里是大白百宝阁&#xff0c;每天分享一段小代码~ 今天要分享的是&#xff0c;不到200行代码&#xff0c;制作html版贪吃蛇&#xff0c;效果如下&#xff1a; 游戏结束后&#xff0c;还会显示&#xff1a; 代码如下&#xff1a; <!DOCTYPE html&g…

传统CV算法——边缘算子与图像金字塔算法介绍

边缘算子 图像梯度算子 - Sobel Sobel算子是一种用于边缘检测的图像梯度算子&#xff0c;它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域&#xff0c;这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来…

基于Java+SpringBoot+Vue+MySQL的美容美发管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的美容美发管理系统【附源码文档】、前后…

【Visual Studio 报错】vs 在使用二进制写入文件时弹窗报错:使用简体中文 gb2312 编码加载文件

如以下报错 解决办法 解决方法&#xff1a;文件->高级保存选项->将文件编码形式改为“UTF-8带签名” 若找不到高级保存选项&#xff0c;可以跟着下面路径把该选项调出来 &#xff1a;工具->自定义->命令->菜单栏中改成文件->预览右边点添加命令->类别中…

第二证券:涨停潮!传手机将使用钛金属外壳?

今天早盘&#xff0c;银行股再度重挫&#xff0c;导致上证指数、上证50纷乱创出阶段性新低&#xff0c;上证指数跌破2800点&#xff0c;小盘成长股则大面积反弹&#xff0c;创业板指、科创50等股指飘红。 盘面上&#xff0c;新式烟草、钛金属、锂矿、玻璃基板等板块涨幅居前&a…

全球性“微软蓝屏”事件的深思:网络安全与系统稳定性的挑战与应对

近日&#xff0c;由于微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;成为科技领域的热点新闻。这次事件不仅影响了全球约850万台设备&#xff0c;波及航空、医疗、传媒等关键行业&#xff0c;还导致美国超过2.3万架次航班延误。如此规模的系统中断&#xff0c;…

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库&#xff0c;添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存…

qt怎么格式化字符串?

在Qt中&#xff0c;格式化字符串可以通过多种方式实现&#xff0c;主要依赖于你的具体需求和上下文。下面列出了一些常见的方法&#xff1a; 1. 使用QString的arg()方法 QString类提供了arg()方法&#xff0c;这个方法允许你插入值到字符串中的占位符位置。占位符由%1、%2等表…

详细步骤!分享6款AI论文写作助手自动生成器实例操作!

在当今学术研究和写作领域&#xff0c;AI论文生成工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是6款推荐的AI论文写作助手自动生成器实例操作&#xff0c;特别推荐千笔-AIPassPa…

pytorch张量运算的广播机制

PyTorch 的广播机制&#xff08;broadcasting&#xff09;是指在进行张量运算时&#xff0c;自动扩展较小张量的形状以匹配较大张量的形状&#xff0c;使它们能够进行逐元素运算。广播机制避免了手动扩展张量的繁琐过程&#xff0c;并且在不增加内存开销的情况下进行高效计算。…