Mysql知识复习二

这篇具有很好参考价值的文章主要介绍了Mysql知识复习二。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多行函数

  1. 不管函数处理多少条,只返回一条记录

  2. 如果你的数据可以分为多个组,那么返回的数据条数和组数相同

    • 每个部门的平均薪资
    • 10 20 30 --》3
  3. 常用的多行函数有5个

    • max最大值

      如果处理的值是字符串,将会把值按照字典序升序

    • min最小值

      如果处理的值是字符串,将会把值按照字典序排序

    • avg平均值‘

      只能用于数值型数据,求平均值

    • sum求和

      如果求和的过程中有null,那么不会计算在内

    • count求总数

      如果统计的数据中有null,不会吧null统计在内

  4. 经典的错误

    • --查询公司最低薪资的员工是谁?

    • select min(sal) , ename from emp;

      MySQL语法不可行

      Oracle语法不可行

    • 将来工作的时候不能把普通列和组函数写在一起

      虽然MySQL语法不会报错,但是给的结果是错误的

数据分组

  1. 按照某一个条件进行分组,每一组返回对应的结果
  2. group by 可以对指定的类进行分组,列尽量有相同的
  3. having 可以对分组之后的数据进行过滤,所以能出现在having中的比较项一定是被分组的列或者是组函数
  4. 底层
    • where称之为行级过滤,处理的是表中每一行数据的过滤
    • having称之为组级过滤,处理的是分组之后的每一组数据
    • 能使用where的,尽量不要使用having
-- 查询每种工作的平均薪资
select job,avg(sal) from emp group by job;
-- 查询每个部门的最高薪资和最低薪资
select max(sal),min(sal) from emp;
select deptno,max(sal),min(sal) from emp group by deptno;
-- 查询每个部门的人数和每月工资总数
select deptno,count(empno),sum(sal) from emp group by deptno;

-- 查询每个部门,每种工作的平均薪资
select deptno,job , avg(sal) from emp group by depyno,job;
select deptno,job , avg(sal) from emp group by deptno,job order by dedptno,job;

-- 查询个人姓名的平均薪资(尽量对多数据进行分组)
select ename,max(sal),min(sal) from emp group by ename;
-- 查询10,20部门中,并且在二月份入职员工中,每个部门中平均薪资高于1500的工作是什么,并按照部门,工作平均薪资进行排序
select * from emp where deptno in (10,20);
select deptno,job,avg(sal) from emp where deptno in (10,20) group by deptno,job having avg(sal)>1500;
select deptno,job,avg(sal) from emp where deptno in (10,20) group by deptno,job having avg(sal)>1500 order by deptno,avg(sal);
-- 美观写法
SELECT
	deptno,
	job,
	avg(sal) '平均薪资'
FROM
	emp
WHERE
	deptno IN ( 10, 20 )
GROUP BY
	deptno,
	job
HAVING
	avg(sal) > 1500
ORDER BY
	deptno,
	avg(sal);

DQL单表关键字执行顺序

  • select

    我们要显示哪些列的数据

  • from

    从哪张表中获取数据

  • where

    从表中获取数据的时候进行行级的数据过滤

  • group by

    对数据进行分组处理,一组获取对应的结果

  • having

    组级过滤,组级过滤的数据必须是分组条件或者是组函数

  • order by

    排序

    asc desc

  • 执行的顺序

    from —>where —>group by—>having—>select—>order by

多表查询

  1. 查询的两张表如果出现同名的列,我们需要将表名标注到列明前面

  2. 如果是非同名的列,表名可加可不加,推荐加上

    • 为了书写方便,可以给表添加别名
    • 一般情况下取首字母,特殊情况下取它所代表的含义
    • 表的别名旨在本次查询中生效
  3. 表与表进行关联查询的时候,如果不添加关联条件,查询的总记录数就是a * b = 笛卡尔积

    a 15 b 10 c 10 —> 1500条

  4. 多表查询的时候必须要加条件

    • 等值
    • 非等值
