做网站 上海/整合营销传播的概念

做网站 上海,整合营销传播的概念,开发公司以现金方式补贴给客户,线上推广计划SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫结构化查询语言。 SQL92和SQL99有什么区别呢? SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用(&#xff…

SQL复习

MySQL

SQL介绍

SQL

SQL的全拼是什么?

SQL全拼:Structured Query Language,也叫结构化查询语言。

SQL92和SQL99有什么区别呢?

SQL92和SQL99分别代表了92年和99年颁布的SQL标准。

在 SQL92 中采用(+)代表从表所在的位置,而且在SQL92 中,只有左外连接和右外连接,没有全外连接。

LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中,在 SQL92 中不存在,只能用(+)表示。

SQL99 的外连接有哪些形式?

SQL99 的外连接包括了三种形式:

  1. 左外连接:LEFT JOIN 或 LEFT OUTER JOIN
  2. 右外连接:RIGHT JOIN 或 RIGHT OUTER JOIN
  3. 全外连接:FULL JOIN 或 FULL OUTER JOIN

SQL语言按照功能划分为哪四部分?它们分别是什么作用?

SQL语言按照功能划分为DDL、DML、DCL、DQL四部分。

DDL:Data Definition Language,数据定义语言。用于定义数据库对象,包括数据库、数据表和列。

DML:Data Manipulation Language,数据操作语言。用于增加、删除、修改数据表中的记录。

DCL:Data Control Language,数据控制语言。用于定义访问权限和安全级别。

DQL:Data Query Language,数据查询语言。用于查询想要的记录。

什么是ER图?

ER图即Entity Relationship Diagram,也叫实体-关系图。是用于描述现实世界的概念模型,主要包含三个要素:实体、属性、关系。

实体:我们要管理的对象;

属性:每个实体的属性;

关系:对象之间的关系。

SQL的单行注释怎么写?多行注释怎么写?

-- 单行注释
#单行注释
/* 
多行注释	
*/

SELECT、FROM、WHERE、HAVING、ORDER BY、LIMIT、GROUP BY七个关键字之间的执行顺序是什么?

执行顺序是:FROM→ WHERE →GROUP BY → HAVING→SELECT→ORDER BY→LIMIT。

为表添加了别名之后,还能使用原来的表名吗?

一旦设置别名,就不能再直接使用表名了。

int(11)中的11是什么意义?

int代表整数类型,11代表显示长度为11位,即最大有效显示长度,与类型包含的数值范围大小无关。

varchar(255)中的255是什么含义?

255表示可变字符串类型的最大长度为255。

DCL

DCL是?作用是什么?主要关键字有哪些?

DCL(Data Control Language),是数据库控制语言。

主要用于管理数据库用户、控制用户数据库访问权限。

主要关键字包括:GRANT、REVOKE等。

如何查询MySQL中的所有用户?重点

SELECT * FROM mysql.user;

如何创建用户?重点

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

如何修改用户密码?重点

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;

如何删除用户?重点

DROP USER '用户名'@'主机名' ;

如何查询用户的权限?重点

SHOW GRANTS FOR '用户名'@'主机名' ;

如何授予用户权限?重点

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

如何撤销用户权限?重点

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
CREATE USER 'itsy'@'localhost' IDENTIFIED BY '123456';
#以上语句的作用是什么?

创建用户itsy, 只能够在当前主机localhost访问, 密码123456。

CREATE USER 'sycoder'@'%' IDENTIFIED BY '123456';
#以上语句的作用是什么?

创建用户sycoder, 可以在任意主机访问该数据库, 密码123456。

ALTER USER 'sycoder'@'%' IDENTIFIED  WITH mysql_native_password BY '111111' ;
#以上语句的作用是什么?

修改用户sycoder的访问密码为111111。

DROP USER 'itsy'@'localhost';
#以上语句的作用是什么?

删除 itsy@localhost 用户。

DDL

什么是DDL?DDL的作用是什么?主要关键字包括哪些?

DDL全拼为Data Definition Language,也就是数据定义语言。

用于定义数据库对象,包括数据库、数据表和列。

主要关键字包括:CREATE、DROP、USE、SHOW、ALTER、TRUNCATE等。

如何查看当前有哪些数据库?

SHOW databases;#查看哪些数据库

如何查询当前数据库?

SELECT database();

如何创建数据库?

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;

如果创建的数据库已经存在,如何避免出现报错ERROR 1007

加上可选参数if not exists,可以解决这个问题

如何删除数据库?

drop database [ if exists ] 数据库名; 

如果删除的数据库本身就不存在,如何避免报错?

加上参数IF EXISTS

DROP DATABASE IF EXISTS itsy; 

如何切换数据库?

use 数据库名;

如何查看当前数据库中的所有表?

show tables;

如何查看指定表的结构?

desc 表名;

如何查询指定表的建表语句?

show create table 表名;

如何创建表?

CREATE TABLE 表名( 字段1 字段1类型 	[COMMENT 字段1注释 ],字段2 字段2类型 	[COMMENT 字段2注释 ], 字段3 字段3类型 	[COMMENT 字段3注释 ], ...... 字段n 字段n类型 	[COMMENT 字段n注释 ] ) 
[ COMMENT 表注释 ];

如何向表中添加字段?

ALTER TABLE 表名 ADD 字段名 类型 (长度)[ COMMENT 注释 ] [ 约束 ]; 

如何修改字段的数据类型?

ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);

如何修改字段名和字段类型?

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

如何删除字段?

ALTER TABLE 表名 DROP 字段名;

如何修改表名?

ALTER TABLE 表名 RENAME TO 新表名;

如何删除表?

DROP TABLE [ IF EXISTS ] 表名;

如何删除指定表,并创建新表?

TRUNCATE TABLE 表名;

DML

什么是DML?DML的作用是什么?主要关键字是哪些?

DML是Data Manipulatioin Language,也叫数据操作语言。

主要用于对数据的增加、删除和修改。

主要关键字包括:INSERT、UPDATE、DELETE。

如何向指定的表中添加数据?

向指定的表中添加数据时,分为两种情况:

第一种:只给指定的字段添加数据(其它字段采用默认值)。

第二种:给全部字段添加数据。

当我们为全部字段赋值时,可以省去字段名的内容。

#给指定的字段添加数据:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1,2, ...);
#给全部字段添加数据:
INSERT INTO 表名 VALUES (1,2, ...);

如何修改指定数据的字段内容?

UPDATE 表名 SET 字段名1 =1 , 字段名2 =2 , .... [ WHERE 条件 ] ;

如何删除指定表中的指定数据?如果删除表中的数据时,没有添加WHERE关键字,会有什么后果?

如果米有WHERE关键字,会将表中的数据全部删除。

DELETE FROM 表名 [ WHERE 条件 ] 

DQL

什么是DQL?DQL有什么作用?DQL的关键字有哪些?

DQL(Data Query Language),即数据库查询语言。

DQL主要用于数据的查询。

