【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

这篇具有很好参考价值的文章主要介绍了【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.聚合函数

1.1.group by子句

1.2.having语句

2.单表查询 

2.2单表查询

3.多表查询

 3.2.子查询

5.内链接

6.外连接


1.聚合函数

函数 说明
count 返回查询到的数据的数量
sum 返回查询到的数据的总和
avg 返回查询到的数据的平均值
max 返回查询到的数据的最大值
min 返回查询到的数据的最小值

创建一个表

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

count:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

sum:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

avg:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

max:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

min: 

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

1.1.group by子句

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

查看不同的职业的最高/最低工资、平均工资:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

1.2.having语句

  • 通常和group by连用

使用上面的emp表,筛选平均工资大于1000的职业:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

where和having的区别:

  • 在上面的指令where是优先比group by 执行的,having 是晚于group by执行的;
  • having和where的使用差不多,只是有优先级的差别;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

2.单表查询 

2.1.三个表

员工表

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

部门表

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

薪资表

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接  

2.2单表查询

1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

select ename, sal, job from emp where (sal>500 or job='manager') and ename like 'J%';

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

2.按照部门号升序而雇员的工资降序排序

select * from emp order by deptno asc, sal desc;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

3.使用年薪进行降序排序

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

select ename, sal*12+ifnull(comm,0) '年薪' from emp order by 年薪 desc;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

4.显示工资最高的员工的名字和工作岗位

select ename, job, sal from emp where sal=(select max(sal) from emp);

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

5.显示工资高于平均工资的员工信息

select ename, sal from emp where sal>(select avg(sal) from emp);

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

6. 显示每个部门的平均工资和最高工资

select deptno, avg(sal), max(sal) from emp group by deptno;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

7.显示平均工资低于2000的部门号和它的平均工资

select deptno, avg(sal) avg_sal from emp group by deptno having 2000>avg_sal;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

8.显示每种岗位的雇员总数,平均工资

select job, count(job), avg(sal) job_avgsal from emp group by job;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

3.多表查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

1.显示部门号为10的部门名,员工名和工资

select emp.deptno, dname, ename, sal from emp,dept where (dept.deptno=emp.deptno) and (emp.deptno=10);

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

2.显示各个员工的姓名,工资,及工资级别

select ename,sal,grade,losal,hisal from emp,salgrade where sal between losal and hisal;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

3.1.自连接:自连接是指在同一张表连接查询

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

select worker.ename,worker.mgr,leader.empno,leader.ename from emp worker,emp leader where worker.mgr=leader.empno and worker.ename='FORD';

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

 3.2.子查询

  • 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

1.单行子查询:

显示SMITH同一部门的员工:

select * from emp where deptno=(select deptno from emp where ename='smith');

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

2.多行子查询:

in关键字;

  • 查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10) and deptno!=10;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

all关键字;

  • 显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
select ename,sal,deptno from emp where sal > all(select sal from emp where deptno=30);

 【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

 any关键字;

  • 显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
select ename,sal,deptno from emp where sal > any(select sal from emp where deptno=30);

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

 3.多列子查询

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

select ename from emp where (job,deptno) = (select job,deptno from emp where ename='smith') and ename!='smith';

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

4.在from子句中使用子查询

1.显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

select ename,deptno,sal,asal from emp, (select avg(sal) asal, deptno dn from emp group by deptno) avgsal where sal > avgsal.asal and emp.deptno=avgsal.dn;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

2.查找每个部门工资最高的人的姓名、工资、部门、最高工资

select ename, sal, deptno, ms from emp, (select max(sal) ms, deptno dn from emp group by dn) maxs where deptno=dn and sal=ms;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

 3.显示每个部门的信息(部门名,编号,地址)和人员数量

select dname, dept.deptno, loc,count_per  from dept, (select count(*) count_per, deptno from emp group by deptno) em where dept.deptno=em.deptno;

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

4.合并查询--union

  • union 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
  • union all 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行

将工资大于2500或职位是MANAGER的人找出来

select ename, sal, job from emp where sal>2500 union select ename, sal, job from emp where job='MANAGER';

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

5.内链接

语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

  • 和上面使用 from 表1,表2 where 筛选条件;是一样的只是语法不同

案例:显示SMITH的名字和部门名称

语法1:
select ename, dname from emp,dept where ename='SMITH' and emp.deptno=dept.deptno;
语法2:
select ename, dname from emp inner join dept on ename='SMITH' and emp.deptno=dept.deptno;

6.外连接

格式:

外左连接:
select 字段名 from 表名1 left join 表名2 on 连接条件
外右连接:
select 字段名 from 表名1 right join 表名2 on 连接条件