-- 查询每个员工所在的部门的名称
select ename,deptno from emp;
select deptno,dname from dept;
select emp.ename,emp.deptno,dept.deptno,dept.dname from emp,dept;
-- 等值关联查询
select emp.eanme,emp.deptno,dept.deptno,depy.dname from emp,dept where emp.deptno = dept.deptno;
selept emp.ename,dept.dname from emp,dept where emp.deptno = dept.deptno;
-- 添加别名
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;

表与表关联的方式

  1. 因为表的关联条件和业务查询条件放在了一起,为了防止混淆于是提供了下面三种方式

  • 自然连接

    会自动选择列名相同并且类型相同的列

-- 查询薪资大于2000的员工姓名和部门名称
select e.enamem,d.dname from emp e,dept d where e.deptno = d.deptno and e.sal>2000;
-- 自然连接
select e.ename,d.dname from emp e natural join dept d;
select e.ename,d.dname from emp e natural join dept d where e.sal > 2000;
  • using

不需要MySQL帮我们选择等值连接的列,现在我们指定等值连接的列

-- 查询薪资大于2000的员工姓名和部门名称 using
select e.ename,d.dname from emp e join dept d using(deptno);
select e.ename,d.dname from emp e join dept d using(deptno) where e.sal > 2000;
  • on

我们可以指定两张表关联的条件,可以非等值的操作

-- 查询薪资大于2000的员工姓名和部门名称 using
select e.ename,d.dname from emp e join dept d on(e.deptno = d.deptno)
select e.ename,d.dname from emo e join depy d on(e.deptno = d.deptno) where e.sal>2000;
-- 查询每个员工所对应的薪资等级
select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;
select e.ename,s.grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);
  • 查询名字中带有A字母的员工姓名,部门名称和薪资等级
SELECT
	e.ename,
	d.dname,
	s.grade
FROM
	emp e,
	depy d,
	salgrade s
WHERE
	e.deptno = d.deptno
	AND e.sal BETWEEN s.losal AND s.hisal
	AND e.ename LIKE '%A%';
 ------------------------------------------------------------------------------------ 
SELECT
	e.ename,
	d.dname,
	s.grade
FROM
	emp e
	JOIN dept d USING ( deptno )
	JOIN salgrade s ON (e.sal BETWEEN s.losal AND s.hisal)
WHERE
	e.ename LIKE '%A%';

表与表的外连接

  1. 当我们对两张表进行关联查询的时候,基于数据的基因导致其中一张表中的数据没办法被完全查询出来

  2. 外连接可以让没查询出来的数据也被显示出来

  3. 因为我们写SQL的时候表总有左右之分,外连接也分

    左外连接:显示左面表所有的数据

    右外连接:显示右面表所有的数据

    -- 查询每个部门的人数
    select deptno,count(empno) from emp group by deptno;
    select * from emp e join dept d using(deptno);
    select * from emp e left join dept d using(deptno);
    select * from emo e right join deot d using(deptno);
    
    
    
    select deptno,count(e.empno) from emp e right join dept d using(deptno) group by deptno;
    
    ----------------------全外连接
    SELECT
    	deptno,
    	e.ename,
    	d.dname
    FROM
    	emp e LEFT JOIN dept d USINg( deptno );
    	
    ---------------------Oracle的全外连接使用Full Join
    

    表与表的自连接

  • 我们要查询的两个字段同时处于一张表上,我们只能将一张表当作含有不同意义的两张表去处理

  • 给相同的表取不同的简称(按照所代表的含义去取)

-- 查询每个员工与其直属领导的名字
select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;
select e.ename,m.ename from emp e join emp m on(e.mgr = m.ename);

表与表的子连接

  • 把一个SQL语句的查询结果当成另外一个SQL语句的查询结果

-- 查询公司中薪资最低的员工姓名
select ename,sal from emp where sal = (select min(sal) from emp);
-- 查询公司中谁的薪资高于平均薪资
select ename,sal from emp where sal > (select avg(sal) from emp);