DQL的关键字包括:SELECT、WHERE、GROUP、ORDER BY、FROM、DISTINCT、HAVING、LIMIT。

为列添加别名使用什么关键字?

为列添加别名需要使用AS关键字,但其实AS关键字可以省略。

WHERE和HAVING的区别是什么?重点

两者的区别主要体现在两个方面:

  1. 两者执行时间不同:WHER在分组之前执行,不参与分组;HAVING在分组之后执行。
  2. 判断条件不同:WHERE不能对聚合函数进行判断,但是HAVING可以。

使用ORDER BY对查询结果进行排序时,如果不指定排序方式,则默认排序方式是什么?

ORDER BY的排序方式有两种,DESC和ASC。

默认的排序方式是ASC,也就是升序排序。

LIMIT的作用是什么?起始索引是从几开始的?

LIMIT用于分页查询。起始索引是从0开始的。

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

LIMIT的起始索引什么情况下可以省略?

如果只查询第一页的数据,可以省略LIMIT的起始索引。

SELECT查询

在SELECT查询中,关键字的顺序是什么?

关键字的顺序是绝对不能颠倒的:

SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...

查询常数

为什么要对常数进行查询呢?

常数查询用于整合不同的数据源时,作为标记数据源来源的标记。如:

SELECT '王者荣耀' as platform,name FROM heros;

在这段SQL语句中,我们虚构了一个platform字段,并将其设置为固定值“王者荣耀”。

所以查询结果中,将会增加一个字段platform,其内容均为“王者荣耀”。

使用常数查询时,有哪些需要注意的地方?

需要注意,如果常数是一个字符串,则必须使用单引号‘’,没有单引号的常数,会被SQL当作列名进行检查,从而造成“找不到列”的错误。

但如果常数是一个数字,则可以直接写数字,不会造成报错。


去除重复行

去除重复行使用的关键字是什么?

去除重复行需要使用DISTINCT关键字。

DISTINCT关键字的作用是什么?如何使用?

DISTINCT用于去除查询结果中的重复数据,其去重的对象是所有的列。

在SELECT关键字后,所有列名前使用。如:

SQLSELECT DISTINCT attack_range FROM heros

如果DISTINCT的位置错误,则会造成报错。

排序

对查询结果进行排序时需要使用的关键字是什么?

使用ORDER BY对查询的结果进行排序。

ORDER BY语句有什么地方需要掌握?

ORDER BY有以下几处需要掌握:

  1. ORDER BY后可以有一个或多个列名。对多个列的排序会按照先后顺序进行。
  2. OREDR BY可以设置排序规则,ASC表示递增,DESC表示递减。默认按照ASC进行排序。
  3. ORDER BY可以对非选择列进行排序,即:即使SELECT后没有此列,也可以放在ORDER BY后参与排序。
  4. ORDER BY语句通常位于SELECT语句的最后一条子句,否则会报错。

如果我们需要对不同的列采用不同的排序规则(A列升序,B列降序),应该怎么写?

对不同的列进行排序时,可以直接在ORDER BY语句后的列名后增加排序规则。

如:

SQLSELECT name, hp_max FROM heros ORDER BY mp_max, hp_max DESC  

此时,查询结果将会按照mp_max升序,hp_max降序的方式排序。


约束返回结果数

如何约束返回结果的数量?

在MySQL中,使用LIMIT关键字来约束返回结果的数量。

注意,在不同的DBMS中,使用的关键字是不同的。

约束返回结果有什么好处?

约束返回结果可以减少数据表的网络传输量,提升查询效率。避免全表扫描。


执行顺序

SQL中,SELECT语句的执行顺序是什么样的?重点

注意,在MySQL和Oracle中,SELECT的执行顺序基本相同。

FROMWHEREGROUP BYHAVINGSELECT的字段 → DISTINCTORDER BYLIMIT

具体如下:

SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7

完整的 SELECT 语句内部的执行顺序是什么样的?重点

一条完整的 SELECT 语句内部的执行顺序是这样的:

  1. FROM 子句组装数据(包括通过 ON 进行连接);
  2. WHERE 子句进行条件筛选;
  3. GROUP BY 分组 ;
  4. 使用聚集函数进行计算;
  5. HAVING 筛选分组;
  6. 计算所有的表达式;
  7. SELECT 的字段;
  8. ORDER BY 排序;
  9. LIMIT 筛选。

SELECT *

SELECT *有什么缺点?

使用SELECT * 会增加数据库负担。在实际工作中,应尽量写出所需要的列名,生产环境下,尽量不要使用SELECT *进行查询。

通配符

如何查询英雄中,包含“太”字的英雄都有哪些?

使用通配符查询。

SQLSELECT name FROM heros WHERE name LIKE '%太%'

为什么要尽量少的使用通配符进行查询?

  1. 通配符需要消耗较长的时间来进行匹配。
  2. 如果LIKE检索的字段有索引,那么模糊查询时,索引可能失效。

太%%太有什么区别?

  1. 首先两者最大的区别在于查询的对象不同,前者指以“太”开头的元素,后者指以“太”结尾的元素。
  2. 其次,当对应字段存在索引时,前者不会进行全表扫描,后者会进行全表扫描。

比较运算符

SQL中的比较运算符有哪些?

SQL中的运算符有10种:

>>=<<==<>或!=BETWEEN ANDIN()LIKE 占位符IS NULLIS NOT NULL

BETWEEN AND包含最大值和最小值吗?

BETWEEN AND包含最大值和最小值。

逻辑运算符

SQL中的逻辑运算符有哪些?

SQL中的逻辑运算符有四种:IN、AND或&&、OR或||、NOT或!

当 WHERE 子句中同时存在 OR 和 AND 的时候,哪个优先级会更高?

当 WHERE 子句中同时存在 OR 和 AND 的时候,AND 执行的优先级会更高,即: SQL 会优先处理 AND 操作符,然后再处理 OR 操作符。

所以当WHERE子句中同时出现AND和OR的时候,一定要注意执行的先后顺序。

分组

GROUP BY是什么?有什么地方需要注意?

GROUP BY用于对查询到的数据进行分组。使用GROUP BY进行分组时,字段的值为NULL的数据也会被分为一组。

WHERE和HAVING的区别是什么?

  1. WHERE 是用于过滤数据行,而 HAVING 则用于分组。
  2. HAVING一般和GROUP BY组合使用。

DBMS

DBMS

常见的DBMS有哪些?哪些是关系型数据库?哪些是非关系型数据库?重点

常见的DBMS有MySQL、SQL Server、Redis、Elasticsearch、DB2和MongoDB。

关系型数据库:Oracle、MySQL、SQL Server、DB2。

非关系型数据库:MongoDB、Redis、Elasticsearch。

其中,MongoDB是文档型数据库,Redis是键值型数据库,Elasticsearch是搜索引擎。

DBMS是什么?

DBMS即DataBase Management System,也叫数据库管理系统。

DBS和DBMS哪一个概念更大?重点

