快捷搜索:  汽车  科技

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)面试官:查询姓“猴”的学生名单。1.简单查询开始正式的面试题之前,我们先来创建一个数据库school,并在数据库school中创建以下四个表,并设置好主键:如果忘记了怎么操作,请参见:何书365:轻松搞定数据分析之SQL——零基础入门接下来,本轮面试正式开始,action !

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(1)

要说近几年最火的职业之一,肯定少不了数据分析师。正如大部分公司招聘需求上都写着“熟练掌握SQL语言”一样,所有想做数据分析师的求职者简历中,技能一栏一定都写着SQL!

学习一门技能,最重要的是最后能不能运用到你的面试和工作当中。如果你要和我说你很佛系,就是享受学习的过程,学着玩儿,那我只能叫你一声大神了……

那么到底怎么知道自己的SQL水平能不能满足达到面试官的要求并且通过面试呢?

今天,我们来看一些常见的SQL面试题。从基础到高级,层层递进,不要慌,稳住,offer就是你的!

开始正式的面试题之前,我们先来创建一个数据库school,并在数据库school中创建以下四个表,并设置好主键:

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(2)

如果忘记了怎么操作,请参见:何书365:轻松搞定数据分析之SQL——零基础入门

接下来,本轮面试正式开始,action !

★案例篇:

1.简单查询

面试官:查询姓“猴”的学生名单。

SELECT * from student where 姓名 like '猴%'; -- like 模糊查询,%表示任意字符串。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(3)

面试官:查询姓名中最后一个字是“猴”的学生名单。

select * from student where 姓名 like '%猴'; -- like 模糊查询,%表示任意字符串。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(4)

面试官:查询姓名中带“猴”的学生名单。

select * from student where 姓名 like '%猴%'; -- like 模糊查询,%表示任意字符串。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(5)

面试官:查询有多少位姓“孟”的老师。

select COUNT(教师号) -- COUNT函数计数,返回符合指定条件的行数,教师号是主键,具有唯一性。 from teacher where 教师姓名 like '孟%'; -- like 模糊查询,%表示任意字符串。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(6)

2.汇总分析

面试官:查询课程编号为“0002的总成绩”。

select sum(成绩) -- sum函数汇总求和。 from score where 课程号 = '0002'; -- 对求和条件进行指定。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(7)

面试官:查询选了课程的学生人数。

select count(distinct 学号) AS 学生人数 -- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from score where 课程号 is not null; -- 对求和条件进行指定,学生选了课程,课程号不空。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(8)

面试官:查询各科成绩最高和最低的分。

select 课程号 min(成绩) AS 最高成绩 max(成绩) as 最低成绩 -- MIN() 函数返回所选列的最小值,MAX() 函数返回所选列的最大值。 from score GROUP BY 课程号; -- 根据一个或多个列对结果集进行分组。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(9)

面试官:查询每门课程被选修的学生数。

select 课程号 COUNT(DISTINCT 学号) as 学生人数 -- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from score GROUP BY 课程号; -- 根据一个或多个列对结果集进行分组。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(10)

面试官:查询学生中男生、女生人数。

select 性别 COUNT(distinct 学号) as 学生人数 -- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from student GROUP BY 性别; -- 根据一个或多个列对结果集进行分组。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(11)

面试官:查询平均成绩大于60分的学生的学号和平均成绩。

select 学号 avg(成绩) as 平均成绩 -- avg函数返回数字列的平均值。 from score group by 学号 -- 根据一个或多个列对结果集进行分组。 having 平均成绩>60; -- 对分组结果指定条件。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(12)

面试官:查询至少选修两门课程的学生学号。

select 学号 COUNT(DISTINCT 课程号) as 选修课程数-- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from score group by 学号 -- 根据一个或多个列对结果集进行分组。 having 选修课程数>=2; -- 对分组结果指定条件。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(13)

面试官:查询同名同姓(相同姓名)学生名单并统计人数。

select 姓名 COUNT(distinct 学号) as 学生人数-- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from student group by 姓名 -- 根据一个或多个列对结果集进行分组。 having 学生人数>=2;-- 对分组结果指定条件。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(14)

面试官:查询不及格的课程并按课程号从大到小排列。

select 课程号 成绩-- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from score where 成绩<60 ORDER BY 课程号 DESC;-- 对需要排序的列按升序(ASC)或降序(DESC)排列。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(15)

面试官:查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列。

