day45 数据库sql语句总结

一、加密算法

  1. md5(str) 最经典,做常用的加密方式

    1. 创建数据表usercreate table user(id int primary key auto_increment,name varchar(30),password varchar(50));
    2. 在user中插入数据insert into user values(null,'兰博文','358972');insert into user values(null,'李龙龙',md5('123456'));
  2. sha(str) 返回40位十六进制的字符串密码

    insert into user values(null,'李俊坤',sha('123456'));  
  3. sha256(str,hash_length)

    insert into user values(null,'鲍煜',sha2('123456',0));

二、系统函数信息

  1. database() 返回当前数据库名

    select database(); 
  2. version() 返回当前数据库版本

    select version();
  3. user() 返回当前登录用户名

    select user();

三、数学相关函数

  • 向下取整 floor(num)

    select floor(3.84);  3
  • 四舍五入 round(num)

    select round(23.8);  24
  • round(num,m)

    select round(23.879,2); 23.88
  • 非四舍五入

    select truncate(23.879,2); 23.87
  • 随机数 rand() 0-1

    获取3、4、5 随机数

    select floor(rand()*3)+3;

四、分组查询

  • group by 字段;

  • 将某个字段的相同值分为一组,对其它字段的数据进行聚合函数的统计,称为分组查询

    1. 查询每个部门的平均工资

      select deptno,avg(sal) from emp group by deptno;
    2. 查询每个职位的最高工资

      sel ect job,max(sal) from emp group by job;
    3. 查询每个部门的人数

      sel ect deptno,count(*) from emp group by deptno;
    4. 查询每个职位中工资大于1000的人数

      sel ect job,count(*) from emp where sal>1000 group by job;
    5. 查询每个领导的手下人数

      sel ect mgr,count(*) from emp where mgr is not null group by mgr;
  • 多字段分组查询

    select deptno,gender,max(age) from emp group by deptno,gender;
    1. 查询每个部门每个主管的手下人数

      sel ect deptno,mgr,count(*) from emp where mgr is not null group by deptno,mgr;

五、having

  • having后面可以写普通字段的条件也可以写聚合函数的条件,但是不推荐在having后面写普通字段的条件

  • where后面不能写聚合函数的条件

  • having要结合分组查询使用

    1. 查询每个部门的平均工资,要求平均工资大于2000.

      • 错误写法(where后面不能写聚合函数)

        select deptno,avg(sal) from emp where avg(sal)>2000 group by deptno;
      • 正确写法:

        select deptno,avg(sal) a from emp group by deptno having a>2000;
    2. 查询t_item表中每个分类category_id的平均单价要求平均单价低于100

      select category_id,avg(price) a 
      from t_item 
      group by category_id 
      having a<100;
    3. 查询emp表中工资在1000-3000之间的员工,每个部门的编号,工资总和,平均工资,过滤掉平均工资低于2000的部门,按照平均工资进行降序排序

      select deptno,sum(sal),avg(sal) a 
      from emp 
      where sal between 1000 and 3000 
      group by deptno 
      having a>=2000 
      order by a desc;
    4. 查询emp表中每个部门的平均工资高于2000的部门编号,部门人数,平均工资,最后根据平均工资降序排序

      select deptno,count(*),avg(sal) a 
      from emp 
      group by deptno 
      having a>2000 
      order by a desc;
    5. 查询emp表中不是以s开头,每个职位的名字,人数,工资总和,最高工资,高滤掉平均工资是3000的职位,根据人数升序排序 如果人数一致则根据工资总和降序排序

      select job,count(*) c,sum(sal) s,max(sal) 
      from emp 
      where job not like 's%' 
      group by job 
      having avg(sal)!=3000 
      order by c,s desc;
    6. 查询emp表中每年入职的人数。

      select extract(year from hiredate) year,count(*) 
      from emp group by year;
    7. 查询每个部门的最高平均工资(提高题)

      select avg(sal) a 
      from emp 
      group by deptno 
      order by a 
      desc limit 0,1;
    8. 拿最高平均工资的部门编号 (并列第一的问题无法解决)

      select deptno 
      from emp 
      group by deptno 
      order by avg(sal)
      desc limit 0,1;