DBS即DataBase System,也叫数据库系统,包括了数据库、数据库管理系统以及数据库管理人员DBA。

所以DBS是比DBMS更大的概念。

NoSQL数据库有哪些类型?重点

NoSQL类型众多,包括:键值型数据库、搜索引擎、文档型数据库、列存储和图型数据库等。

键值型数据库的优缺点是什么?重点

键值型数据库常用于内容缓存。

优点:查询速度快。

缺点:无法自由使用条件过滤。

如果不知道数据的键,就需要遍历所有的键来查询。

Redis是最流行的键值型数据库。

什么是文档型数据库?

文档型数据库将文档作为处理信息的基本单位,一个文档就相当于一条记录。MongoDB是最流行的文档型数据库。

什么是搜索引擎?

搜索引擎的优势在于采用了全文搜索的技术,相对关系型数据库,有更高的全文检索效率。

什么是列存储?

“列式存储”式相对于“行式存储”而言的,常见的Oracle、MySQL、SQL Server等都是“行式存储数据库”,而列式存储强调“将数据按照列存储到数据库中”。

列存储的优势在于大大降低系统的I/O,适用于分布式文件系统。

为什么列存储能降低系统的I/O?

因为采用列存储时,相邻数据的数据类型是相同的,这就为压缩提供了方便。压缩之后,自然也就可以降低系统的I/O。

什么是图型数据库?

利用图的数据结构实现了实体之间的关系,数据模型主要以节点和边(也叫关系)来实现,优势在于能高效地解决复杂的关系问题。

Oracle

Oracle


Oracle通过什么来判断是否存在缓存和执行计划,从而决定使用硬解析还是软解析的?

Oracle通过共享池来判断。

Oracle中的SQL是如何执行的?

Oracle中的SQL的执行分为六个步骤:

语法检查→语义检查→权限检查→共享池检查→优化器→执行器

什么是语法检查?什么是语义检查?

语法检查指:检查SQL的拼写是否正确,当SQL的拼写有问题时,Oracle会报语法错误。

语义检查指:检查SQL中的访问对象是否存在。

语法检查和语义检查共同保证SQL语句没有错误。

什么是权限检查?

权限检查指:检查用户是否具备访问该数据的权限。

什么是共享池检查?

共享池(Shared Pool)是一块内存池,主要用于缓存SQL语句和该SQL语句的执行计划。

Oracle通过检查共享池中是否存在SQL语句的执行计划,来判断进行软解析还是硬解析。

具体的流程是:Oracle首先对SQL语句进行Hash运算,根据得出的Hash值在库缓存(Library Cache)中查找,如果存在该SQL语句的执行计划,就按既有的执行计划执行,跳过优化器环节,直接进入执行器环节,这就是软解析;如果不存在该SQL语句的执行计划,就进入优化器环节,创建该SQL语句的解析树,生成执行计划。

什么是优化器?什么是执行器?

优化器:会进行硬解析,创建解析树,生成执行计划。

执行器:SQL语句的具体执行位置。

什么是硬解析?什么是软解析?

硬解析和软解析离不开共享池。

对于一个SQL语句,Oracle会先计算该SQL语句的Hash值,根据此Hash值,判断共享池中是否有对应的执行计划。如果有,就会执行软解析;相反,如果没有,就会进行硬解析。

软解析即利用共享池中的现有的执行计划执行SQL语句;

硬解析指共享池的缓存中,没有SQL语句的执行计划,需要利用优化器创建解析树对SQL语句进行解析,然后生成执行计划。

库缓存区的作用是什么?

库缓存区主要用于缓存SQL语句和执行计划。

数据字典缓冲区的作用是什么?

数据字典缓冲区用于Oracle中的对象定义,如:表、视图、索引等对象。

对SQL语句进行解析时,需要从数据字典缓冲区中获取。

绑定变量


Oracle中的绑定变量有什么作用?有什么弊端?

绑定变量可以让我们减少硬解析,减少优化器的解析工作量。

但绑定变量本质是动态SQL的方式,参数的变化会对SQL执行的效率造成影响,同时,绑定变量也会对SQL优化造成一定的影响。

MySQL

MySQL

MySQL有什么特点?

MySQL 不支持全外连接。

SQL和MySQL有什么区别?

SQL是结构化查询语言,Structured Query Language。

MySQL是数据库管理系统DBMS。

如何检查你本机有没有安装MySQL?

待定

my.ini文件有什么作用?

my.ini文件用于对MySQL进行配置,如:修改默认存储引擎、修改默认事务隔离级别等。

MySQL中的SQL是如何执行的?SQL语句在MySQL中的执行流程是什么?

在MySQL中,SQL语句是在mysqld中的SQL层执行的,具体流程为:

SQL语句→查询缓存→解析器→优化器→执行器。

MySQL的体系架构是什么?

MySQL采用的是C/S架构,即:Client/Server。

服务器端使用的是mysqld。

MySQL的体系结构整体分为四层:

  1. 连接层
  2. 服务层
  3. 引擎层
  4. 存储层

连接层的作用是什么?

服务层的作用是什么?

SQL的分析和优化。

引擎层的作用是什么?

数据的存储和读取。

存储层的作用是什么?

MySQL和Oracle的区别是什么?

MySQL中的存储引擎采用了插件的形式,每种存储引擎都对应一种数据库应用环境。且允许开发人员设置自己的存储引擎。

MySQL中,常用的存储引擎有哪些?默认的存储引擎是哪一个?为什么?

MySQL中常用的存储引擎有:InnoDB、MyISAM、Memory、NDB、Archive等。

MySQL默认的存储引擎是InnoDB。

因为相比于MyISAM,InnoDB有三个优点:

  1. 支持行级锁,因此并发性能更高
  2. 支持事务。
  3. 支持外键约束,更能保证数据的完整性和正确性。

数据类型

MySQL中的数据类型分为哪些?

MySQL中的数据类型主要分为三大类:数值类型、字符串类型、日期时间类型。

其中,

数值类型又分为七种:TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL。

字符串类型分为五种:CHAR、VARCHAR、BLOB、TEXT、LONGTEXT。

日期时间类型分为五种:DATE、TIME、YEAR、DATETIME、TIMESTAMP。

数值类型中,TINYINT的大小是多少?SMALLINT的大小是多少?INT/INTEGER的大小是多少?BIGINT的大小是多少?

在MySQL的数值类型中,TINYINT、SMALLINT、INT、BIGINT四者之间的大小排序是:TINYINT<SMALLINT<INT<BIGINT。

且按照2的整数幂递增,分别对应1bytes、2bytes、4bytes、8bytes。

数值类型大小
TINYINT1bytes
SMALLINT2bytes
INT/INTEGER4bytes
BIGINT/Long8bytes

数值类型中,FLOAT、DOUBLE的大小分别是多少?

两者都是浮点数值,前者是单精度浮点数,后者是双精度浮点数。

数值类型大小
FLOAT4bytes
DOUBLE8bytes

字符串类型都有哪些?

