用SQL语言完成下面四个问题,谢谢大家了!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用SQL语言完成下面四个问题,谢谢大家了!相关的知识,希望对你有一定的参考价值。

用SQL语言完成下面四个问题。
职员(职员号 ,姓名,性别,组号,职务)
客户(客户号,客户名,地址,所在城市)
订单(订单号,客户号,职员号,签订日期,金额)
1、查询订单数在3个以上、订单的平均金额在200元以上的职员号。
2、显示没有签订任何订单的职员信息(职员号和姓名)。
3、从订单表中删除客户号为“1001”的订单记录。
4、将订单号为“0060”的订单金额改为169元。

1 select 职员号 from 订单 group by 职员号 having count(职员号)>3 and avg(金额)>200
2 select 职员号,姓名 from 职员 where 职员号 not in (select 职员号 from 订单)
3 delete from 订单 where 客户号=1001
4 update from 订单 set 金额=169 where 订单号=\'0060\'
参考技术A 你有具体的表出来才好做,

MySQL如何完成一次查询?

关注TechArt77, 了解更多知识

MySQL相信大家都不陌生,是一种关系型数据库,通过sql语言操作数据的增删改查。那么从发出一条sql指令到返回结果mysql都做了什么事情呢?

mysql完成一次查询过程是比较复杂的,在说明查询过程前先介绍一下它的基础概念和结构原理来帮助理解。下面从四个方面介绍,分别是mysql语句,mysql结构原理,mysql查询过程,最后设置几个有趣问题。


一、MySQL语句

mysql的最基础使用是通过一条sql语句查询数据,sql语句在不同场景下存在着多种说法,主要根据执行语句的第一个关键字确定概念:

  1. DDL(Data Definition Languages):数据定义语句,常用的语句关键字主要包括 create、drop、alter等操作表结构

  2. DML(Data Manipulation Language):数据操作语句,常用的语句关键字主要包括 insert、delete、udpate 和select 等操作数据

  3. DCL(Data Control Language):数据控制语句,用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等

个人做项目或者学习时这些语句都可以随意执行,因为自己是管理员拥有最高权限。但是大部分场景是在公司使用,上面的SQL语句在特殊场景下自己是没有权限执行的,甚至只能执行select查询操作。

可以通过 grant 语句赋予数据库表具有不同等级的权限,下面举例:给指定用户只分配 select 权限

-- 创建用户(指定任何IP的ttk用户登录,密码是aa123456,%代表任何IP)create user 'ttk'@'%' identified by 'aa123456';-- 查看权限(查询任何IP下ttk用户的权限)show grants for 'ttk'@'%';-- 分配权限(给ttk用户在任何IP下可以访问所有数据库的表,*.*第一个星号是匹配所有库,第二个星号是匹配所有表,select是只有select权限)grant select on *.* to 'ttk'@'%';-- 如果需要拥有update权限grant select, update on *.* to 'ttk'@'%';

通过上面语句赋予ttk用户查询权限,再次执行 update 和 insert 语句就会报权限异常错误

MySQL如何完成一次查询?

通过 revoke 语句把select权限也去掉

-- 取消权限(取消ttk用户对所有IP的所有数据库的所有权限)-- all匹配所有权限,例如update,select等-- *.*匹配所有数据库所有表-- %匹配所有IPrevoke all on *.* from 'ttk'@'%';

再次执行select语句也会报权限错误

MySQL如何完成一次查询?

二、MySQL结构原理

了解了mysql的基本语法,不同语句又可以概括为DDL、DML、DCL,本章介绍mysql的结构原理,下图是一个mysql引擎的原理图

连接者(Connectors):不同语言的代码程序和mysql的交互(SQL交互)

连接池(Connection Pool):管理、缓冲用户的连接,线程处理等需要缓存的需求

管理服务和工具组件(Enterprise Management Serivices & Utilities):系统管理和控制工具,例如备份恢复、Mysql复制、集群等

SQL接口(SQL Interface):接受用户的SQL命令,并且返回用户需要查询的结果

解析器(Parser):对SQL进行解析,判断语法是否正确

查询优化器(Optimizer):SQL语句在查询之前会使用查询优化器对查询进行优化

比如:查询一批数据,where条件中存在两个索引字段,那么索引字段能匹配的数据越少,则优先使用该索引字段

缓存(Caches & Buffers):如果查询缓存有命中的结果,就可以直接去缓存中取数据

存储引擎(Pluggable Storage Engines):操作数据的一种方式,一般常用的执行引擎有InnoDB和MyISAM

三、MySQL查询过程

下图是客户端是发起一次sql指令后mysql需要完成以下六个步骤,需要注意,这里的客户端并非我们常说的前端或H5端而是我们自己的服务端项目,执行一次sql操作,一般使用的持久化框架是mybatis或者hibernate。


第一步:mysql收到客户端的指令

第二步:mysql查看自己是否有缓存的数据,如果有数据直接返回,如果无数据执行后面操作

第三步:解析器对sql语法进行判断,sql执行不正确的错误消息都是从这里抛出的

第四步:查询优化器对sql优化,有可能会把sql语句重新编排,可以最大效率提升查询速度

第五步:调用对应的执行引擎去执行sql,一般常用的执行引擎有InnoDB和MyISAM,前者支持事务,后者不支持事务

第六步:mysql把查询的结果返回给客户端,同时也会保存到缓存一份,为了下次查询的时候能够从缓存获取


四、总结问题

1. 数据库的引擎级别是什么维度的?(欢迎大家留言,答案在留言中可以查看)
A:数据库级别
B:表级别
C:软件级别

以上是关于用SQL语言完成下面四个问题,谢谢大家了!的主要内容,如果未能解决你的问题,请参考以下文章

用SQL语言完成如下要求

SQL结构化查询语——之DDL语言

PB语言如何解析一个以TAB分割的文本文件,并把文件内容读取到SQL Server数据库中? 希望能给出代码,谢谢

易语言7z压缩解压模块使用方法! 不知道错在哪里了!求详细说明!大牛们谢谢了

y下面SQL语句如何使用CASE WHEN 将以下两句合并为一句。谢谢! 当

SQL题:请用一条SQL查询(ORACLE)语言实现行列转换