六、子查询(嵌套查询)

  1. 查询emp表中工资最高的员工信息

    select max(sal) from emp;select * from emp where sal=5000;
    • 通过子查询把上面两条合并成一条

      select * from emp where sal=(select max(sal) from emp);
  2. 查询emp表中工资大于平均工资的所有员工的信息

    select avg(sal) from emp; 
    select * from emp where sal>
    (select avg(sal) from emp);
  3. 查询工资高于20号部门最高工资的所有员工信息

    select max(sal) from emp where deptno=20;select * from emp where sal>(select max(sal) from emp where deptno=20);
  4. 查询和jones相同工作的其他员工信息

    select job from emp where ename='jones';
    select * from emp where job=
    (select job from emp where ename='jones') 
    and ename!='jones';
  5. 查询工资最低的员工的同事们的信息(同事=相同job)

    • 得到最低工资

      select min(sal) from emp;
    • 得到最低工资哥们的工作

      select job from emp where sal=
      (select min(sal) from emp);
    • 通过工作找到同事们 还要排除最低工资那哥们儿

      select * from emp where job=
      (select job from emp where sal=
      (select min(sal) from emp)) and sal!=
      (select min(sal) from emp);
  6. 查询最后入职的员工信息

    select max(hiredate) from emp;
    select * from emp where hiredate=
    (select max(hiredate) from emp);
  7. 查询员工king的部门编号和部门名称(需要用到dept表)

    select deptno from emp where ename='king';
    ​
    select deptno,dname from dept where deptno=
    (select deptno from emp where ename='king');
  8. 查询有员工的部门信息

    • 查询员工表中出现的部门编号

      select distinct deptno from emp;  
      ​
      select * from dept where deptno in 
      (select distinct deptno from emp);
  9. 查找平均工资最高的部门信息 (最大难度,需要考虑并列第一问题)

    • 得到最高平均工资

      select avg(sal) from emp 
      group by deptno order by avg(sal) 
      desc limit 0,1;
    • 通过平均工资找到部门编号

      select deptno from emp 
      group by deptno having avg(sal)=
      (select avg(sal) from emp 
      group by deptno order by avg(sal) 
      desc limit 0,1); 
    • 通过部门编号查询部门信息

      select * from dept where deptno in(上面一坨);  
      ​
      select * from dept where deptno in
      (select deptno from emp group by 
      deptno having avg(sal)=
      (select avg(sal) from emp 
      group by deptno order by avg(sal) desc 
      limit 0,1));
  • 子查询总结:

    1. 嵌套在SQL语句中的查询语句称为子查询

    2. 子查询可以嵌套n层

    3. 子查询可以写在哪些位置?

      • 写在where或having后面作为查询条件的值

      • 写在from后面当成一张表使用 必须有别名

        select * from emp where deptno=20;  
        ​
        select ename from 
        (select * from emp where deptno=20) t1;
      • 写在创建表的时候

        create table newemp as 
        (select ename,sal,deptno 
        from emp where deptno=20);

七、关联查询

  • 同时查询多张表的查询方式称为关联查询

    1. 查询每一个员工姓名和其对应的部门名称

      select e.ename,d.dname 
      from emp e,dept d where e.deptno=d.deptno;
    2. 查询在new york工作的所有员工的信息

      select e.* from emp e,dept d 
      where e.deptno=d.deptno and d.loc='new york';
    3. 查询价格在50以内的商品标题和商品分类名称

      select i.title, c.name  
      from t_item i ,t_item_category c 
      where i.category_id= c.id  and i.price<50;
