1.什么是数据库?
数据库是有组织的数据集合,可以从远程或本地计算机系统以数字方式进行存储和检索。数据库可能庞大而复杂,并且使用固定设计和建模方法来开发此类数据库。
2.什么是DBMS?
DBMS代表数据库管理系统。DBMS是负责创建,检索,更新和管理数据库的系统软件。通过充当数据库与其最终用户或应用程序软件之间的接口,它可以确保我们的数据是一致的,有条理的,并且易于访问。
3.什么是RDBMS?与DBMS有何不同?
RDBMS代表关系数据库管理系统。与DBMS相比,这里的主要区别在于RDBMS以表集合的形式存储数据,并且可以在这些表的公共字段之间定义关系。大多数现代数据库管理系统(例如MySQL,Microsoft SQL Server,Oracle,IBM DB2和Amazon Redshift)都基于RDBMS。
4.什么是SQL?
SQL代表结构化查询语言。它是关系数据库管理系统的标准语言。在处理由实体(变量)组成的组织数据以及数据的不同实体之间的关系时,它特别有用。
5. SQL和MySQL有什么区别?
SQL是用于检索和操作结构化数据库的标准语言。相反,MySQL是用于管理SQL数据库的关系数据库管理系统,例如SQL Server,Oracle或IBM DB2。
6.什么是表格和字段?
表格是以行和列的形式存储的数据的有组织的集合。列可以分类为垂直,行可以分类为水平。表中的列称为字段,而行可称为记录。
7. SQL中的约束是什么?
约束用于指定有关表中数据的规则。在创建表期间或使用ALTER TABLE命令创建表之后,可以将其应用于SQL表中的单个或多个字段。约束是:
- NOT NULL –限制将NULL值插入列中。
- 检查–验证字段中的所有值均满足条件。
- 默认值–如果未为该字段指定值,则自动分配默认值。
- 唯一–确保将唯一值插入到字段中。
- INDEX –为字段提供索引,可以更快地检索记录。
- PRIMARY KEY –唯一标识表中的每个记录。
- FOREIGN KEY –确保另一个表中记录的引用完整性。
8.什么是主键?
PRIMARY KEY约束唯一地标识表中的每一行。它必须包含UNIQUE值,并且具有隐式NOT NULL约束。
SQL中的表严格限制为只有一个主键,该主键由单个或多个字段(列)组成。
CREATE TABLE Students ( /* Create table with a single field as primary key */
ID INT NOT NULL
Name VARCHAR(255)
PRIMARY KEY (ID)
);
CREATE TABLE Students ( /* Create table with multiple fields as primary key */
ID INT NOT NULL
LastName VARCHAR(255)
FirstName VARCHAR(255) NOT NULL,
CONSTRAINT PK_Student
PRIMARY KEY (ID, FirstName)
);
ALTER TABLE Students /* Set a column as primary key */
ADD PRIMARY KEY (ID);
ALTER TABLE Students /* Set multiple columns as primary key */
ADD CONSTRAINT PK_Student /*Naming a Primary Key*/
PRIMARY KEY (ID, FirstName);
9.什么是UNIQUE约束?
UNIQUE约束确保列中的所有值都不同。这为列提供了唯一性,并有助于唯一地标识每一行。与主键不同,每个表可以定义多个唯一约束。UNIQUE的代码语法与PRIMARY KEY的语法非常相似,可以互换使用。
CREATE TABLE Students ( /* Create table with a single field as unique */
ID INT NOT NULL UNIQUE
Name VARCHAR(255)
);
CREATE TABLE Students ( /* Create table with multiple fields as unique */
ID INT NOT NULL
LastName VARCHAR(255)
FirstName VARCHAR(255) NOT NULL
CONSTRAINT PK_Student
UNIQUE (ID, FirstName)
);
ALTER TABLE Students /* Set a column as unique */
ADD UNIQUE (ID);
ALTER TABLE Students /* Set multiple columns as unique */
ADD CONSTRAINT PK_Student /* Naming a unique constraint */
UNIQUE (ID, FirstName);
10.什么是外键?
一个FOREIGN KEY由一个表中的单个或字段集合组成,该表实质上是引用另一个表中的PRIMARY KEY。外键约束确保两个表之间关系的引用完整性。
具有外键约束的表被标记为子表,包含候选键的表被标记为引用表或父表。
CREATE TABLE Students ( /* Create table with foreign key - Way 1 */
ID INT NOT NULL
Name VARCHAR(255)
LibraryID INT
PRIMARY KEY (ID)
FOREIGN KEY (Library_ID) REFERENCES Library(LibraryID)
);
CREATE TABLE Students ( /* Create table with foreign key - Way 2 */
ID INT NOT NULL PRIMARY KEY
Name VARCHAR(255)
LibraryID INT FOREIGN KEY (Library_ID) REFERENCES Library(LibraryID)
);
ALTER TABLE Students /* Add a new foreign key */
ADD FOREIGN KEY (LibraryID)
REFERENCES Library (LibraryID);
11.什么是加入?列出其不同类型。
SQL Join子句用于根据SQL数据库中两个或多个表之间的相关列来组合记录(行)。
- (内部)联接:检索联接所涉及的两个表中具有匹配值的记录。这是查询中广泛使用的联接。
- SELECT FROM Table_A JOIN Table_B; SELECT FROM Table_A INNER JOIN Table_B;
- 左(外部)联接:从左侧检索所有记录/行,并从右侧表检索匹配的记录/行。SELECT* FROM Table_A A左联接Table_B B ON A.col = B.col;
- 右(外)联接:从右表检索所有记录/行,从左表检索匹配的记录/行。SELECT * FROM Table_A A右联接Table_B B ON A.col = B.col;
- FULL(OUTER)JOIN:检索左表或右表中有匹配项的所有记录。SELECT* FROM Table_A A FULL JOIN Table_B B ON A.col = B.col;
12.什么是自加入?
自我联接是常规联接的一种情况,其中表根据其自身列之间的某种关系而联接至自身。自联接使用INNER JOIN或LEFT JOIN子句,并且表别名用于为查询中的表分配不同的名称。
SELECT A.emp_id AS "Emp_ID",A.emp_name AS "Employee",
B.emp_id AS "Sup_ID",B.emp_name AS "Supervisor"
FROM employee A, employee B
WHERE A.emp_sup = B.emp_id;
## 13。什么是交叉加入?交叉联接可以定义为联接中包含的两个表的笛卡尔乘积。联接后的表包含的行数与两个表中的行数的叉积相同。如果在交叉联接中使用WHERE子句,则查询将像INNER JOIN一样工作。
SELECT stu.name, sub.subject
FROM students AS stu
CROSS JOIN subjects AS sub;
14.什么是索引?解释其不同类型。
数据库索引是一种数据结构,可以快速查找表的一个或多个列中的数据。它以额外的写入和内存维护索引数据结构为代价,提高了从数据库表访问数据的操作速度。
CREATE INDEX index_name /* Create Index */
ON table_name (column_1, column_2);
DROP INDEX index_name; /* Drop Index */
15.聚集索引和非聚集索引有什么区别?
如上所述,差异可以分为三个小因素-
- 聚集索引修改了基于索引列的记录在数据库中的存储方式。非聚集索引在表内创建了一个引用原始表的单独实体。
- 聚集索引用于轻松,快速地从数据库中检索数据,而从非聚集索引中获取记录则相对较慢。
- 在SQL中,表可以具有单个聚集索引,而表可以具有多个非聚集索引。
16.什么是数据完整性?
数据完整性是数据在整个生命周期中准确性和一致性的保证,并且是设计,实现和使用存储,处理或检索数据的任何系统的关键方面。它还定义了完整性约束,以在将数据输入到应用程序或数据库中时对数据执行业务规则。
17.什么是查询?
查询是从数据库表或表组合中获取数据或信息的请求。数据库查询可以是选择查询或动作查询。
SELECT fname, lname /* select query */
FROM myDb.students
WHERE student_id = 1;
UPDATE myDB.students /* action query */
SET fname = 'Captain', lname = 'America'
WHERE student_id = 1;
18.什么是子查询?它是什么类型?
子查询是另一个查询内的查询,也称为嵌套查询或内部查询。它用于限制或增强主查询要查询的数据,从而分别限制或增强主查询的输出。例如,在这里,我们获取已注册数学课程的学生的联系信息:
SELECT name, email, mob, address
FROM myDb.contacts
WHERE roll_no IN (
SELECT roll_no
FROM myDb.students
WHERE subject = 'Maths');
子查询有两种类型-关联和不关联。
- 相关子查询不能视为独立查询,但可以引用主查询的FROM中列出的表中的列。
- 可以将不相关的子查询视为独立查询,并将子查询的输出替换为主查询中的子查询。
19.什么是SELECT语句?
SQL中的SELECT运算符用于从数据库中选择数据。返回的数据存储在结果表中,称为结果集。
SELECT * FROM myDB.students;
20. SQL中的SELECT查询使用哪些常见子句?
与SELECT查询结合使用的一些常见SQL子句如下:
- SQL中的WHERE子句用于根据特定条件过滤必要的记录。
- SQL中的ORDER BY子句用于根据某些字段以升序(ASC)或降序(DESC)对记录进行排序。
- SQL中的GROUP BY子句用于对具有相同数据的记录进行分组,并且可以与某些聚合函数结合使用,以从数据库中生成汇总结果。
- SQL中的HAVING子句与GROUP BY子句一起用于过滤记录。它与WHERE不同,因为WHERE子句无法过滤聚合记录。
- 子句中的每个SELECT语句必须具有相同的列数
- 这些列还必须具有相似的数据类型
- 每个SELECT语句中的列必须具有相同的顺序
- 在任何变量声明之后,声明一个游标。游标声明必须始终与SELECT语句关联。
- 打开游标以初始化结果集。在从结果集中获取行之前,必须先调用OPEN语句。
- FETCH语句检索并移至结果集中的下一行。
- 调用CLOSE语句以停用游标。
- 最后,使用DEALLOCATE语句删除游标定义并释放关联的资源。
- 一对一–可以定义为两个表之间的关系,其中一个表中的每个记录与另一个表中的一个记录的最大值相关联。
- 一对多和多对一–这是最常用的关系,其中一个表中的一条记录与另一个表中的多条记录相关联。
- 多对多–在需要双方都需要多个实例来定义关系的情况下使用。自引用关系–在表需要定义与其自身的关系时使用。