字符串类型包括:CHAR、VARCHAR、BLOB、TEXT、LONGTEXT。

CHAR和VARCHAR有什么区别?CHAR的大小是多少?VARCHAR的大小是多少?

CHAR是定长字符串,VARCHAR是变长字符串。

但两者在使用时都需要指定长度。

字符串类型大小
CHAR0-255bytes
VARCHAR0-65535bytes

BLOB常用于什么场景?什么情况下会使用BLOB?

BLOB是二进制形式的长文本数据,所以经常用于图片数据等需要用二进制保存的数据。

日期时间类型分为哪几种?

日期时间类型分为:DATE、TIME、YEAR、DATETIME、TIMESTAMP。

DATE类型、TIME类型、DATETIME类型、TIMESTAMP类型的数据分别是什么格式?

日期时间类型格式
DATEYYYY-MM-DD
DATETIMEYYYY-MM-DD HH:MM:SS
TIMEHH:MM:SS
TIMESTAMPYYYY-MM-DD

mysqld

mysqld的结构是什么样的?

mysqld分为三层结构:连接层、SQL层、存储引擎层。

连接层的作用是什么?

连接层负责建立客户端和服务器端的连接。

连接建立后,客户端会发送SQL到服务器端。

SQL层的作用是什么?

SQL层负责对SQL语句进行查询处理。

存储引擎层的作用是什么?

存储引擎层负责与数据库打交道,负责数据的存储和读取。

SQL层的结构是什么样的?

SQL层分为四部分:查询缓存、解析器、优化器、执行器。

为什么MySQL8.0之后,抛弃了查询缓存的功能?

抛弃的原因主要在于查询缓存的效率不高。

查询缓存的作用是什么?

查询缓存会保存已经之前查询过的SQL语句,当这条SQL语句再次出现时,服务器端就会直接将结果返回给客户端;如果查询缓存中没有这条SQL语句,就会进入解析器阶段。

文件结构

MySQL文件夹下的tableName.ibd文件有什么作用?

MySQL5.5之后的默认是InnoDB,而InnoDB引擎会为每张表都生成一个对应的表空间文件。

tableName.ibd中,文件名为表名,后缀即为InnoDB为每个表创建的表空间文件的文件类型。

IBD文件会保存每张表的结构、数据、索引等相关信息。

ibd文件有什么特点?

ibd文件是二进制文件,直接打开将会显示乱码,所以不能直接打开。

需要通过idb2sdi tableName.ibd命令查看ibd文件。

存储结构

MySQL中的数据存储结构是什么样的?

MySQL中,数据分为五部分:

表空间、段、区、页、行。

  1. 表空间:tablespace,ibd文件就是表空间文件,表空间文件中包含多个段(Segment)。
  2. 段:Segment,包含数据段、索引段、回滚段等,一个段中包含多个区。
  3. 区:Extent,表空间的单元结构,大小默认是1M,一个区中包含64页数据。
  4. 页:Page,InnoDB磁盘管理的最小单元,大小默认是16K。
  5. 行:Row,每行即为一条数据。

Navicat

SQL函数

SQL函数

为什么不建议使用SQL函数?

因为不同的DBMS之间的差异很大,大部分DBMS都会有属于自己的SQL函数,这导致采用SQL函数的代码的可移植性很差。

聚合函数

什么是聚合函数?常用的聚合函数有哪些?

聚合函数也叫聚集函数,指用于对一组数据进行汇总的函数。参数为一组数据的集合,返回值为单个值。

常用的聚合函数有五个:COUNT、MAX、MIN、AVG、SUM。

WHERE、聚合函数、HAVING三者之间的执行顺序是什么?

WHERE→聚合函数→HAVING。

COUNT(*)和COUNT(字段)有什么区别?

  1. 前者只是统计数据行,不论该字段的值是否为NULL;
  2. 后者会忽略字段的值为NULL的数据。

当MAX或MIN函数的参数为字符串时,如何计算最大值或最小值?

MAX 和 MIN 函数用于字符串类型数据的统计时,如果是英文字母,则按照 A—Z 的顺序排列,越往后,数值越大。如果是汉字则按照全拼拼音进行排列,越靠后,值越大。

需要说明,我们需要先把 name 字段(汉字类型)统一转化为 gbk 类型,使用CONVERT(name USING gbk),然后再使用 MIN 和 MAX 取最小值和最大值。

数值函数

常用的数值函数有哪些?

常用的数值函数有:ABS、SIGN、SQRT、LEAST、MOD、ROUND。

ROUND函数有什么作用?

ROUND函数可以对数据进行四舍五入,它有两个参数,分别表示需要处理的数据和四舍五入的位数。

SELECT ABS(-2)的运行结果是什么?

运行结果为 2。

SELECT MOD(101,3)的运行结果是什么?

运行结果 2。

SELECT ROUND(37.25,1)的运行结果是什么?

运行结果 37.3。

字符串函数

常用的字符串函数有哪些?

常用的字符串函数有:CONCAT、LENGTH、CHAR_LENGTH、LOWER、UPPER、SUBSTRING、REPLACE。

LEENGTH()CHAR_LENGTH()的区别是什么?

  1. 两个函数的共同点都是计算字段的长度。
  2. LENGTH()中,一个汉字算作三个字符,数字和字母都算作一个字符。
  3. CHAR_LENGTH()中,汉字、数字、字母,都算作一个字符。

SELECT CONCAT('abc', 123)的运行结果是什么?

运行结果为 abc123。

SELECT LENGTH('你好')的运行结果是什么?

运行结果为 6。

SELECT CHAR_LENGTH('你好')的运行结果是什么?

运行结果为 2。

SELECT LOWER('ABC')的运行结果是什么?

运行结果为 abc。

SELECT REPLACE('fabcd', 'abc', 123)的运行结果是什么?

运行结果为 f123d。

SELECT SUBSTRING('fabcd', 1,3)的运行结果是什么?

运行结果为 fab。

日期函数

常用的日期函数有哪些?

常用的日期函数有:YEAR、HOUR、QUARTER。

QUARTER函数的作用是什么?

QUARTER函数可以返回日期对应的季度,范围为1~4。

为什么对日期进行比较时,不能直接使用日期字符串?

我们一般使用DATE函数来对日期进行比较。

一般情况下,我们无法确认birthdate的数据类型是字符串,还是datetime类型,所以,使用DATE函数是比较安全的。

SELECT CURRENT_DATE()的运行结果是什么?

运行结果为 2019-04-03。

SELECT CURRENT_TIME()的运行结果是什么?

运行结果为 21:26:34。

SELECT CURRENT_TIMESTAMP()的运行结果是什么?

运行结果为 2019-04-03 21:26:34。

SELECT EXTRACT(YEAR FROM '2019-04-03')的运行结果是什么?

运行结果为 2019。

SELECT DATE('2019-04-01 12:00:05')的运行结果是什么?

运行结果为 2019-04-01。

流程函数

常见的流程函数有哪些?

