1.什么是数据库?
数据库是组织形式的信息的集合,用于替换,更好地访问,存储和操纵。
也可以将其定义为表,架构,视图和其他数据库对象的集合。数据仓库是指来自多个信息源的中央数据存储库。
这些数据经过整合,转换,可用于采矿和在线处理。表是一种数据库对象,用于以保留数据的列和行的形式将记录存储在并行中。4.什么是数据库中的细分?
数据库表中的分区是分配用于在表中存储特定记录的空间。记录(也称为数据行)是表中相关数据的有序集合。列是表中的垂直实体,包含与表中特定细分关联的所有信息。数据库管理系统是程序的集合,使用户能够存储,检索,更新和删除数据库中的信息。DBMS有两种类型:
1.关系数据库管理系统(RDBMS)
2.非关系数据库管理系统RDBMS代表- [R elational d atabase中号anagement小号ystem。
RDBMS是基于关系模型的数据库管理系统(DBMS)。
可以使用结构化查询语言(SQL)访问关系数据库中的数据Oracle,MySQL,Microsoft SQL Server,PostgreSQL,
Sybase,MongoDB,DB2和Microsoft Access等,SQL概述:SQL代表结构化查询语言。它是美国国家标准协会(ANSI)的标准。
它是用于访问和操作数据库的标准语言。
使用SQL,我们可以做的一些动作是创建数据库,表,存储过程(SP),
执行查询,针对数据库检索,插入,更新,删除数据。SQL命令分为以下几种类型:
DDL –数据定义语言
DML –数据处理语言
DQL –数据查询语言
DCL –数据控制语言
TCL –交易控制语言DDL命令用于定义或更改数据库的结构。
CREATE:创建数据库和数据库对象
ALTER:更改现有的数据库对象
DROP:删除数据库和数据库对象
TRUNCATE:从表中删除所有记录,但不删除其数据库结构
RENAME:重命名数据库对象
DML命令用于管理数据库中存在的数据。
SELECT:从数据库中选择特定数据
INSERT:将新记录插入表中
UPDATE:更新现有记录
DELETE:从表中删除现有记录DCL命令用于创建角色,授予权限以及控制对数据库对象的访问。
GRANT:提供用户访问权限
DENY:拒绝用户权限
REVOKE:删除用户访问权限TCL命令用于管理DML语句所做的更改。
COMMIT:将更改写入并存储到数据库
ROLLBACK:自上次提交以来还原数据库索引用于加快查询的性能。它可以更快地从表中检索数据。
可以在一个列或一组列上创建索引。索引有三种类型
1.唯一索引:唯一索引通过确保表中没有两行数据具有相同的键值来帮助维护数据完整性。定义主键时,可以自动应用唯一索引。它确保索引键列中的值是唯一的。
2.聚集索引:聚集索引对表的物理顺序进行重新排序,并根据键值进行搜索。每个表只有一个聚集索引。
3.非聚集索引:非聚集索引不会更改表的物理顺序,并且会保持数据的逻辑顺序。每个表可以具有许多非聚集索引。SQL中的聚集索引和非聚集索引之间的区别如下:
聚集索引:
用于从数据库中轻松检索数据,并且速度更快。
一个表只能有一个聚集索引
它改变了记录在数据库中的存储方式,因为它通过设置为聚集索引的列对行进行排序。
非聚集索引:
与聚集索引相比,它更慢。
一个表可以具有多个非聚集索引。
它不会改变其排序方式,但是会在一个表内创建一个单独的对象,该对象在搜索后指向原始表行。视图就像逻辑上存储在数据库中的表的子集。视图是一个虚拟表。
它包含类似于真实表的行和列。视图中的字段是来自一个或多个实际表的字段。
视图不包含自己的数据。它们用于限制对数据库的访问或隐藏数据复杂性。视图的一些优点是
视图不占空间
视图用于简单地检索需要经常执行的复杂查询的结果。
视图用于限制对数据库的访问或隐藏数据复杂性。数据库关系定义为数据库中表之间的连接。有各种数据库关系,即
1.一对一的关系
2.一对多的关系
3.多对一的关系
4.自指关系数据库查询是从数据库表或表组合中获取数据或信息的请求。
数据库查询可以是选择查询或动作查询。子查询是另一个查询中的SQL查询。它是Select语句的子集,
其返回值用于过滤主查询的条件。子查询有两种类型:
1.关联的:在SQL数据库查询中,关联的子查询是使用外部查询中的值来完成的子查询。因为相关子查询要求首先执行外部查询,所以相关子查询必须为外部查询中的每一行运行一次。也称为同步子查询。
2.不相关:不相关子查询是其中外部查询和内部查询都彼此独立的子查询。局部变量:
局部变量只能在函数内部使用或存在。这些变量未被任何其他功能使用或引用。
这些是其他功能未知的。只要调用该函数就可以创建变量。
全局变量:
全局变量可以在整个程序中使用或存在。在全局中声明的相同变量不能在函数中使用。
每当调用该函数时就无法创建全局变量。数据完整性定义了存储在数据库中的数据的准确性和一致性。
它还定义了完整性约束,以在将数据输入到应用程序或数据库中时对数据执行业务规则。这是重要的Oracle DBA面试问题之一。
自动增量关键字使用户可以创建一个唯一的数字,以便在将新记录插入表中时生成该数
字。每当使用主键时,都可以使用自动递增关键字。在Oracle中使用自动递增关键字
在SQL Server中使用IDENTITY关键字。临时表是用于临时存储数据的临时存储结构。SQL SELECT DISTINCT查询仅用于返回唯一值。它消除了所有重复的值。“Rename”是赋予表或列的永久名称
“Alias”是赋予表或列的临时名称。
join是一个查询,它从多个表中检索相关的列或行。联接的类型如下:
内部联接
左联接
正确加入
外连接内部联接:当正在比较的两个(或多个)表之间至少有一些匹配数据时,内部联接将返回行。
外部联接:外部联接从两个表返回行,这些行包括与一个或两个表不匹配的记录。SQL约束是在数据库中插入,删除或更新数据时实施一些约束的一组规则。SQL中的一些约束包括–主键,外键,唯一键,SQL非空,默认,检查和索引约束。使用唯一约束来确保字段/列中没有重复值。一个PRIMARY KEY 约束唯一标识数据库表中的记录。
参与主键约束的所有列均不得包含NULL值。简短的答案是“否”,一个表不允许包含多个主键,
但是它允许一个包含两个或更多列的复合主键。复合主键是在表中的多个列(多个字段的组合)上创建的主键。一个FOREIGN KEY是用于两个表连接在一起的关键。
一个FOREIGN KEY 的表与链接的PRIMARY KEY 另一个表。一个表可以有许多 FOREIGN KEY。一个表中应该只有一个PRIMARY KEY,而可以有任意数量的UNIQUE键。
PRIMARY KEY 不允许使用 NULL值,而Unique键则允许使用NULL值。用字段NULL值是没有值的字段。甲NULL值是从零值或包含空格的字段不同。
具有NULL值的字段是在记录创建过程中留为空白的字段。
假设表中有一个字段是可选的,并且可以在不向可选字段添加值的情况下插入记录
则该字段将以NULL值保存。如前所述,空值是没有值的字段,该值不同于零值和空格。
空值是没有值的字段。
零是数字,
空格是我们提供的值。space的ASCII值为CHAR(32)。用字段NULL值是没有值的字段。NULL值不能与其他NULL值进行比较。
因此,不可能使用比较运算符(例如=,<或<>)测试NULL值。
为此,我们必须使用IS NULL和IS NOT NULL运算符。
SELECT column_names FROM table_name WHERE column_name IS NULL;
SELECT column_names FROM table_name WHERE column_name IS NOT NULL;NOT NULL约束用于确保字段中的值不能为NULLCHECK约束用于限制一列或多列接受的值。
例如,“年龄”字段应仅包含大于18的值。
CREATE TABLE EMP_DETAILS(EmpID int NOT NULL, NAME VARCHAR (30) NOT NULL, Age INT CHECK (AGE > 18), PRIMARY KEY (EmpID)); 如果在插入记录时未提供任何值,则DEFAULT约束用于在列中包括默认值。规范化是表设计的过程,以最大程度地减少数据冗余。非规范化是一种数据库优化技术,用于提高数据库基础结构的性能。
它涉及将冗余数据添加到一个或多个表的过程。
在规范化的数据库中,我们将数据存储在单独的逻辑表中,并尝试最小化冗余数据。存储过程是已创建并存储在数据库中以执行特定任务的SQL语句的集合。
该存储过程接受输入参数并对其进行处理,并返回单个值,
例如数字或文本值或结果集(行集)。触发器是一个SQL过程,用于响应事件(插入,删除或更新)而启动操作。
当新雇员添加到Employee_Details表中时,新记录将在相关表中创建,
例如Employee_Payroll,Employee_Time_Sheet等,在SQL Server中,数据库表中的每一列都有一个名称和一种数据类型。
在创建SQL表时,我们需要决定在表的每一列中存储哪种数据类型。 真与假一个字节中可以表示的最大数字是11111111或255。
可能的值的数目是256(即255(最大的可能值)加上1(零)或2 8)。SQL Operator是保留字,主要在SQL语句的WHERE子句中使用,以执行诸如算术运算和比较之类的操作。这些用于在SQL语句中指定条件。
共有三种类型的运算符。
算术运算符、比较运算符、逻辑运算符默认情况下为1433以下是ACID的四个属性。这些保证了数据库事务的可靠处理。
原子性
一致性
隔离
耐用性SELECT INTO语句将数据从一个表复制到新表中。将使用旧表中定义的列名和类型创建新表。您可以使用AS子句创建新的列名称。SELECT * INTO newtable FROM oldtable WHERE condition;Delete,Truncate和Drop命令之间的区别是
Delete命令是DML命令,用于从表中删除行。可以回滚。
Truncate是DDL命令,用于删除表中的所有行并释放包含表的空间。它不能回滚。
Drop是DDL命令,它会删除完整的数据以及表结构(与truncate命令仅删除行不同)。所有表的行,索引和特权也将被删除。Delete和Truncate之间的区别是
删除 | 截短 |
|---|---|
Delete语句用于从表中删除行。可以回滚。 | Truncate语句用于删除表中的所有行并释放包含表的空间。它不能回滚。 |
我们可以在DELETE语句中使用WHERE条件,并可以删除所需的行 | 我们不能在TRUNCATE语句中使用WHERE条件。因此,我们不能仅删除必需的行 |
我们可以使用DELETE删除特定的行 | 我们只能使用TRUNCATE一次删除所有行 |
删除是DML命令 | 截断是DDL命令 |
删除维护日志,并且性能比截断慢 | 截断可最大限度地减少日志并提高性能 |
我们需要对Table具有DELETE权限才能使用DELETE命令 | 我们至少需要对表具有ALTER权限才能使用TRUNCATE命令 |
这是棘手的SQL面试问题之一。采访者可能以另一种方式问您这个问题,因为“全联盟”优于“全联盟”有什么优势。
Union和Union All都将两个表的结果连接在一起,但是这两个查询处理重复表的方式不同。
联合:省略重复的记录,仅返回两个或多个select语句的不同结果集。
全部合并: 返回不同选择语句结果集中的所有行,包括重复项。
在性能方面,Union All比Union更快,因为Union All不会删除重复项。联合查询检查重复值,这会花费一些时间来删除重复记录。
假定:表1有10条记录,表2 有10条记录。两个表中的最后一条记录是相同的。
如果运行联合查询。
SELECT * FROM Table1UNIONSELECT * FROM Table2
输出:共19条记录
如果运行联合查询。
SELECT * FROM Table1UNION ALLSELECT * FROM Table2
输出:共20条记录
两个表中所有列的数据类型应相同。SQL CLAUSE通过为SQL查询提供条件来帮助限制结果集。
CLAUSE有助于从整个记录集中过滤行。SQL子句在哪里和拥有。Where子句用于从指定特定条件的数据库中获取数据,而Haveing子句
与“ GROUP BY”一起使用以获取符合Aggregate函数指定的特定条件的数据。
Where子句不能与Aggregate函数一起使用,但是Haveing子句可以。SQL聚合函数返回单个值,该值是根据列中的值计算得出的。
SQL中的一些汇总函数如下
AVG()–此函数返回平均值
COUNT()–此函数返回行数
MAX()–此函数返回最大值
MIN()–此函数返回最小值
ROUND()–此函数将数字字段舍入为指定的小数位数
SUM()–此函数返回总和SQL字符串函数主要用于字符串操作。
一些广泛使用的SQL字符串函数是
LEN()–返回文本字段中值的长度
LOWER()–将字符数据转换为小写
UPPER()–将字符数据转换为大写
SUBSTRING()–它从文本字段中提取字符
LTRIM()–从字符串开头删除所有空格
RTRIM()–删除字符串末尾的所有空格
CONCAT()–串联函数将多个字符串组合在一起
REPLACE()–更新字符串的内容。顾名思义,这些是由用户根据其要求编写的。
用户定义的函数是编写为在需要时使用逻辑的函数。用户定义的函数有三种类型,即
•标量函数
•内联表值函数
•多语句值函数
标量函数返回单位,变体定义了return子句。
内联表值函数和多语句值函数以返回表的形式返回表。自联接是表与自身联接的联接,特别是当表具有引用其自己的主键的外键时。如果未与交叉联接一起使用WHERE子句,则交叉联接将产生一个结果集
该结果集是第一个表中的行数乘以第二个表中的行数。
这种结果称为笛卡尔积。如果假设在交叉联接中使用Where子句
则查询将像内部联接一样工作。归类定义为一组规则,这些规则确定如何对字符数据进行排序和比较。
使用定义正确字符序列的规则以及用于指定区分大小写,字符宽度,重音符号,
假名字符类型的选项对字符数据进行排序。排序规则敏感性的不同类型如下
:区分大小写:A和a以及B和b。
假名敏感性:日语假名字符。
宽度灵敏度:单字节字符和双字节字符。
口音敏感度。
实用的SQL查询面试问题(带有答案的SQL Server查询示例)
在这一部分中,我们将看到SQL实践问题,其中包含复杂的SQL查询面试问题和基本的SQL面试问题。
让我们看一下重要的SQL查询以进行面试通过使用DISTINCT关键字,我们可以从表中获得唯一记录
SELECT DISTINCT Col1, Col2 from Table1 提取字符串的前5个字符的一些方法如下:
SELECT RIGHT(EmpName,5) AS EmployeeName FROM Employee
SELECT SUBSTRING(EmpName,1,5) AS EmployeeName FROM EmployeeEmployee_Name:yuhan,工资:5500,年龄:29?
INSERT into Employee_Details (Employee_Name, Salary, Age) VALUES (‘yuhan’, 5500 , 29); ALTER TABLE Employee_Details ADD (Salary); UPDATE Employee_Details set Salary = 7500 where Employee_Name = ‘yuhan’;Select * from table_name; 查看特定数据库上可用的表
USE TestDBGOSELECT * FROM sys.TablesGO SQL Delete语句用于从表中删除记录。
DELETE FROM table_name WHERE some_column=some_value; DELETE from Players WHERE Player_Name = ‘Sachin’ 通过使用DISTINCT关键字,我们每个名字只能获得一次。
SELECT DISTINCT employee_name FROM employee_table; 通过使用SQL AS关键字
SELECT column_name AS new_name FROM table_name; SQL SELECT语句的顺序如下
选择,从,在哪里,分组依据,拥有,订购依据。在SQL中,有一个名为GetDate()的内置函数,该函数有助于返回当前日期。SELECT FirstName, LastName FROM Employee_Details; SP_RENAME TABLE 'SCOREBOARD', 'OVERALLSCORE'
重命名表名和列名
sp_rename OldTableName,NewTableName
sp_rename 'TableName.OldColumnName', 'NewColumnName'
要从表中选择所有偶数记录:
Select * from table where id % 2 = 0 要从表中选择所有奇数记录:
Select * from table where id % 2 != 0 SQL Case语句允许在SELECT语句中嵌入if-else like子句。select case when null = null then 'True' else 'False' end as Result;
该查询返回“ False”。在上述问题中,我们可以看到null = null不是比较null值的正确方法。为了将一个值与null进行比较,我们在SQL中使用IS运算符。
所以正确的方法如下
select case when null is null then 'True' else 'False' end as Result;
select case when null is null then 'Queries In SQL Server' else 'Queries In MySQL' end as Result;
该查询将返回“ SQL Server中的查询”。单行注释:单行注释以两个连续的连字符(–)开头,并以该行的结尾结束。
多行注释:多行注释以/*开头,并以*/结尾。/*和*/之间的任何文本都将被忽略。这三个功能以相同的方式工作。这些函数用于将NULL值替换为另一个值。Oracle开发人员使用NVL函数,MySQL开发人员使用IFNULL函数,而SQL Server开发人员使用ISNULL函数。
假设列中的某些值是NULL。
如果在下面的语句中运行,则结果为NULL
SELECT col1 * (col2 + col3) FROM Table1
假设col3中的任何值为NULL,那么正如我所说的,您的结果将为NULL。
为了克服这个问题,我们使用NVL()函数,IFNULL()函数,ISNULL()函数。
甲骨文:
SELECT col1 * (col2 + NVL(col3,0)) FROM Table1
MySQL:
SELECT col1 * (col2 + IFNULL(col3,0)) FROM Table1
另外,您可以使用COALESCE()函数
SELECT col1 * (col2 + COALESCE(col3,0)) FROM Table1
SQL Server:
SELECT col1 * (col2 + ISNULL(col3,0)) FROM Table1 它是AKA后端测试或数据测试。
数据库测试涉及验证前端数据与后端数据的完整性。
它验证架构,数据库表,列,索引,存储过程,触发器,数据重复,孤立记录,垃圾记录。
它涉及更新数据库中的记录并在前端进行验证。GUI测试是AKA用户界面测试或前端测试。
数据库测试是AKA后端测试或数据测试。
GUI测试处理向用户开放以进行交互的所有可测试项目,例如菜单,窗体等。
数据库测试处理通常对用户隐藏的所有可测试项目。
正在执行GUI测试的测试人员无需了解结构化查询语言
正在执行数据库测试的测试人员无需了解结构化查询语言
GUI测试包括使文本框,复选框,按钮,下拉菜单,表单等无效,主要是整个应用程序的外观
数据库测试涉及验证前端数据的完整性和后端数据的完整性结束。它验证架构,数据库表,列,索引,存储过程,触发器,数据重复,孤立记录,垃圾记录。它涉及更新数据库中的记录并在前端进行验证。