笛卡尔积
  • 如果关联查询不写关联关系,则得到两张表结果的乘积,这个乘积称为笛卡尔积

  • 笛卡尔积是错误的查询方式导致的结果,工作中切记不要出现

八、等值连接和内连接

  • 这两种查询方式得到的结果是一样的

    1. 等值连接:

      select * from A,B where A.x=B.x and A.age=18;
    2. 内连接:

      select * from A join B on A.x=B.x where A.age=18;
      • 查询每一个员工姓名和其对应的部门名称

        select e.ename,d.dname 
        from emp e 
        join dept d 
        on e.deptno=d.deptno;

九、外链接

查询A,B两张表的数据,如果查询两张表的交集数据使用内连接或等值连接,如果查询某一张表的全部数据另外一张表的交集数据则用外链接

  • 左外链接:

    select * from A left join B on A.x=B.x where A.age=18;
  • 右外链接:

    select * from A right join B on A.x=B.x where A.age=18;
    1. 查询所有员工和对应的部门名称

      • 插入新数据

        insert into emp (empno,ename,sal) values(10010,'Tom',500);  
        ​
        select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;
    2. 查询所有部门名称和对应的员工姓名

      select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;

十、关联查询总结:

  • 关联查询的查询方式:1. 等值连接 2.内连接 3.外链接(左外和右外)

  • 查询两张表的交集用等值或内连接,推荐使用内连接

  • 查询一张表的全部数据和另外一张表的交集数据使用外链接

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

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

相关文章

Vovsoft Text Edit Plus 专业文本编辑器工具软件:简洁高效的创作利器

作为一名专业软件评测人员&#xff0c;我有幸使用了一款备受赞誉的文本编辑器工具软件——Vovsoft Text Edit Plus。在这篇评测中&#xff0c;我将客观、细致地分析它的实用性和使用场景&#xff0c;同时揭示它的优缺点&#xff0c;帮助您更好地了解这款软件。 第一部分&#x…

Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

安装Onlyoffice 拉取onlyoffice镜像 docker pull onlyoffice/documentserver 查看镜像是否下载完成 docker images 启动onlyoffice 以下是将本机的9001端口映射到docker的80端口上&#xff0c;访问时通过服务器ip&#xff1a;9001访问&#xff0c;并且用 -v 将本机机/data/a…

【AI视野·今日Robot 机器人论文速览 第四十二期】Wed, 27 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 27 Sep 2023 Totally 48 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;***Tactile Estimation of Extrinsic Contact,基于触觉的外部接触估计与稳定放置 (from 三菱电机) &#x1f4da;充气型…

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接&#xff1a;https://pan.baidu…

照片后期处理软件DxO FilmPack 6 mac中文说明

DxO FilmPack 6 for Mac是一款照片后期处理软件。它可以模拟超过60种著名胶片品牌和类型的色彩和颗粒感&#xff0c;使照片具有复古、艺术和时尚风格。 ​DxO FilmPack 6 mac支持RAW和JPG格式的照片&#xff0c;并提供丰富的调整选项&#xff0c;如亮度、对比度、曝光、阴影和高…

macOS 下 Termius 中文显示为乱码

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

【python+appium】自动化测试

pythonappium自动化测试系列就要告一段落了&#xff0c;本篇博客咱们做个小结。 首先想要说明一下&#xff0c;APP自动化测试可能很多公司不用&#xff0c;但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的&#xff0c;所以为了更好的待遇&#xff0c;我们还…

react+IntersectionObserver实现页面丝滑帧动画

实现效果&#xff1a; 加入帧动画前&#xff1a; 普通的静态页面 加入帧动画后&#xff1a; 可以看到&#xff0c;加入帧动画后&#xff0c;页面效果还是比较丝滑的。 技术实现 加入animation动画类 先用 **scss **定义三种动画类&#xff1a; .withAnimation {.fade1 {ani…

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中&#xff0c;B树和B树是常用的数据结构&#xff0c;用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点&#xff0c;并最后…

