0%

数据库-面试题

1、事务的四大特性是什么?

  • 原子性,要么执行,要么不执行
  • 隔离性,所有操作全部执行完以前其它会话不能看到过程
  • 一致性,事务前后,数据总额一致
  • 持久性,一旦事务提交,对数据的改变就是永久的

PS:sql语句

sql对大小写不敏感。

1.SQL DML 和 DDL

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

select语句

从表中选取数据

1
2
3
SELECT 列名称,列名称 FROM 表名称
SELECT * FROM 表名称//星号(*)是选取所有列的快捷方式。

distinct语句

关键词 DISTINCT 用于返回唯一不同的值。

1
SELECT DISTINCT 列名称 FROM 表名称

where

WHERE 子句用于规定选择的标准

1
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

and和or运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

1
2
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'/*使用圆括号来组成复杂的表达式*/

order by

ORDER BY 语句用于对结果集进行排序。

例如:

1
2
3
4
5
6
/*按照company名字进行升序排序*/
SELECT Company, OrderNumber FROM Orders ORDER BY Company
/*以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber*/
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
/*desc是降序*/
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

insert into

INSERT INTO 语句用于向表格中插入新的行。

1
2
3
4
5
/*(值1, 值2,....)构成新的一行*/
INSERT INTO 表名称 VALUES (值1, 值2,....)
/*指定所要插入数据的列*/
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

update

修改列值

1
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

delete

删除表中的

1
2
3
DELETE FROM 表名称 WHERE 列名称 =
/*删除所有行*/
DELETE * FROM table_name

top

1
2
3
4
/*选取头两条记录*/
SELECT TOP 2 * FROM Persons
/*选取50%记录*/
SELECT TOP 50 PERCENT * FROM Persons

like

用在where子句中搜索列中的指定模式

1
2
3
/*从 "Persons" 表中选取居住在以 "N" 开始的城市里的人*/
SELECT * FROM Persons
WHERE City LIKE 'N%'

“%” 可用于定义通配符(模式中缺少的字母)。

SQL 通配符必须与 LIKE 运算符一起使用。

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
1
2
3
/*从 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人*/
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'

in

IN 操作符允许我们在 WHERE 子句中规定多个值。

1
2
3
/*选取姓氏为 Adams 和 Carter 的人*/
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')

alias(别名-AS)

1
2
SELECT column_name AS alias_name
FROM table_name

join

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

inner join(内连接)

INNER JOIN 与 JOIN 是相同的。

1
2
3
4
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

没有匹配的话,就不会返回行了

同理:left join…

union

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

1
2
3
4
/*列出所有在中国和美国的不同的雇员名*/
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

union只会选择出不同值,union all会选择出所有值(包括了两个表之间的共同值)

union合并需要UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型

select into

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

1
2
3
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
1
2
3
4
5
/*从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表*/
SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'

create

1
2
3
4
5
6
7
8
CREATE DATABASE database_name
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
create table train(
TID int,
SDate date,
TName char(20),
SStationID int,
AStationID int,
STime datetime,
ATime datetime,
constraint PK_train primary key (TID),
constraint UK_date_tname unique(SDate,TName),
constraint FK_train_SStationId foreign key(SStationID) REFERENCES station(SID),
constraint FK_train_AStationId foreign key(AStationID) REFERENCES station(SID)
);

constraints

约束用于限制加入表的数据的类型。

可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

  • NOT NULL

  • UNIQUE

    • ```sql
      /当表已经被创建时添加约束/
      ALTER TABLE Persons
      ADD UNIQUE (Id_P)
      /添加多个约束/
      ALTER TABLE Persons
      ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12



      - PRIMARY KEY

      - UNIQUEPRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

      - 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

      - ```sql
      ALTER TABLE Persons
      ADD PRIMARY KEY (Id_P)
  • FOREIGN KEY

    • CREATE TABLE Orders
      (
      Id_O int NOT NULL,
      OrderNo int NOT NULL,
      Id_P int,
      PRIMARY KEY (Id_O),
      FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
      )
      /*在已存在的情况下创建约束*/
      ALTER TABLE Orders
      ADD FOREIGN KEY (Id_P)
      REFERENCES Persons(Id_P)
      /*撤销相关的约束*/
      ALTER TABLE Orders
      DROP FOREIGN KEY fk_PerOrders
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22

      - CHECK

      - CHECK 约束用于限制列中的值的范围。

      如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

      如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

      ```sql
      CREATE TABLE Persons
      (
      Id_P int NOT NULL,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255),
      CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
      )
      /*撤销check约束*/
      ALTER TABLE Persons
      DROP CHECK chk_Person
  • DEFAULT

    • DEFAULT 约束用于向列中插入默认值。

    • ```sql
      CREATE TABLE Persons
      (
      Id_P int NOT NULL,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255) DEFAULT ‘Sandnes’
      )

      SQL View
      SQL Date
      SQL Nulls
      SQL isnull()
      SQL 数据类型
      SQL 服务器
      SQL 函数
      SQL functions
      SQL avg()
      SQL count()
      SQL first()
      SQL last()
      SQL max()
      SQL min()
      SQL sum()
      SQL Group By
      SQL Having
      SQL ucase()
      SQL lcase()
      SQL mid()
      SQL len()
      SQL round()
      SQL now()
      SQL format()
      SQL 总结
      SQL 快速参考
      SQL 教程总结
      SQL 测验
      SQL 测验
      建站手册
      网站构建
      万维网联盟 (W3C)
      浏览器信息
      网站品质
      语义网
      职业规划
      网站主机
      编程
      Python 教程
      关于 W3School
      帮助 W3School
      SQL DEFAULT 约束
      SQL Check
      SQL Create Index
      SQL DEFAULT 约束
      DEFAULT 约束用于向列中插入默认值。

      如果没有规定其他的值,那么会将默认值添加到所有的新记录。

      SQL DEFAULT Constraint on CREATE TABLE
      下面的 SQL 在 “Persons” 表创建时为 “City” 列创建 DEFAULT 约束:

      My SQL / SQL Server / Oracle / MS Access:
      CREATE TABLE Persons
      (
      Id_P int NOT NULL,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255) DEFAULT ‘Sandnes’
      )
      通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

      CREATE TABLE Orders
      (
      Id_O int NOT NULL,
      OrderNo int NOT NULL,
      Id_P int,
      OrderDate date DEFAULT GETDATE()
      )
      SQL DEFAULT Constraint on ALTER TABLE
      /在表已存在的情况下为 “City” 列创建 DEFAULT 约束/
      ALTER TABLE Persons
      ALTER City SET DEFAULT ‘SANDNES’
      /需撤销 DEFAULT 约束/
      ALTER TABLE Persons
      ALTER City DROP DEFAULT

      1
      2
      3
      4
      5
      6
      7
      8
      9

      ### index

      在表中创建索引

      ```sql
      /*允许使用重复的值*/
      CREATE INDEX index_name
      ON table_name (column_name)

View

视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

视图的作用:

  1. 简化了操作,把经常使用的数据定义为视图,可以将复杂的SQL查询语句进行封装。
  2. 安全性,用户只能查询和修改能看到的数据。
    • 使用视图,基表中的数据就有了一定的安全性。因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以不通过视图将基表中重要的字段信息给用户。视图是动态的数据的集合,数据是随着基表的更新而更新的。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
  3. 逻辑上的独立性,屏蔽了真实表的结构带来的影响。