安徽网站建设产品介绍,学校网站管理与建设,在国内怎么做国外网站,做dw网站图片怎么下载SQL复习
MySQL
MySQL
MySQL有什么特点#xff1f; MySQL 不支持全外连接。 安装
数据类型
MySQL中的数据类型分为哪些#xff1f; MySQL中的数据类型主要分为三大类#xff1a;数值类型、字符串类型、日期时间类型。 其中#xff0c; 数值类型又分为七种#xff1a;T…SQL复习
MySQL
MySQL
MySQL有什么特点 MySQL 不支持全外连接。 安装
数据类型
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四者之间的大小排序是TINYINTSMALLINTINTBIGINT。 且按照2的整数幂递增分别对应1bytes、2bytes、4bytes、8bytes。 数值类型大小TINYINT1bytesSMALLINT2bytesINT/INTEGER4bytesBIGINT/Long8bytes
数值类型中FLOAT、DOUBLE的大小分别是多少 两者都是浮点数值前者是单精度浮点数后者是双精度浮点数。 数值类型大小FLOAT4bytesDOUBLE8bytes
字符串类型都有哪些 字符串类型包括CHAR、VARCHAR、BLOB、TEXT、LONGTEXT。 CHAR和VARCHAR有什么区别CHAR的大小是多少VARCHAR的大小是多少 CHAR是定长字符串VARCHAR是变长字符串。 但两者在使用时都需要指定长度。 字符串类型大小CHAR0-255bytesVARCHAR0-65535bytes
BLOB常用于什么场景什么情况下会使用BLOB BLOB是二进制形式的长文本数据所以经常用于图片数据等需要用二进制保存的数据。 日期时间类型分为哪几种 日期时间类型分为DATE、TIME、YEAR、DATETIME、TIMESTAMP。 DATE类型、TIME类型、DATETIME类型、TIMESTAMP类型的数据分别是什么格式
日期时间类型格式DATEYYYY-MM-DDDATETIMEYYYY-MM-DD HH:MM:SSTIMEHH:MM:SSTIMESTAMPYYYY-MM-DD
SQL介绍
SQL
SQL的全拼是什么 SQL全拼Structured Query Language也叫结构化查询语言。 SQL92和SQL99有什么区别呢 SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用代表从表所在的位置而且在SQL92 中只有左外连接和右外连接没有全外连接。 LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中在 SQL92 中不存在只能用表示。 SQL99 的外连接有哪些形式 SQL99 的外连接包括了三种形式 左外连接LEFT JOIN 或 LEFT OUTER JOIN右外连接RIGHT JOIN 或 RIGHT OUTER JOIN全外连接FULL JOIN 或 FULL OUTER JOIN SQL语言按照功能划分为哪四部分它们分别是什么作用 SQL语言按照功能划分为DDL、DML、DCL、DQL四部分。 DDLData Definition Language数据定义语言。用于定义数据库对象包括数据库、数据表和列。 DMLData Manipulation Language数据操作语言。用于增加、删除、修改数据表中的记录。 DCLData Control Language数据控制语言。用于定义访问权限和安全级别。 DQLData 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是作用是什么主要关键字有哪些 DCLData 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 itsylocalhost 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 itsylocalhost;
#以上语句的作用是什么删除 itsylocalhost 用户。 DDL
什么是DDLDDL的作用是什么主要关键字包括哪些 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
什么是DMLDML的作用是什么主要关键字是哪些 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
什么是DQLDQL有什么作用DQL的关键字有哪些 DQLData Query Language即数据库查询语言。 DQL主要用于数据的查询。 DQL的关键字包括SELECT、WHERE、GROUP、ORDER BY、FROM、DISTINCT、HAVING、LIMIT。 为列添加别名使用什么关键字 为列添加别名需要使用AS关键字但其实AS关键字可以省略。 WHERE和HAVING的区别是什么重点 两者的区别主要体现在两个方面 两者执行时间不同WHER在分组之前执行不参与分组HAVING在分组之后执行。判断条件不同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有以下几处需要掌握 ORDER BY后可以有一个或多个列名。对多个列的排序会按照先后顺序进行。OREDR BY可以设置排序规则ASC表示递增DESC表示递减。默认按照ASC进行排序。ORDER BY可以对非选择列进行排序即即使SELECT后没有此列也可以放在ORDER BY后参与排序。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的执行顺序基本相同。 FROM → WHERE → GROUP BY → HAVING → SELECT的字段 → DISTINCT → ORDER BY → LIMIT具体如下 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 语句内部的执行顺序是这样的 FROM 子句组装数据包括通过 ON 进行连接WHERE 子句进行条件筛选GROUP BY 分组 使用聚集函数进行计算HAVING 筛选分组计算所有的表达式SELECT 的字段ORDER BY 排序LIMIT 筛选。 SELECT *
SELECT *有什么缺点 使用SELECT * 会增加数据库负担。在实际工作中应尽量写出所需要的列名生产环境下尽量不要使用SELECT *进行查询。 通配符
如何查询英雄中包含“太”字的英雄都有哪些 使用通配符查询。 SQLSELECT name FROM heros WHERE name LIKE %太%为什么要尽量少的使用通配符进行查询 通配符需要消耗较长的时间来进行匹配。如果LIKE检索的字段有索引那么模糊查询时索引可能失效。 太%和%太有什么区别 首先两者最大的区别在于查询的对象不同前者指以“太”开头的元素后者指以“太”结尾的元素。其次当对应字段存在索引时前者不会进行全表扫描后者会进行全表扫描。 比较运算符
SQL中的比较运算符有哪些 SQL中的运算符有10种 、、、、、或!、BETWEEN AND、IN()、LIKE 占位符、IS NULL和IS 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的区别是什么 WHERE 是用于过滤数据行而 HAVING 则用于分组。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 待定 my.ini文件有什么作用 my.ini文件用于对MySQL进行配置如修改默认存储引擎、修改默认事务隔离级别等。 MySQL中的SQL是如何执行的SQL语句在MySQL中的执行流程是什么 在MySQL中SQL语句是在mysqld中的SQL层执行的具体流程为 SQL语句→查询缓存→解析器→优化器→执行器。 MySQl的架构是什么 MySQL采用的是C/S架构即Client/Server。 服务器端使用的是mysqld。 mysqld的结构是什么样的 mysqld分为三层结构连接层、SQL层、存储引擎层。 MySQL和Oracle的区别是什么 MySQL中的存储引擎采用了插件的形式每种存储引擎都对应一种数据库应用环境。且允许开发人员设置自己的存储引擎。 MySQL中常用的存储引擎有哪些 MySQL中常用的存储引擎有InnoDB、MyISAM、Memory、NDB、Archive等。 mysqld 连接层的作用是什么 连接层负责建立客户端和服务器端的连接。 连接建立后客户端会发送SQL到服务器端。 SQL层的作用是什么 SQL层负责对SQL语句进行查询处理。 存储引擎层的作用是什么 存储引擎层负责与数据库打交道负责数据的存储和读取。 SQL层的结构是什么样的 SQL层分为四部分查询缓存、解析器、优化器、执行器。 为什么MySQL8.0之后抛弃了查询缓存的功能 抛弃的原因主要在于查询缓存的效率不高。 查询缓存的作用是什么 查询缓存会保存已经之前查询过的SQL语句当这条SQL语句再次出现时服务器端就会直接将结果返回给客户端如果查询缓存中没有这条SQL语句就会进入解析器阶段。 Navicat
SQL函数
SQL函数
为什么不建议使用SQL函数 因为不同的DBMS之间的差异很大大部分DBMS都会有属于自己的SQL函数这导致采用SQL函数的代码的可移植性很差。 聚合函数
什么是聚合函数常用的聚合函数有哪些 聚合函数也叫聚集函数指用于对一组数据进行汇总的函数。参数为一组数据的集合返回值为单个值。 常用的聚合函数有五个COUNT、MAX、MIN、AVG、SUM。 WHERE、聚合函数、HAVING三者之间的执行顺序是什么 WHERE→聚合函数→HAVING。 COUNT(*)和COUNT(字段)有什么区别 前者只是统计数据行不论该字段的值是否为NULL后者会忽略字段的值为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()的区别是什么 两个函数的共同点都是计算字段的长度。在LENGTH()中一个汉字算作三个字符数字和字母都算作一个字符。在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
主键约束的作用是什么 主键约束的作用是唯一标识一条记录不能重复不能为空。即UNIQUENOT NULL。 一个数据表的主键只能有一个但是主键可以是一个字段也可以是多个字段组合。 外键约束的作用是什么 外键约束确保了表与表之间引用的完整性。一个表中的外键对应另一张表中的主键。 普通索引和唯一性约束有什么区别 唯一性约束相当于创建了一个约束和普通索引NORMAL INDEX普通索引只是提升数据的检索速度不是对字段的唯一性约束。 多表查询
多表查询
多表查询分为哪几类 多表查询分为四类内连接查询、外连接查询、自连接查询、联合查询。 内连接查询
内连接查询分为哪几类 内连接查询分为两类隐式内连接查询和显式内连接查询。 什么是隐式内连接查询
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;什么是显式内连接查询
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
#INNER可以省略外连接查询
外连接查询分为哪几类 外连接查询分为两类左外连接和右外连接。 什么是左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;什么是右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;现有表1、表2两张表C是它们的交集A、B分别是两表不相交的部分数据则表1左外连接表2时查询结果是什么表1右外连接表2的结果是什么 左外连接会将左表的全部数据以及两表相交的部分数据查询出来作为结果。 所以表1左外连接表2的结果是AC。 同理可知表1右外连接表2的结果是CB。 自连接查询
什么是自连接
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等。 InnoDB的特点是什么 InnoDB是MySQL5.5版本之后的默认引擎。 最大的特点有三个 支持事务、支持行级锁定提高并发性能、支持外键约束。 MyISAM的特点是什么 MyISAM是MySQL5.5之前的默认存储引擎特点是不支持事务不支持外键但是速度快且占用的内存少。 Memory的特点是什么 Memory的特点是使用系统内存作为存储介质可以得到更快的响应速度。但是如果mysqld进程崩溃则会导致所有数据丢失所以要慎重使用Memory作为存储引擎。 NDB的特点是什么 NDB主要用于MySQL Cluster分布式集群环境。 Archive的特点是什么 Archive有很好的压缩机制用于文件归档在请求写入时会进行压缩常用来作为仓库。 如何查看当前 MySQL 支持的存储引擎都有哪些 通过 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些以及这些存储引擎是否支持事务。 连接
内连接将多个表之间满足连接条件的数据行查询出来。它包括了等值连接、非等值连接和自连接。外连接会返回一个表中的所有记录以及另一个表中匹配的行。它包括了左外连接、右外连接和全连接。交叉连接也称为笛卡尔积返回左表中每一行与右表中每一行的组合。在 SQL99 中使用的 CROSS JOIN。
NATURAL JOIN
CROSS JOIN
ON 连接
USING 连接
SQL92和SQL99中的连接有什么区别 在 SQL92 中采用代表从表所在的位置而且在SQL92 中只有左外连接和右外连接没有全外连接。 LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中在 SQL92 中不存在只能用表示。 SQL99 的外连接有哪些形式 SQL99 的外连接包括了三种形式 左外连接LEFT JOIN 或 LEFT OUTER JOIN右外连接RIGHT JOIN 或 RIGHT OUTER JOIN全外连接FULL JOIN 或 FULL OUTER JOIN 不同 DBMS 中使用连接需要注意的地方有哪些 不是所有的 DBMS 都支持全外连接Oracle 没有表别名 ASSQLite 的外连接只有左连接 关于连接的性能问题有哪些需要注意 控制连接表的数量在连接时不要忘记 WHERE 语句使用自连接而不是子查询 为什么要使用自连接而不是子查询 因为子查询的判断对象是未知的数据表自连接的判断对象是已知的数据表 所以大部分 DBMS 中都对自连接处理进行了优化在许多 DBMS 的处理过程中对于自连接的处理速度要比子查询快得多。 事务
事务
MySQL 5.5 版本之前默认的存储引擎是什么为什么要改变默认的存储引擎 MySQL 5.5 版本之前默认的存储引擎是MyISAM。在 5.5 版本之后默认存储引擎是 InnoDB。 InnoDB 取代 MyISAM 的重要原因是因为InnoDB 支持事务而MyISAM不支持事务。 事务的英文是什么 事务的英文是transaction。 事务的特性是什么 事务的特性ACID A原子性Atomicity事务是不可分割的它是进行数据处理操作的基本单位。C一致性Consistency数据库在进行事务操作后会由原来的一致状态变成另一种一致的状态。当事务提交后或者当事务发生回滚后数据库的完整性约束不能被破坏。I隔离性Isolation每个事务都是彼此独立的不会受到其他事务的执行影响。一个事务在提交之前对其他事务都是不可见的。D持久性Durability事务提交之后对数据的修改是持久性的即使在系统出故障比如系统崩溃或者存储介质发生故障数据的修改依然是有效的。 事务的常用控制语句都有哪些 START TRANSACTION 或者 BEGIN作用是显式开启一个事务。COMMIT提交事务。当提交事务后对数据库的修改是永久性的。ROLLBACK 或者 ROLLBACK TO [SAVEPOINT]意为回滚事务。意思是撤销正在进行的所有没有提交的修改或者将事务回滚到某个保存点。SAVEPOINT在事务中创建保存点方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。RELEASE SAVEPOINT删除某个保存点。SET TRANSACTION设置事务的隔离级别。 使用事务的方式有哪些有什么区别 使用事务有两种方式隐式事务和显式事务。 隐式事务实际上就是自动提交。显式事务需要手写 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 种取值 autocommit0 时不论是否采用 START TRANSACTION 或者 BEGIN 的方式来开启事务都需要用 COMMIT 进行提交使用 ROLLBACK 对事务进行回滚。autocommit1 时每条 SQL 语句都会自动进行提交。 所以set autocommit 1;的作用是设置事务的默认提交方式为自动提交。 completion_type 参数的作用有哪些SET completion_type 1;有什么作用 MySQL 中completion_type 的默认值是0。 completion_type 参数有 3 种取值 completion0默认情况。当我们执行 COMMIT 的时候会提交事务在执行下一个事务时还需要我们使用 START TRANSACTION 或者 BEGIN 来开启。completion1当我们提交事务后相当于执行了 COMMIT AND CHAIN开启一个链式事务即当我们提交事务之后会自动开启一个相同隔离级别的事务。completion2也就是 COMMITCOMMIT AND RELEASE当我们提交后会自动与服务器断开连接。 所以SET completion_type 1;的作用是开启链式事务即提交了事务之后自动开启一个隔离级别相同的新事务。 事务隔离
事务并发处理可能存在的三种异常是什么 事务并发处理可能存在的三种异常 脏读Dirty Read不可重复读Nonrepeatable Read幻读Phantom Read 四种事务隔离的级别分别是什么 四种事务隔离的级别分别是 读未提交READ UNCOMMITTED读已提交READ COMMITTED可重复读REPEATABLE READ串行化SERIALIZABLE 脏读Dirty Read是什么 读到了其他事务还没有提交的数据。 不可重复读Nonrepeatable Read是什么 对某数据进行读取时由于有其他事务对这个数据同时进行了修改或删除导致两次读取的结果不同。 幻读Phantom Read是什么 当事务A根据指定查询条件对某数据多次进行读取时由于有其他事务更改了符合查询条件的数据导致事务A多次得到的数据的数量不同。 四种隔离级别之间的高低关系是什么 串行化 可重复读 读已提交 读未提交。 读已提交能解决哪些并发处理异常 读已提交只能解决脏读的问题无法解决不可重复度和幻读。 读未提交能解决哪些并发处理异常 读未提交不能解决任何并发处理异常。 可重复读能解决哪些并发处理异常 可重复读可以解决脏读和不可重复读问题不能解决幻读问题。 回滚日志和重做日志这似乎属于MySQL
持久性是通过事务日志来保证的。当我们通过事务对数据进行修改的时候首先会将数据库的变化信息记录到重做日志中然后再对数据库中对应的行进行修改。这样做的好处是即使数据库系统崩溃数据库重启后也能找到没有更新到数据库系统中的重做日志重新执行从而使事务具有持久性。
索引
SQL优化
对数据库进行调优时都有哪些维度可以选择 对数据库调优时可以从以下几个角度入手 选择合适的DBMS优化表设计优化逻辑查询优化物理查询使用Redis或Memcached作为缓存库级优化 拓展
视图
存储过程
游标
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 之间。
SQL
SELECT 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的年份只显示有上线日期的英雄即可有些英雄没有上线日期的数据不需要显示
SQL SELECT 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 日之后上线的所有英雄
SQL SELECT * 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