-- 谁的薪资高于20部门员工的薪资
select ename,sal from emp where sal > all(select sal from emp where deptno = 20);
select ename,sal from emp where sal > some(select sal from emp where deptno = 20);
select ename,sal from emp where sal > some(select sal from emp where deptno = 20);

表与表的伪表查询

  • 如果我们所需要的查询条件需要别的SQL语句来提供

  • 如果只需要一个条件那么可以使用子查询来完成

  • 如果需要多个查询条件,这时就要将所有的查询结果当做伪表进行管理

  • 我们需要把一些含有特殊符号的列名设置别名,然后给伪表设置一个别名(见名知意)文章来源地址https://www.toymoban.com/news/detail-728781.html

-- 查询高于自己部门平均薪资的员工信息
select deptno,avg(sal) avgsal from emp group by deptno;

SELECT
	e.ename,
	e.sal,
	e.deptno
FROM
	emp e,
	( SELECT deptno, avg(sal) avgsal FROM emp GROUP BY deptno ) d
SELECT
	e.deptno = d.deptno
	AND e.sal > d.avgsal;

到了这里,关于Mysql知识复习二的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【MySQL】数据库MySQL基础知识与操作

    作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《MySQL》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将MySQL基础知识一网打尽,希望可以帮到读者们哦。 其他专栏:《算法详解

    2024年02月05日
    浏览(45)
  • Mysql数据库技术知识整理

    Mysql的知识点目录 重点:架构,引擎,索引,锁机制,事务机制,日志机制,集群,调优 3、Mysql索引 索引概念 覆盖索引: 条件列和结果列都在索引中 索引下推: 查询会先过滤条件列,然后回表查数据 最左前缀匹配: 查询条件会从最左开始匹配索引列 回表:经过索引查询后,不

    2024年02月11日
    浏览(34)
  • 【MySQL】数据库基本知识小结

    哈喽大家好,我是阿Q,今天我们来总结一下【MySQL】 入门的必备知识点吧~ 数据库 :DataBase 简称 DB,就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。 数据库管理系统 :DataBase Management System 简称 DBMS,是一种操纵和管理数据库的大型软件,通常用于建立

    2024年02月09日
    浏览(51)
  • MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.客户端连接MySQL 二. 数据模型 1.关系型数据库(RDBMS) 2.数据模型 三.SQL 1.SQL通用语法 2.SQL分类 3.数据库操作 1). 查

    2024年02月06日
    浏览(77)
  • 【数据库】MySQL基础知识全解

    系列综述: 💞目的:本系列是个人整理为了 秋招面试 的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于拓跋阿秀、小林coding等大佬博客进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。

    2024年02月09日
    浏览(60)
  • 【MySQL数据库重点】第二节:MySQL基础知识(基本操作)

    目录 一:数据库的操作 1.显示数据库 2.创建数据库 3.使用数据库 4.删除数据库 二:常用数据类型 1.数值类型:整型和浮点型 2.字符串类型 3.日期类型 三:表的操作 1.查看表结构 2.创建表 3.删除表 1.显示数据库 语法: show databases;  2.创建数据库 (1)简化语法 create database 数

    2024年02月08日
    浏览(56)
  • 【一文详解】知识分享:(MySQL关系型数据库知识进阶)

    Mysql体系结构: 连接层 位于最上层,是一些客户端和连接服务,主要完成一些类似于连接处理,授权认证及相关的安全方案。 服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层,主要完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优

    2024年02月02日
    浏览(77)
  • MySQL数据库基础初学者必备知识

    目录 1.数据库的基本操作 1.1显示所有数据库 1.2创建数据库 1.3删除数据库 2.数据库的类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的简单操作 3.1创建一个表 3.2显示表的结构 3.3显示数据库中的所有表 3.4删除指定表 4.实战练习 数据库的基本操作为:显示数据库,创建数据库

    2023年04月11日
    浏览(71)
  • MySQL数据库基础知识,基础操作详细整理

    引入: 淘宝网,京东、微信,抖音等都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什么信息还存在? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数

    2024年04月17日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包