select 课程号 avg(成绩) as 平均成绩-- avg函数返回数字列的平均值。 from score GROUP BY 课程号 ORDER BY 平均成绩 ASC 课程号 DESC;-- 对需要排序的列按升序(ASC)或降序(DESC)排列。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(16)

面试官:检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列。

select 学号 成绩 from score where 课程号='0004'and 成绩<60 -- 指定查询条件 ORDER BY 成绩 DESC;-- 对需要排序的列按升序(ASC)或降序(DESC)排列。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(17)

面试官:统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序。

select 课程号 COUNT(DISTINCT 学号) as 选修人数-- COUNT(DISTINCT column_name) 删除重复值再计数,as 对列取别名。 from score GROUP BY 课程号 -- 根据一个或多个列对结果集进行分组。 having 选修人数>2 -- 对分组结果指定条件。 ORDER BY 选修人数 DESC 课程号 ASC;-- 对需要排序的列按升序(ASC)或降序(DESC)排列。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(18)

面试官:查询一门以上不及格课程的同学的学号,以及不及格课程及其平均成绩。

select 学号 课程号 as 不及格课程 avg(成绩) as 平均成绩 from score where 成绩<60 -- 指定查询条件 GROUP BY 学号 -- 根据一个或多个列对结果集进行分组。 HAVING COUNT(不及格课程)>=1; -- 对分组结果指定条件

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(19)

3.复杂查询

面试官:查询所有门课程成绩都小于60分学生的学号、姓名。

/*第一步:这道题查询所有成绩小于60分的学生的学号,要从score表里面查; 第二步:查询结果显示学号、姓名。姓名要根据学号在student表中查; 所以涉及到两个表,考虑到子查询或表的联结。这里面两种方法均给出*/ -- 方法一:子查询 SELECT 学号 姓名 FROM student as s1 -- 将表明名为s1 WHERE 学号 in ( SELECT 学号 FROM score as s2 -- 将表明名为s2 WHERE s1.学号 = s2.学号 GROUP BY 学号 HAVING MAX(成绩)<60) ; -- 方法二:表的联结 select s2.学号 s1.姓名 from score as s2 LEFT JOIN student as s1 on s1.学号=s2.学号 GROUP BY s2.学号 having SUM( case when 成绩 >=60 then 1 else 0 end )=0;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(20)

面试官:查询没有学全所有课的学生的学号、姓名。

-- 方法一:子查询 select 学号 姓名 from student where 学号 in( select 学号 from score group by 学号 having count(DISTINCT 课程号) < (select count(DISTINCT 课程号) from course) ); -- 方法二:表的联结 select s2.学号 s1.姓名 from score as s2 LEFT JOIN student as s1 on s1.学号=s2.学号 GROUP BY s2.学号 having COUNT(DISTINCT 课程号)<(select count(DISTINCT 课程号) from course);

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(21)

面试官:查询出只选修了两门课程的全部学生的学号和姓名。

-- 方法一:子查询 select 学号 姓名 from student where 学号 in( select 学号 from score group by 学号 having count(DISTINCT 课程号) =2 );-- 子查询 -- 方法二:表的联结 select s2.学号 s1.姓名 from score as s2 LEFT JOIN student as s1 -- 左联结 on s1.学号=s2.学号 GROUP BY s2.学号 having COUNT(DISTINCT 课程号)=2;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(22)

面试官:查找1990年出生的学生名单。

select 学号 姓名 from student where year(出生日期)=1990; -- 日期函数,year()获取日期的年份。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(23)

面试官:topN问题

工作中会经常遇到这样的业务问题:

如何找到每个类别下用户最喜欢的产品是哪个?

如果找到每个类别下用户点击最多的5个商品是什么?

这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。

面对该类问题,如何解决呢?

面试题1:按课程号分组取成绩最大值所在行的数据。

SELECT * from score as a where 成绩=( select MAX(成绩) from score as b where a.课程号=b.课程号 GROUP BY 课程号); -- 子查询

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(24)

查询结果课程号“0001”有2行数据,是因为最大成绩80有2个

面试题2:按课程号分组取成绩最小值所在行的数据。

SELECT * from score as a where 成绩=( select MIN(成绩) from score as b where a.课程号=b.课程号 GROUP BY 课程号); -- 子查询

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(25)

面试题3:查询各科成绩前两名的记录。