案例表:

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

查询所有人的成绩没有成绩也要显示信息: 

外左连接:显示以两张表左边为主

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接

外右连接:显示以两张表右边为主

【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接文章来源地址https://www.toymoban.com/news/detail-444707.html

到了这里,关于【MYSQL】聚合函数和单表/多表查询练习、子查询、内外连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL单表查询与多表连接查询

    单表查询 创建数据表emp 插入数据 -- 1. 查询出部门编号为30的所有员工 -- 2. 所有销售员的姓名、编号和部门编号。 -- 3. 找出奖金高于工资的员工。 -- 4. 找出奖金高于工资60%的员工。 -- 5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。 -- 6. 找出部门

    2024年02月13日
    浏览(24)
  • MySQL查询练习-单表查询

    查询出部门编号为30的所有员工: 所有销售员的姓名、编号和部门编号: 找出奖金高于工资的员工: 找出奖金高于工资60%的员工: 找出部门编号为10中所有经理,和部门编号为30中所有销售员的详细资料: 找出部门编号为10中所有经理,部门编号为30中所有销售员,还有即不

    2024年02月13日
    浏览(32)
  • MySQL---单表查询综合练习

    创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT \\\'员工编号\\\', ename VARCHAR(10) COMMENT \\\'员工名字\\\', job VARCHAR(10) COMMENT \\\'职位\\\', mgr INT(4) COMMENT \\\'上司\\\', hiredate DATE COMMENT \\\'入职时间\\\', sal INT(7) COMMENT \\\'基本工资\\\', comm INT(7) COMMENT \\\'补贴\\\', deptno INT(2) COMMENT \\\'所属部门编号\\\' ); emp表添加主键 mysql alte

    2024年01月21日
    浏览(30)
  • MySQL单表查询练习题

    目录 第一题  第二题  第三题   1.创建数据表pet,并对表进行插入、更新与删除操作,pet表结构如表8.3所示。 (1)首先创建数据表pet,使用不同的方法将表8.4中的记录插入到pet表中。 mysql create table pet( name varchar(20) not null, owner varchar(20), species varchar(20) not null, sex char(1) not nu

    2024年02月13日
    浏览(28)
  • mysql多表查询练习

    两个表如图所示 1、查询每个部门的所属员工 根据表中展现的情况,员工表里面是没有人事部的,如果我们使用内连接就看不出具体的情况,人事部会被直接屏蔽掉 这个时候应该使用左连接,将人事部的情况体现出来 2、查询研发部门的所属员工 3、查询研发部和销售部的所

    2024年02月13日
    浏览(36)
  • MySQL---多表查询综合练习

    CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT \\\'部门编号\\\', dname VARCHAR (15) COMMENT \\\'部门名称\\\', loc VARCHAR (20) COMMENT \\\'地理位置\\\' ); mysql alter table dept add primary key(deptno);           Query OK, 0 rows affected (0.02 sec)                       Records: 0  Duplicates: 0  Warnings: 0 INSERT INTO dept

    2024年01月21日
    浏览(32)
  • MySQL---多表等级查询综合练习

    CREATE TABLE emp( empno INT(4) NOT NULL COMMENT \\\'员工编号\\\', ename VARCHAR(10) COMMENT \\\'员工名字\\\', job VARCHAR(10) COMMENT \\\'职位\\\', mgr INT(4) COMMENT \\\'上司\\\', hiredate DATE COMMENT \\\'入职时间\\\', sal INT(7) COMMENT \\\'基本工资\\\', comm INT(7) COMMENT \\\'补贴\\\', deptno INT(2) COMMENT \\\'所属部门编号\\\' ); emp表添加主键 mysql alter table emp a

    2024年01月23日
    浏览(30)
  • MySQL---多表分组查询综合练习

    CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT \\\'部门编号\\\', dname VARCHAR (15) COMMENT \\\'部门名称\\\', loc VARCHAR (20) COMMENT \\\'地理位置\\\' ); 添加dept表主键 mysql alter table dept add primary key(deptno);           Query OK, 0 rows affected (0.02 sec)                       Records: 0  Duplicates: 0  Warnings:

    2024年01月23日
    浏览(34)
  • MySQL多表关联查询练习题

    1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下: CREATE TABLE score ( id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT , stu_id INT(10) NOT NULL , c_name VARCHAR(20) , grad

    2024年01月17日
    浏览(32)
  • 数据库系统头歌实验一 SQL的DDL语言和单表查询

    第1关:创建供应商表S(SNO,SNAME,STATUS,CITY) 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成;S表如下 第2关:将P表中的所有红色零件的重量增加6。 零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包