【Java 进阶篇】MySQL约束详解

在数据库中&#xff0c;约束是一种用于定义表中数据规则和完整性的规范。它们用于确保数据的一致性和准确性。MySQL支持多种类型的约束&#xff0c;本文将详细介绍这些约束的种类和用法。 1. 什么是约束&#xff1f; 约束是一组规则&#xff0c;它们用于定义表中数据的规范&a…

搭建好自己的PyPi服务器后怎么使用

当您成功搭建好自己的 PyPI 服务器后&#xff0c;您可以使用以下步骤来发布和使用您的包&#xff1a; 打包您的代码&#xff1a; 首先&#xff0c;将您的 Python 项目打包成一个发布包。确保您已经在项目根目录下创建了 setup.py 文件&#xff0c;并按照正确的格式填写了项目信…

[2023.09.25]:Rust编写基于web_sys的编辑器:输入光标再次定位的小结

前些天&#xff0c;写了探索Rust编写基于web_sys的WebAssembly编辑器&#xff1a;挑战输入光标定位的实践&#xff0c;经过后续的开发检验&#xff0c;我发现了一个问题&#xff0c;就是光标消失了。为了继续输入&#xff0c;用户需要再次使用鼠标点击。现在我已经弄清楚了导致…

【AI视野·今日Robot 机器人论文速览 第三十七期】Wed, 20 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 20 Sep 2023 Totally 53 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Machine Learning-Driven Burrowing with a Snake-Like Robot Authors Sean Even, Holden Gordon, Hoeseok Yang, Yasemin Ozk…

Nacos 实现服务平滑上下线(Ribbon 和 LB)

前言 不知道各位在使用 SpringCloud Gateway Nacos的时候有没有遇到过服务刚上线偶尔会出现一段时间的503 Service Unavailable&#xff0c;或者服务下线后&#xff0c;下线服务仍然被调用的问题。而以上问题都是由于Ribbon或者LoadBalancer的默认处理策略有关&#xff0c;其…

虚拟机数据恢复:Stellar Data Recovery for Virtual Machine

虚拟机数据恢复-----Crack Version Stellar Data Recovery for Virtual Machine 软件可从 VMware (.vmdk)、ORACLE (.vdi) 和 Microsoft (.vhd) 虚拟映像文件中恢复丢失和删除的数据。 从 VMDK、VDI 和 VHD 虚拟映像文件中恢复数据提供原始恢复选项来恢复数据从已删除或无法识…

原型模式 创建型模式之二

一、原型&#xff08;Prototype&#xff09;模式概述 DP书上的定义为&#xff1a;用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。其中有一个词很重要&#xff0c;那就是拷贝(既clone)。可以说&#xff0c;拷贝(clone)是原型模式的精髓所在。其中…

ACM MM 2023 | 基于去中心化表征的人体姿态估计方法

01. 前言 北京邮电大学与EVOL创新团队共同提出人体姿态估计方法DecenterNet&#xff0c;用于在提高在拥挤场景下人体姿态估计的准确度。该方法引入了一种去中心化的姿势表征方法&#xff0c;使得网络在纠缠区域/拥挤区域中将更加稳健地表达人体姿态。该方法还提出了一个解耦的…

2023-9-28 JZ7 重建二叉树

题目链接&#xff1a;重建二叉树 import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数…

使用ElementUI完成登入注册的跨域请求提高开发效率

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》​​​​​​​ ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 ​编辑 1、前言 1.1.什么是ELementUI 2、完成登陆注册前端页面 2.1环境搭建 运行…

Java高级特性-泛型继承与子类型

Java高级特性-泛型的继承与子类型 在Java中,泛型继承关系是通过使用类型参数来实现的。 类型参数是一种在编译时指定类型的机制,它使得我们可以在编写代码时使用一般化的类型,而不必关注具体的类型。泛型继承关系的基本语法为: public class MyClass<T> extends M…