/*对于查询按某个分组条件分组的前n个数据的情况,即topN(N>=1)的情况,一般有以下方法: 1.如果结果集比较小,可以用程序查询单个分组结果后拼凑,则可使用 UNION ALL; 2.相关子查询; 3.利用窗口函数*/ -- union all (SELECT * from score where 课程号='0001' ORDER BY 成绩 DESC LIMIT 2) UNION ALL -- 表的加法 (SELECT * FROM SCORE where 课程号='0002' ORDER BY 成绩 DESC limit 2) union all (select * from score where 课程号='0003' GROUP BY 成绩 DESC limit 2); -- 相关子查询 select * from score as a where 2>(select count(*)from score where 课程号=a.课程号 and 成绩>a.成绩) ORDER BY a.课程号 a.成绩; -- 利用窗口函数 select * from (select * row_number() over (partition by 课程号 order by 成绩 desc) as ranking from score) as a where ranking ‹= 2;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(26)

4.多表查询

面试官:下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”,请问不是近视眼的学生都有谁?(“学生表”中的学号与“近视学生表”中的学生学号一一对应。)

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(27)

-- 为了更好的学习体验,建议先在数据库上新建这两张表,并插入数据。 select s1.姓名 as 不近视眼的学生名单 from 学生表 as s1 LEFT JOIN 近视学生表 as s2 -- 左联结 on s1.学号=s2.学生学号 -- 联结条件 where s2.学生学号 is NULL;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(28)

面试官:某网站包含两个表,顾客姓名表(表名Customers)和 购买记录表(表名Orders)。找出所有从不订购任何东西的客户。(“顾客姓名表”中的ID与“购买记录”表中的CustomerId一一对应。)

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(29)

-- 为了更好的学习体验,建议先在数据库上新建这两张表,并插入数据。 SELECT c.Name as Customers from customers as c LEFT JOIN orders as o -- 左联结 on c.ID = o.CustomerId where o.CustomerId is NULL;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(30)

面试官:下面还是回到最开始的school数据库(4张表),查询所有学生的学号、姓名、选课数、总成绩。

SELECT s1.学号 s1.姓名 COUNT(s2.课程号) as 选课数 SUM(s2.成绩) as 总成绩 FROM student as s1 LEFT JOIN score as s2 ON s1.学号=s2.学号 GROUP BY s1.学号 s1.姓名;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(31)

面试官:查询平均成绩大于85的所有学生的学号、姓名和平均成绩。

SELECT s1.学号 s1.姓名 avg(s2.成绩) as 平均成绩 FROM student as s1 LEFT JOIN score as s2 ON s1.学号=s2.学号 GROUP BY s1.学号 s1.姓名 having 平均成绩>85;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(32)

面试官:查询学生的选课情况:学号,姓名,课程号,课程名称。

SELECT s1.学号 s1.姓名 c.课程号 c.课程名称 FROM student as s1 LEFT JOIN score as s2 on s1.学号=s2.学号 LEFT JOIN course as c on s2.课程号=c.课程号;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(33)

面试官:查询出每门课程的及格人数和不及格人数。

select 课程号 SUM(case when 成绩>=60 then 1 else 0 end ) as 及格人数 -- case表达式,进行特殊分组,实现行列转换。 SUM(case when 成绩<60 then 1 else 0 end ) as 不及格人数 from score GROUP BY 课程号;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(34)