常见的流程函数有:IF、IFNULL。

加密解密函数

常见的加密解密函数有哪些?

常见的加密解密函数有:PASSWORD、MD5、SHA、ENCODE、DECODE。

转换函数

什么是转换函数?常见的转换函数有哪些?

转换函数用于转换数据之间的类型。

常见的转换函数有:CAST、COALESCE。

CAST函数的作用是什么?它的参数是什么?

CAST用于数据类型转换,其参数是一个表达式。

这个表达式通过AS关键字分割了两个参数,分别表示原始数据类型和目标数据类型。

COALESCE函数的作用是什么?

返回第一个非空数值。

SELECT CAST(123.123 AS INT)的运行结果是什么?为什么?

运行结果会报错。

CAST 函数在转换数据类型的时候,不会四舍五入,如果原数值有小数,那么转换为整数类型的时候就会报错。

SELECT CAST(123.123 AS DECIMAL(8,2))的运行结果是什么?DECIMAL(8,2)是什么含义?

运行结果为 123.12。

DECIMAL(8,2)中,8代表整数部分和小数部分加起来最大的位数,2代表小数的位数。即:精度为8位,小数位数为2位的数据类型。

SELECT COALESCE(null,1,2)的运行结果是什么?

运行结果为 1。

约束

常见的约束有哪些?

常见的约束有七种:非空约束、唯一约束、主键约束、默认约束、外键约束、检查约束、索引约束。

六种常见约束对应的关键字分别是什么?

约束关键字
非空约束NOT NULL
唯一约束UNIQUE
主键约束PRIMARY KEY
外键约束FOREIGN KEY
默认约束DEFAULT
检查约束CHECK
索引约束INDEX

主键约束的作用是什么?

主键约束的作用是唯一标识一条记录,不能重复,不能为空。即:UNIQUE+NOT NULL。

一个数据表的主键只能有一个,但是,主键可以是一个字段,也可以是多个字段组合。

外键约束的作用是什么?

外键约束确保了两个表之间引用的完整性。一个表中的外键,对应另一张表中的主键。

普通索引和唯一性约束有什么区别?

唯一性约束相当于创建了一个约束和普通索引(NORMAL INDEX),普通索引只是提升数据的检索速度,不是对字段的唯一性约束。

多表查询

多表查询

多表查询分为哪几类?

多表查询分为四类:内连接查询、外连接查询、自连接查询、联合查询。

内连接查询

内连接查询分为哪几类?

内连接查询分为两类:隐式内连接查询和显式内连接查询。

什么是隐式内连接查询?

SELECT 字段列表 FROM1 ,2 WHERE 条件 ... ;

什么是显式内连接查询?

SELECT 字段列表 FROM1 [ INNER ] JOIN2 ON 连接条件 ... ;
#INNER可以省略

外连接查询

外连接查询分为哪几类?

外连接查询分为两类:左外连接和右外连接。

什么是左外连接?

SELECT 字段列表 FROM1 LEFT [ OUTER ] JOIN2 ON 条件 ... ;

什么是右外连接?

SELECT 字段列表 FROM1 RIGHT [ OUTER ] JOIN2 ON 条件 ... ;

现有表1、表2,两张表,C是它们的交集,A、B分别是两表不相交的部分数据,则表1左外连接表2时,查询结果是什么?表1右外连接表2的结果是什么?

左外连接会将左表的全部数据以及两表相交的部分数据查询出来作为结果。

所以表1左外连接表2的结果是A+C。

同理可知,表1右外连接表2的结果是C+B。

自连接查询

什么是自连接?

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

联合查询

什么是联合查询?

SELECT 字段列表 FROM 表名 ...
UNION [ALL]
SELECT 字段列表 FROM 表名 ...

子查询

标量子查询、列子查询、行子查询、表子查询的区别是什么?

子查询分为:标量子查询、列子查询、行子查询、表子查询。

它们的分类依据是查询结果的格式。

即:

标量子查询的结果是单个值;

列子查询的结果是一列数据;

列行子查询的结果是一行数据;

表子查询的结果是多行多列的表。

子查询相关的常用的关键字有哪些?

子查询常用的关键字有:IN、NOT IN、ANY、SOME、ALL。

关联子查询和非关联子查询的区别是什么?

关联子查询和非关联子查询的区别在于是否执行多次子查询。

非关联子查询:子查询从数据表中查询了数据结果,这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行。

关联子查询:子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部。

什么是存在性检测子查询?

使用EXISTS关键字的子查询即为存在性检测子查询。

什么是集合比较子查询?

存储引擎

MySQL中,常用的存储引擎有哪些?

MySQL中常用的存储引擎有:InnoDB、MyISAM、Memory、NDB、Archive等。

如何查看当前 MySQL 支持的存储引擎都有哪些?

通过 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。

如何选用存储引擎?

  1. 如果我们对数据表的完整性和正确性要求比较高,且需要较高的并发性能,则应选择InnoDB。
  2. 如果我们需要较多的插入和删除操作,且不要求较高的并发性以及表的完整性,则可以选择MyISAM。
  3. 如果我们只需要缓存数据,且对查询的响应速度要求较高,则可以使用Memory。

InnoDB

InnoDB的特点是什么?

InnoDB是MySQL5.5版本之后的默认引擎。

最大的特点有三个:

  1. 支持事务、
  2. 支持行级锁定(提高并发性能)、
  3. 支持外键约束。

MyISAM

MyISAM的特点是什么?

MyISAM是MySQL5.5之前的默认存储引擎,特点是:

  1. 不支持事务,
  2. 不支持外键,
  3. 但是访问速度快且占用的内存少。

MyISAM的锁机制只能到达表锁级别,相对于InnoDB的行级锁,并发性能会低一些。

sdi文件有什么用?

存储表的结构信息

MYD文件有什么用?

存储数据

MYI文件有什么用?

存储索引

Memory

Memory的特点是什么?

Memory的特点是:

  1. 使用系统内存作为存储介质,支持Hash索引,所以可以得到更快的响应速度。
  2. 但是,如果mysqld进程崩溃,则会导致所有数据丢失,

所以要慎重使用Memory作为存储引擎。

其它存储引擎

NDB的特点是什么?

NDB主要用于MySQL Cluster分布式集群环境。

Archive的特点是什么?

Archive有很好的压缩机制,用于文件归档,在请求写入时,会进行压缩,常用来作为仓库。

连接

内连接:将多个表之间满足连接条件的数据行查询出来。它包括了等值连接、非等值连接和自连接。外连接:会返回一个表中的所有记录,以及另一个表中匹配的行。它包括了左外连接、右外连接和全连接。交叉连接:也称为笛卡尔积,返回左表中每一行与右表中每一行的组合。在 SQL99 中使用的 CROSS JOIN。

NATURAL JOIN

CROSS JOIN

ON 连接

USING 连接

SQL92和SQL99中的连接有什么区别?

在 SQL92 中采用(+)代表从表所在的位置,而且在SQL92 中,只有左外连接和右外连接,没有全外连接。

LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中,在 SQL92 中不存在,只能用(+)表示。

SQL99 的外连接有哪些形式?

SQL99 的外连接包括了三种形式:

  1. 左外连接:LEFT JOIN 或 LEFT OUTER JOIN
  2. 右外连接:RIGHT JOIN 或 RIGHT OUTER JOIN
  3. 全外连接:FULL JOIN 或 FULL OUTER JOIN

不同 DBMS 中使用连接需要注意的地方有哪些?

  1. 不是所有的 DBMS 都支持全外连接
  2. Oracle 没有表别名 AS
  3. SQLite 的外连接只有左连接

关于连接的性能问题有哪些需要注意?

  1. 控制连接表的数量
  2. 在连接时不要忘记 WHERE 语句
  3. 使用自连接而不是子查询

为什么要使用自连接而不是子查询?

因为子查询的判断对象是未知的数据表;自连接的判断对象是已知的数据表,

所以大部分 DBMS 中都对自连接处理进行了优化,在许多 DBMS 的处理过程中,对于自连接的处理速度要比子查询快得多。

事务

事务

MySQL 5.5 版本之前,默认的存储引擎是什么?为什么要改变默认的存储引擎?

MySQL 5.5 版本之前,默认的存储引擎是MyISAM。在 5.5 版本之后默认存储引擎是 InnoDB。

InnoDB 取代 MyISAM 的重要原因,是因为InnoDB 支持事务,而MyISAM不支持事务。

事务的英文是什么?

事务的英文是transaction。

事务的特性是什么?

事务的特性:ACID

  1. A:原子性(Atomicity),事务是不可分割的,它是进行数据处理操作的基本单位。
  2. C:一致性(Consistency),数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
  3. I:隔离性(Isolation),每个事务都是彼此独立的,不会受到其他事务的执行影响。一个事务在提交之前,对其他事务都是不可见的。
  4. D:持久性(Durability),事务提交之后对数据的修改是持久性的,即使在系统出故障比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。

事务的常用控制语句都有哪些?

  1. START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
  2. COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
  3. ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
  4. SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
  5. RELEASE SAVEPOINT:删除某个保存点。
  6. SET TRANSACTION,设置事务的隔离级别。

使用事务的方式有哪些?有什么区别?

使用事务有两种方式:隐式事务和显式事务。

  1. 隐式事务:实际上就是自动提交。
  2. 显式事务:需要手写 COMMIT 命令提交事务。

Oracle默认的事务使用方式是哪一种?MySQL默认的事务使用方式是哪一种?如何设置MySQL的事务提交方式?

Oracle默认的事务使用方式是显式事务,即不自动提交,需要手动写COMMIT命令来提交事务

MySQL默认的事务使用方式是隐式事务,即:自动提交。

如果要改变MySQL的事务提交方式,需要配置MySQL的参数:

mysql> set autocommit =0;  //关闭自动提交
mysql> set autocommit =1;  //开启自动提交

事务相关参数

autocommit参数的作用有哪些?set autocommit =1;有什么作用?

MySQL 中,autocommit的默认值是0,。

autocommit参数有 2 种取值:

  1. autocommit=0 时,不论是否采用 START TRANSACTION 或者 BEGIN 的方式来开启事务,都需要用 COMMIT 进行提交,使用 ROLLBACK 对事务进行回滚。
  2. autocommit=1 时,每条 SQL 语句都会自动进行提交。

所以,set autocommit =1;的作用是设置事务的默认提交方式为自动提交。

completion_type 参数的作用有哪些?SET @@completion_type = 1;有什么作用?

MySQL 中,completion_type 的默认值是0。

completion_type 参数有 3 种取值:

  1. completion=0:默认情况。当我们执行 COMMIT 的时候会提交事务,在执行下一个事务时,还需要我们使用 START TRANSACTION 或者 BEGIN 来开启。
  2. completion=1:当我们提交事务后,相当于执行了 COMMIT AND CHAIN,开启一个链式事务,即当我们提交事务之后,会自动开启一个相同隔离级别的事务。
  3. completion=2:也就是 COMMIT=COMMIT AND RELEASE,当我们提交后,会自动与服务器断开连接。

所以SET @@completion_type = 1;的作用是开启链式事务,即:提交了事务之后,自动开启一个隔离级别相同的新事务。

事务隔离级别

如何查看隔离级别?

SELECT @@TRANSACTION_ISOLATION;

如何设置事务的隔离级别?

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

SESSIONGLOBAL有什么区别?

  1. SEEION:会话期间有效。
  2. GLOBAL:全局(所有会话)有效。

事务并发处理可能存在的三种异常是什么?

事务并发处理可能存在的三种异常:

  1. 脏读(Dirty Read)
  2. 不可重复读(Nonrepeatable Read)
  3. 幻读(Phantom Read)

四种事务隔离的级别分别是什么?

四种事务隔离的级别分别是:

  1. 读未提交(READ UNCOMMITTED)
  2. 读已提交(READ COMMITTED)
  3. 可重复读(REPEATABLE READ)
  4. 串行化(SERIALIZABLE)

脏读(Dirty Read)是什么?

读到了其他事务还没有提交的数据。

不可重复读(Nonrepeatable Read)是什么?

对某数据进行读取时,由于有其他事务对这个数据同时进行了修改或删除,导致两次读取的结果不同。

幻读(Phantom Read)是什么?

当事务A根据指定查询条件对某数据多次进行读取时,由于有其他事务更改了符合查询条件的数据,导致事务A多次得到的数据的数量不同。

四种隔离级别之间的高低关系是什么?

串行化 > 可重复读 > 读已提交 > 读未提交。

读已提交能解决哪些并发处理异常?

读已提交只能解决脏读的问题,无法解决不可重复度和幻读。

读未提交能解决哪些并发处理异常?

读未提交不能解决任何并发处理异常。

可重复读能解决哪些并发处理异常?

可重复读可以解决脏读和不可重复读问题,不能解决幻读问题。

回滚日志和重做日志(这似乎属于MySQL)

持久性是通过事务日志来保证的。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。

索引

索引分为哪几类?

  1. 主键索引:PRIMARY
  2. 唯一索引:UNIQUE
  3. 常规索引
  4. 全文索引:FULLTEXT

可以创建多个主键索引么?可以创建多个唯一索引吗?

主键索引只能有一个,但是唯一索引、常规索引、全文索引都可以有多个。

索引的优点是什么?缺点是什么?

优点:

  1. 降低系统I/O,提高查询速度
  2. 可以根据索引列进行排序,降低了排序的成本

缺点:

  1. 降低了UPDATE、INSERT和DELETE的消耗。
  2. 维护索引需要一定的内存空间。

常见的索引类型?????

常见的索引类型有哪些?

  1. Hash索引:底层使用Hash表实现。Hash索引不支持排序,且必须精确匹配,范围查询时无效。
  2. B+ Tree索引:最常见的索引类型,大部分引擎都支持B+Tree索引。
  3. 全文索引(Full-text)
  4. 空间索引(R-Tree)

Hash索引有什么缺点?

Hash索引无法匹配范围查询,只能匹配精确查询。

Memory存储引擎支持Hash索引。

InnoDB支持哪些索引?

InnoDB只支持B+Tree索引和Full-text索引,不支持Hash索引和R-Tree索引。

MyISAM支持哪些索引?

MyISAM支持B+Tree索引、R-Tree索引和Full-text索引,不支持Hash索引。

索引结构

常见的索引结构有哪些?

常见的索引结构有:

  1. Hash表
  2. 二叉树
  3. B- Tree树
  4. B+ Tree树

Hash表的索引结构有什么优点和缺点?

优点:

  1. 在不发生哈希冲突的前提下,只需要一次检索即可查询到数据,所以查询速度很快

缺点:

  1. 不支持排序
  2. 不支持范围查询

二叉树的索引结构有什么缺点和优点?

优点:

  1. 不知道

缺点:

  1. 按顺序插入时,二叉树会变成链表,降低查询性能
  2. 当数据量过大时,查询深度会增加,降低查询性能

什么是B树的度?

B-Tree(B树)和二叉树有什么不同?

  1. 二叉树中,每个节点最多有两个子节点;B-Tree中,每个节点可以有多个子节点。

B树的叶子节点可以存放数据吗?

B树的叶子节点和非叶子节点都可以存放数据。

B树和B+树的区别是什么?

  1. B树的叶子节点和非叶子节点都可以存放数据
  2. B+树的叶子节点存放数据,非叶子节点存放索引

MySQL中的B+树与普通的B+树有什么区别?

MySQL中对B+树进行了优化,在B+树的叶子节点中,增加了指向相邻叶子节点的指针,提高了访问的性能。

InnoDB为什么选择B+树作为索引结构?

应该从为什么不选择Hash表、B-树、二叉树的角度来回答这个问题:

相比于B+树,

  1. Hash表不支持范围查询,不支持排序,
  2. B-树中的数据和索引储存在一起,会造成更多的内存消耗
  3. 二叉树则在数据量较大时,层级过多,造成读取效率的降低,以及存在变成链表的可能。

聚集索引与非聚集索引

什么是聚集索引?什么是非聚集索引?聚集索引和非聚集索引有什么区别?

聚集索引的数据和索引保存在一起,非聚集索引的数据和索引是分离的。

在SQL中,一个表只能有一个聚集索引,但是可以有多个非聚集索引。

非聚集索引是如何查询数据的?

非聚集索引的数据查询需要回表。

如何选择聚集索引?

  1. 当存在主键时,选择主键作为聚集索引
  2. 当没有主键,但是有唯一索引时,选择第一个唯一索引作为聚集索引
  3. 当既没有主键,也没有唯一索引时,InnoDB会自动创建一个rowid列作为隐藏的聚集索引

SQL中的索引语法

如何查询索引?

SHOW INDEX FROM table_name;

如何创建索引?

CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name(index_col_name,...)

如何删除索引?

DROP INDEX index_name ON table_name;

最左前缀法则

什么是最左前缀法则?

最左前缀法则指联合索引中,查询从最左边的列开始,如果跳过其中某些列,将会导致索引失效。

注意:只会导致后面的索引失效,之前的索引不受影响。

索引失效

索引在什么情况下会失效?

索引在这些情况下会失效:

  1. 字段类型为字符串,但内容为数字,如:电话号码、身份证等情况。如果WHERE子句中,没有为这些字段加上引号'',将会导致索引失效。
  2. OR
  3. 模糊查询
  4. 对索引使用函数

索引的使用和设计原则

索引的设计原则有哪些?

  1. 数据量过大时,一定要建立索引
  2. 查询频率较高的多列,应该建立联合索引
  3. 当字段类型为字符串时,尽量使用前缀索引,而不是全索引
  4. 列中尽量不要有空数据
  5. 尽量选择区分度高的列作为索引

SQL优化

对数据库进行调优时,都有哪些维度可以选择?

对数据库调优时,可以从以下几个角度入手:

  1. 选择合适的DBMS
  2. 优化表设计
  3. 优化逻辑查询
  4. 优化物理查询
  5. 使用Redis或Memcached作为缓存
  6. 库级优化

SQL性能分析

如何查看各种SQL语句的执行频次?

SHOW GLOBAL STATUS LINKE 'COM_类型';

运行结果如下:

image-20250218225046940

通过SHOW GLOBAL STATUS LIKE 'COM______';,我们可以了解到数据库是以增删改为主,还是以查询为主,从而思考如何优化数据库。

慢查询日志

慢查询日志的作用是什么?

慢查询日志用于记录执行时间超过指定限时(默认限时是10秒)的查询语句。

如何设置限时的时长?

通过参数long_query_time设置,它的单位是,默认值是10秒。

如何查看慢查询日志功能是否打开?

利用SQL语句:SELECT variables LIKE ‘slow_query_log’;来查看是否打开了慢查询日志功能,参数值为ON或1时,即为打开的状态。

SHOW profiles

Profile的作用是什么?

Profiles用于了解每条SQL语句的时间消耗。

如何设置Profile开启?

SET [SESSION|GLOBAL] profiling=1;

如何查看Profile是否开启?

SELECT @@profiling;

如何使用profiles文件查看每条SQL语句的时间消耗?

SHOW profiles;

注意:每次执行这个SQL语句时,结果表中的query_id都会变化。

如何查看某条SQL语句更具体的时间消耗?

SHOW profile for query n;

查看query_id为n的SQL语句的具体执行时间消耗。

explain

explain的作用是什么?如何使用?

用于查看表的索引、连接表等的信息。

使用方式如下:

EXPLAINS 查询语句;

拓展

视图

存储过程

游标

SQL语句练习

查询比平均薪资高的员工信息

select * from emp where salary > (select avg(salary) from emp)

查询低于本部门平均工资的员工信息

SELECT * FROM emp e1 where e1.salary < (select avg(e2.salary) from emp e2 where e1.dept_id = e2.dept_id )

查询 “研发部” 员工的平均工资

SELECT avg(salary) 
FROM emp 
where dept_id = (SELECT id from dept where name = '研发部')

查询拥有员工的部门ID、部门名称

SELECT distinct d.id ,d.name
FROM emp e join dept d on e.dept_id = d.id

查询所有年龄大于40岁的员工, 及其归属的部门名称; 如果员工没有分配部门, 也需要展示出来

SELECT e.*,d.name '部门名称'
FROM emp e left join dept d on e.dept_id = d.id
where e.age > 40

查询所有员工的工资等级

SELECT  e.* ,s.id '薪资等级'
FROM emp e left join salgrade s on  e.salary > s.losal and e.salary <= s.hisal 

查询主要定位或者次要定位是法师或是射手的英雄,同时英雄的上线时间不在 2016-01-01 到 2017-01-01 之间。

SQLSELECT name, role_main, role_assist, hp_max, mp_max, birthdate
FROM heros 
WHERE (role_main IN ('法师', '射手') OR role_assist IN ('法师', '射手')) 
AND DATE(birthdate) NOT BETWEEN '2016-01-01' AND '2017-01-01'
ORDER BY (hp_max + mp_max) DESC

查询英雄最大生命值的最大值:

SQLSELECT MAX(hp_max) FROM heros;

查询英雄的名字,以及他们的名字字数:

SQLSELECT CHAR_LENGTH(name), name FROM heros

查询英雄上线日期(对应字段 birthdate)的年份,只显示有上线日期的英雄即可(有些英雄没有上线日期的数据,不需要显示):

SQLSELECT name, EXTRACT(YEAR FROM birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL
#或
SQL: SELECT name, YEAR(birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL

查询在 2016 年 10 月 1 日之后上线的所有英雄:

SQLSELECT * FROM heros WHERE DATE(birthdate)>'2016-10-01'

查询不同的生命最大值的英雄数量是多少:

SQL: SELECT COUNT(DISTINCT hp_max) FROM heros

统计不同生命最大值英雄的平均生命最大值,保留小数点后两位:

SQL: SELECT ROUND(AVG(DISTINCT hp_max), 2) FROM heros

查找薪水最高的前 3 名员工。

SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 3;

统计每个部门(dept_id)的平均薪资,并仅显示平均薪资高于 15000 的部门。

SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > 15000;

查询员工姓名(name)及其所属部门名称(dept_name),表结构为 employees(id, name, dept_id)和 departments(id, dept_name)。

SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.id;

查询没有订单的客户(customers 表的 id 不在 orders 表的 customer_id 中)。

SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id
);

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

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

相关文章

nlp|微调大语言模型初探索(1),LLaMA-Factory

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家&#xff0c;利用现有的开源工具和库&#xff08;如Hugging Face的Transformers等&#xff09;&#xff0c;中小型公司可以轻松地使用和微调大型模型&#xff0c;从而快速实现AI能力的集…

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下&#xff0c;企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构&#xff0c;通过统一的内容资源池与智能化管理工具&#xff0c;重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒&#xff0c;…

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能…

Django创建一个非前后端分离平台

1.pub_blog前端创立 1.blog/pub路由 注意两个路由的区别 2.完善页面 用表单实现 3.加载wangeditor的几个文件 4.配置样式 5.配置js代码&#xff0c;单独放在js文件夹中&#xff0c;js文件夹pub_blog onload事件&#xff0c;加载完成后会再加载 5.提交按钮

什么情况下索引会失效

一、索引创建的原则 1、针对数据量较大&#xff0c;且查询比较频繁的表建立索引。 单表超过10万数据&#xff0c;即可增加索引 2、使用经常作为查询条件&#xff08;where&#xff09;、排序&#xff08;order by&#xff09;、分组&#xff08;group by&#xff09;操作的字…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

【性能测试】如何理解“10个线程且10次循环“的请求和“100线程且1次循环“的请求

在性能测试中&#xff0c;我们常常会见到不同的并发配置&#xff1a;比如“10个线程且10次循环”与“100线程且1次循环”。乍一看&#xff0c;这两个设置的总请求数都是100次&#xff0c;但它们对系统的压力和测试场景却截然不同。了解其中的区别&#xff0c;能帮助你更精准地模…

【Golang】GC探秘/写屏障是什么?

之前写了 一篇【Golang】内存管理 &#xff0c;有了很多的阅读量&#xff0c;那么我就接着分享一下Golang的GC相关的学习。 由于Golang的GC机制一直在持续迭代&#xff0c;本文叙述的主要是Go1.9版本及以后的GC机制&#xff0c;该版本中Golang引入了 混合写屏障大幅度地优化了S…

百度千帆平台对接DeepSeek官方文档

目录 第一步&#xff1a;注册账号&#xff0c;开通千帆服务 第二步&#xff1a;创建应用&#xff0c;获取调用秘钥 第三步&#xff1a;调用模型&#xff0c;开启AI对话 方式一&#xff1a;通过API直接调用 方式二&#xff1a;使用SDK快速调用 方式三&#xff1a;在千帆大模…

Natural Language Processing NLP

NLP 清晰版本查看 Sentence segmentation (split)Tokenisation (split)Named entity recognition (combine) 概念主要內容典型方法Distributional Semantics&#xff08;分佈式語義&#xff09;&#xff08;分銷語義&#xff08;分佈式語義&#xff09;單詞的語義來自於它的…

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息&#xff0c;并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中&#xff0c;线程的实现方式与进程类似&#xff0c;每个线程都…

HarmonyOS:使用List实现分组列表(包含粘性标题)

一、支持分组列表 在列表中支持数据的分组展示&#xff0c;可以使列表显示结构清晰&#xff0c;查找方便&#xff0c;从而提高使用效率。分组列表在实际应用中十分常见&#xff0c;如下图所示联系人列表。 联系人分组列表 在List组件中使用ListItemGroup对项目进行分组&#…

django上传文件

1、settings.py配置 # 静态文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上传文件 # 定义一个视图函数&#xff0c;该函数接收一个 request 参数 from django.shortcuts import render # 必备引入 import json from django.views.decorators.http i…

Office word打开加载比较慢处理方法

1.添加safe参数 ,找到word启动项,右击word,选择属性 , 添加/safe , 应用并确定 2.取消加载项,点击文件,点击选项 ,点击加载项,点击转到,取消所有勾选,确定。

内网下,Ubuntu (24.10) 离线安装docker最新版教程

一般在数据比较敏感的情况下&#xff0c;是无法使用网络的&#xff0c;而对于Ubuntu系统来说&#xff0c;怎么离线安装docker呢&#xff1f; 下面我给大家来讲一下&#xff1a; 采用二进制安装&#xff1a; 1.下载docker离线包 官网下载&#xff1a; Index of linux/static…

Copilot Next Edit Suggestions(预览版)

作者&#xff1a;Brigit Murtaugh&#xff0c;Burke Holland 排版&#xff1a;Alan Wang 我们很高兴向你介绍在本次 Visual Studio Code 发布中&#xff0c;关于 GitHub Copilot 的三个预览功能&#xff1a; Next Edit Suggestions&#xff08;NES&#xff09;Copilot Edits 的…

高性能内存对象缓存Memcached详细实验操作

目录 前提准备&#xff1a; cache1&#xff0c;2&#xff1a; 客户端cache-api&#xff08;一定得是LAMP环境&#xff09; memcache实现主主复制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提准备&#xff1a; 1. 准备三台cent…

Spring AI发布!让Java紧跟AI赛道!

1. 序言 在当今技术发展的背景下&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业中不可忽视的重要技术。无论是在互联网公司&#xff0c;还是传统行业&#xff0c;AI技术的应用都在大幅提升效率、降低成本、推动创新。从智能客服到个性化推荐&#xff0c;从语…

UART(一)——UART基础

一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…