面试官:使用分段[100-85] [85-70] [70-60] [‹60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称。

select s2.课程号 c.课程名称 SUM(case when 成绩 between 85 and 100 then 1 else 0 end ) as '{100-85}' SUM(case when 成绩 between 70 and 85 then 1 else 0 end ) as '{85-70}' SUM(case when 成绩 between 60 and 70 then 1 else 0 end ) as '{70-60}' SUM(case when 成绩 <60 then 1 else 0 end ) as '{<60}' from score as s2 RIGHT JOIN course as c on s2.课程号=c.课程号 GROUP BY s2.课程号 c.课程名称;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(35)

面试题:查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名。

select s2.学号 s1.姓名 from score as s2 LEFT JOIN student as s1 on s2.学号=s1.学号 where s2.课程号='0003' and s2.成绩>80;

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(36)

面试题:对学生的成绩表(表名score,列名:学号、课程号、成绩),使用SQL实现将score表转换为下面的表结构。

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(37)

-- 用case表达式或者if函数实现行列互换 -- case表达式 select 学号 max(case when 课程号='0001' then 成绩 else 0 end )as 课程号0001 max(case when 课程号='0002' then 成绩 else 0 end )as 课程号0002 max(case when 课程号='0003' then 成绩 else 0 end )as 课程号0003 from score GROUP BY 学号 ; -- if函数 select 学号 MAX(if(课程号='0001' 成绩 0))as 课程号0001 MAX(if(课程号='0002' 成绩 0))as 课程号0002 MAX(if(课程号='0003' 成绩 0))as 课程号0003 from score GROUP BY 学号;

5.如何提高SQL查询效率

面试官:我们公司的数据量非常大,需要的不仅仅是提取数据,要了解SQL方案优化的。一般在写SQL时需要注意哪些问题,可以提高查询的效率?

答:数据量大的情况下,不同的SQL语句,消耗的时间相差很大。按下面方法可以提高查询的效果。

①select子句中尽量避免使用*;

②where子句比较符号左侧避免函数;

③尽量避免使用in和not in;

④尽量避免使用or;

⑤使用limit子句限制返回的数据行数。

在工作中,面对不同的数据量,大家一定要注意灵活使用SQL语句,提升工作效率。

关于SQL查询效率提升问题, 这里推荐两篇文章,方便你查阅:

https://blog.csdn.net/rinvay_cui/article/details/89447470

https://mp.weixin.qq.com/s/IvsAYCh4imUhkBY9_IYM_g

好啦。说完了案例,我们来看一看,面试官需要你知道的常见的基础知识吧!

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(38)


★理论篇:

面试官:什么是 SQL?SQL 有哪些功能?

:SQL 代表结构化查询语言,它是访问关系数据库的通用语言,支持数据的各种增删改查操作。SQL 语句可以分为以下子类:

  • DQL,数据查询语言。这个就是 SELECT 语句,用于查询数据库中的数据和信息。
  • DML,数据操作语言。包括 INSERT、UPDATE、DELETE 和 MERGE 语句,主要用于数据的增加、修改和删除。
  • DDL,数据定义语言。主要包括 CREATE、ALTER 和 DROP 语句,用于定义数据库中的对象,例如表和索引。
  • TCL,事务控制语言;主要包括 COMMIT、ROLLBACK 和 SAVEPOINT 语句,用于管理数据库的事务。
  • DCL,数据控制语言。主要包括 GRANT 和 REVOKE 语句,用于控制对象的访问权限。

解析:SQL 是一种声明性的编程语言,只需要告诉计算机想要什么内容(what),不需要指定具体怎么实现(how)。通过几个简单的英文单词,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,就可以完成大部分的数据操作。

面试官:数据库中的表和字段是什么?

答:数据库是有序形式的一组信息,用于访问、存储和检索数据,表是在具有列和行的模型中设计的数据集合。在表中,指定了列数称为字段,但未定义行数称为记录。

面试官:DBMS的类型是什么?

答:DBMS是一个控制数据维护和使用的程序,它被认为是管理数据的文件管理器。有四种类型的DBMS:关系DBMS、分层DBMS、网络DBMS、面向对象的关系DBMS,最有用的DBMS是Relational DBMS。它为数据提供了一个关系运算符。

面试官:SQL中的视图是什么?

答:它包含来自一个或多个表的行和列,可以定义为虚拟表。它消耗的内存较少。、

CREATE VIEW view_name AS SELECT column_name1 column_name2 FROM table_name WHERE CONDITION;

面试官:什么是SQL中的Joins(联结)?

答:Join用于从相关的行和列中检索数据。它在两个或多个表之间工作,并且它从两个表返回至少一个匹配。

  • CROSS JOIN(交叉联结):没有条件的join,返回被连接的两个表所有数据行的笛卡尔积;
  • INNER JOIN(内联结):如果表中有至少一个匹配,则返回行;
  • LEFT JOIN(左联结):即使右表中没有匹配,也从左表返回所有的行;
  • RIGHT JOIN(右联结):即使左表中没有匹配,也从右表返回所有的行;
  • FULL JOIN(全联结):只要其中一个表中存在匹配,则返回行。

面试题:SQL中的Constraints(约束)是什么?

答:它可用于设置表中数据类型的限制。在创建或更新表语句时,可以使用约束。一些限制是:NOT NULL、PRIMARY KEY、FOREIGN KEY、UNIQUE、CHECK、DEFAULT。

面试官:SQL中有多少Key(键),它们如何工作?

答:SQL中有不同类型的键:

  • SuperKey(超级密钥)——一个或多个密钥的集合被定义为超级密钥,它用于唯一的标识表中的记录。主键,唯一键和备用键是超级键的子集。
  • PrimaryKey(主键)——它是表中的一个或多个字段的集合。它们不接受空值和重复值。并且表中只存在一个主键。
  • ForeignKey(外键)——在一个表中定义主键并在另一个表中定义字段的键被标识为外键。
  • UniqueKey(唯一键)——除了主键之外,表中还有更多键,它们只标识记录,但唯一的区别是它们只接受一个空值但不接受重复值。
  • CandidateKey(候选密钥)——在任何情况下,如果需要,任何候选密钥都可以作为主键。
  • CompoundKey(复合键)——此键是候选键和主键的组合。
  • AlternateKey(备用密钥)——在任何情况下,如果需要,任何备用密钥都可以作为主键或候选键。

面试官:什么是Index(索引)?Clustered(群集)和Non-Clustered Index(非群集)索引之间有什么区别?

答:索引用于加速查询的性能。它可以更快地从表中检索数据。可以在一组列上创建索引。

  • 聚集索引——有助于轻松检索数据,并且只有一个聚集索引与一个表一起分配。它会更改记录在数据库中的保存方式。
  • 非聚集索引——与聚集索引相比,非聚集索引很慢。并且在非集群索引的情况下,该表可以具有多个索引,为表创建一个对象,该表是搜索后指向表的一个点。

面试官:什么是Aggregate Functions(聚合函数)?

答:它是一个返回单个值的数学函数。SQL中的聚合函数是:

  • AVG()——返回平均值
  • COUNT()——返回行数
  • MAX()——返回最大值
  • MIN()——返回最小值
  • ROUND()——基于十进制规范,此函数对数字字段进行舍入
  • SUM()——返回总和

面试官:什么是String Functions(字符串函数)?

答:为了操作字符串,我们使用字符串函数。其中一些是:

  • LEN()——返回值的长度。
  • LOWER()——将字符数据转换为小写。
  • UPPER()——将字符数据转换为大写。
  • SUBSTRING()——提取字符。
  • LTRIM()——从头开始删除字符串的所有空格。
  • RTRIM()——删除结尾处字符串的所有空格。
  • CONCAT()——连接函数。
  • REPLACE()——更新内容。

面试官:SQL中有哪些Operators(运算符)?

答:运算符是一个保留字,主要用于SQL语句的WHERE子句中以进行操作。

算术运算、逻辑运算、比较运算符等。

面试官:如何定义NULL值,Blank Space(空格)和ZERO(0)?

答:Null值是没有值的字段。它与0不同。假设有一个表,并且在表中有一个字段,可以在不添加值的情况下将记录插入字段,然后该字段将以NULL值保存。

空格是我们提供的值,0只是一个数字。

面试官:SQL中的Query(查询)是什么?

答:数据库查询是数据库表中的数据请求。查询可以是选择查询或任何其他类型的查询。

面试官: 什么是Subquery(子查询)以及什么是Types(类型)?

答:子查询是查询的一部分。外部查询已知主查询,内部查询识别子查询。始终首先执行子查询,并将结果传递给主查询。

面试官:什么是Trigger(触发器)?

答:触发器用于对表执行特定操作,例如INSERT、UPDATE或DELETE。它是一种存储过程。动作和事件是触发器的主要组成部分。执行Action时,事件响应该操作而出现。

面试官:如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

答:这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。

另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

面试官:你可以用什么来确保表格里的字段只接受特定范围里的值?

答:这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

好啦,今天的内容就到这里啦,SQL的面试题除了这些常见的,还要你自己平时注意搜集,面试过程中可以把你自己经历的面试题拍下来,然后发到交流群里交流答案,形成你自己的题库。很多路,只能你自己走,没有人可以代替你自己,加油!

最后,分享一句《当幸福来敲门》中我很喜欢的话,和你共勉:

永远不要让别人告诉你,你做不了什么。如果你有梦想,就去捍卫它。那些一事无成的人总想告诉你,你根本成不了大器。如果你有理想的话,就要努力去实现。”

喜欢的话,点个赞吧,祝你早安、午安、晚安!See you !

有什么基础的sql面试题(2周零基础搞定SQL经典面试题)(39)

猜您喜欢: