几道SQL面试题

几道SQL面试题

这几天上oracle数据库中的sql语句,老师偶尔会说些面试题,现收集整理一下

1.有一张tableA 表,

id value

1 A

2 B

3 C

4 D

请打印出如下输出格式:

A B

A C

A D

B C

B D

C D

思考:仔细看此题,不难发现一些规律,根据输出格式,且在一张表中,可以看出要输出结果需要用到自

连接;再看输出 value值得规律,可以发现,id=1时,与id=2,3,4 匹配;id=2时,与id=3,4匹

配;id=3时与id=4匹配,所以根据此过滤就容易写出sql查询语句了。

SQL语句:select a.value,b.value from tableA a,tableA b where a.id

2.现有两张表tableA和tableB 如下:

tableA tableB

id value id value

1 a 1 one

2 b 2 two

3 c 3 three

4 d 4 four

请将tableB表中的value值对应复制给tableA表中的value值,即最后tableA表中的数据和tableB中的数

据一样。

思考:此题就是在考察update命令,update命令修改数据在表中是一行一行的修改的。

SQL语句:update tableA set value =( select value from tableB where id = tableA.id );

sql面试题及答案

sql面试题及答案 SQL(Structured Query Language)是一种用于管理关系型数据库系 统的标准化语言。在面试过程中,针对SQL的相关问题被广泛应用, 以评估面试者对数据库和SQL的理解程度和能力。以下是一些常见的SQL面试题及其答案,供读者参考。 一、简答题 1. 什么是SQL? SQL是一种用于管理关系型数据库系统的标准化语言。它可以用于 创建数据库、插入、更新、删除和查询数据。 2. SQL语言的分类有哪些? SQL语言可以分为DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)。 3. DDL和DML的区别是什么? DDL用于定义和管理数据库结构,如创建表、修改表的结构等;DML用于对数据库中的数据进行操作,如增加、修改、删除数据等。 4. 什么是主键? 主键是用于唯一标识表中每一条记录的列或一组列。它具有唯一性 和非空性约束。 5. 什么是外键?

外键是一个表中的列,它与另一个表的主键建立关系。它用于保持 表与表之间的完整性,可以实现关系数据库的特性。 6. 什么是索引? 索引是一种帮助数据库系统快速查找数据的数据结构。它可以加快 数据检索的速度,但会增加数据修改的时间。 7. 请解释SQL中的JOIN操作。 JOIN操作用于将两个或多个表中的数据连接起来,根据某个共同 的列值将它们关联起来。常见的JOIN操作包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。 8. 请解释SQL中的GROUP BY和HAVING操作。 GROUP BY用于将数据按照指定的列进行分组;HAVING则用于 对GROUP BY结果进行过滤,只选择满足条件的分组。 9. 什么是视图? 视图是一个虚拟的表,它是由数据库中的一个或多个表的数据组成的。视图是基于某个或多个表的查询结果,可以简化复杂的查询操作。 二、编程题 1. 如何在表中插入数据? 使用INSERT INTO语句向表中插入数据。例如,INSERT INTO 表 名 (列1, 列2, 列3) VALUES (值1, 值2, 值3)。

Sql常见面试题

Sql常见面试题(总结) 1.用一条SQL语句查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) 2.学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三0001 数学69 2 2005002 李四0001 数学89 3 2005001 张三0001 数学69 删除除了自动编号不同,其他都相同的学生冗余信息 A: delete from tablename where 自动编号not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数) 一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗? 答:select https://www.360docs.net/doc/e619010012.html,, https://www.360docs.net/doc/e619010012.html, from team a, team b where https://www.360docs.net/doc/e619010012.html, < https://www.360docs.net/doc/e619010012.html, 请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有1-12月份的发生额。 AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。 数据库名:JcyAudit,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

Sql面试题大全

Sql常见面试题受用了 1.用一条SQL 语句查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三语文 81 张三数学 75 李四语文 76 李四数学 90 王五语文 81 王五数学 100 王五英语 90 A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) select name from table group by name having min(fenshu)>80 2.学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69 删除除了自动编号不同, 其他都相同的学生冗余信息 A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数) 3.一个叫team 的表,里面只有一个字段name, 一共有4 条纪录,分别是 a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗?

答:select https://www.360docs.net/doc/e619010012.html,, https://www.360docs.net/doc/e619010012.html, from team a, team b where https://www.360docs.net/doc/e619010012.html, < https://www.360docs.net/doc/e619010012.html, 4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。 AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。 数据库名:JcyAudit ,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur ********************************************************************* *************** 5.面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果 year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4

SQL经典面试题集(一)

第一题: 为管理业务培训信息,建立3个表: S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄C(C#,CN)C#,CN分别代表课程编号,课程名称 SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩 (1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名? (2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位? (3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位? (4) 查询选修了课程的学员人数? (5) 查询选修课程超过5门的学员学号和所属单位? drop table S; drop table C; drop table SC; create table S ( S# varchar(10), SN varchar (25), SD varchar (25), SA int ) create table C ( C# varchar(10), CN varchar (25) ) create table SC ( S# varchar(10), C# varchar(10), G int Primary Key(S#, C#) ) insert into S values ('10001','Students1','department1',23) insert into S values ('10002','Students2','department1',24) insert into S values ('10003','Students3','department2',25) insert into S values ('10004','Students4','department2',26)

常见SQL数据库面试题和答案

常见SQL数据库面试题和答案 常见SQL数据库面试题和答案(一) Student(S#,Sname,Sage,Ssex) 学生表S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别 Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号 SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩 Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select # from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where > and #=#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select #,,count#),sum(score) from Student left Outer join SC on #=# group by #,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select #, from Student

sql面试题50题

sql面试题50题1. 查询表中所有数据: SELECT * FROM 表名; 2. 查询表中某列的不重复数据: SELECT DISTINCT 列名 FROM 表名; 3. 查询表中满足条件的数据: SELECT * FROM 表名 WHERE 条件; 4. 查询表中前n条数据: SELECT * FROM 表名 LIMIT n; 5. 查询表中按某列排序的数据: SELECT * FROM 表名 ORDER BY 列名; 6. 查询表中某列的最大值和最小值:SELECT MAX(列名), MIN(列名) FROM 表名; 7. 查询表中某列的求和值: SELECT SUM(列名) FROM 表名; 8. 查询表中某列的平均值: SELECT AVG(列名) FROM 表名;

9. 查询表中某列的记录数: SELECT COUNT(列名) FROM 表名; 10. 查询表中满足条件的记录数: SELECT COUNT(*) FROM 表名 WHERE 条件; 11. 查询表中满足条件的前n条数据: SELECT * FROM 表名 WHERE 条件 LIMIT n; 12. 查询表中的数据并按某列分组: SELECT 列名 FROM 表名 GROUP BY 列名; 13. 查询表中满足条件的数据并按某列分组: SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名; 14. 查询表中满足条件的数据并计算某列的和: SELECT 列名, SUM(列名) FROM 表名 WHERE 条件 GROUP BY 列名; 15. 查询表中数据满足多个条件的情况: SELECT * FROM 表名 WHERE 条件1 AND 条件2; 16. 查询表中数据满足任意一个条件的情况: SELECT * FROM 表名 WHERE 条件1 OR 条件2; 17. 查询表中数据满足某个范围的情况:

经典SQL面试题

经典SQL面试题 SQL面试题 一、选择题 1、假设在某个公司环境中,一个部门有多名职工,一名职工只能属于一个部门,则部门与职工之间的联系是( A )。 A、一对多 B、一对一 C、多对多 D、不确定 2、create database用来( A )。 A、创建数据库 B、删除数据库 C、创建表 D、创建视图 3、如果将某一列设置为表的主键,在表中此列的值(C )。 A、可以出现重复值 B、允许为空值 C、不允许为空值,也不能出现重复值 D、不允许为空值,但允许列值重复 4、对于表的外键,下列哪些描述正确( A )。 A、是表的非主键列,是另一个表的主键列 B、主键和外键不能描述表之间的关系 C、外键不能是表的索引 D、外键允许为空值 5、在查询时,如果要去掉查询结果中的重复项,需要使用( C )。 A、UNIQUE B、COUNT C、DISTINCT D、UNION

6、SELECT语句中使用*表示( B )。 A、选择任何属性 B、选择全部属性 C、选择全部元组 D、选择键码 7、在SQL中,下列涉及空值操作不正确的_是( A )。 A、AGE IS NULL B、AGE IS NOT NULL C、AGE=NULL D、NOT(AGE IS NULL) 8、在SELECT语句中,(A)子句可用于对查询到的记录进行分组。 A、GROUP BY B、ORDER BY C、WHERE D、FROM 9、Oracle数据库是( C )数据库。 A、层次模型 B、网状模型 C、关系模型 D、面向对象模型 二、查询题 参照如下表,完成下面题目: Student course score teacher

SQL数据库经典面试题(修改笔试题)(有答案)

SQL数据库经典面试题(修改笔试题)(有答案) 28、?数据库:抽出部门,平均工资,要求按部门得字符串顺序排序,不能含有"human resource"部门,employee结构如下:employee_id,employee_name,depart_id,depart_name,wage 答:?select depart_name, avg(wage)fromemployee where depart_name〈〉'humanresource'?group by depart_nameorder by depart_name ---—--——----—-——----—--——-—---———----—————-—- 29、 —-—--—---—-—--————-——--——--——? 给定如下SQL数据库:Test(num INT(4))请用一条SQL语句返回num得最小值,但不许使用统计功能,如MIN,MAX等答: select top1 num from Test orderbynum ----—-----——-—----———----—---—----—-—-—-———-—- 33、一个数据库中有两个表:——----—-—----—--—--——--—----? 一张表为Customer,含字段ID,Name; 一张表为Order,含字段ID,CustomerID(连向Customer中ID得外键),Re venue;?写出求每个Customer得Revenue总与得SQL语句。 建表create table customer?(ID int primary key,Namechar (10)) go create table [order]?(ID int primary key,CustomerID int foreign key references customer(id),Reven ue float)

SQL_面试题及答案

1、SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值 dd我们希望马上得到这个新用户的ID,因为我们一般都是把这种用户ID的字段设置成自增长类型的,乍看起来好像没有要得到那个新ID很麻烦,其实sql server内置了一些全局的变量,使我们很容易就得到那个新的自增字段的ID,就是使用@@IDENTITY。 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。 在具体应用中可以这样来写SQL语句: string strSql = "INSERT INTO [User]([Name],[LoginName],[Pwd],[RegTime],[IsSuper],[Remark])" + "VALUES(@Name,@LoginName,@Pwd,@RegTime,@IsSuper,@Remark);select @@IDENTITY ;"; 执行的时候直接用command.ExecuteScalar();就可以了,能直接返回该条记录的UserID; 解答二: 经过实验,得如下结论: select DISTINCT @@IDENTITY as iden from FaWen 解释:上述语句对 SQL SERVER 的一个会话,也就是一条连接,返回该连接最后一条插入记录得到的自增字段的值。 假设有3个程序,分别连接SQL SERVER,有三个连接。3个程序都向同一个表依顺序插入数据,得到的值分别是1、2、3,那么,只要3个程序对SQL的连接还保持着,第一个程序使用上述语句,将得到1,而不是3,第二个程序将得到2,也不是3。第三个程序得到3。 因此,用上述语句可以得到自己刚才插入记录的自增字段的值,不怕其它程序的并发插入操作。

SQL数据库面试题目及其答案

1.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 2.索引的作用?和它的优点缺点是什么?答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 3。什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 3.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

4.什么是事务?什么是锁? 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS^,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。 5.什么叫视图?游标是什么?答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。 6.为管理业务培训信息,建立 3 个表: S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位, 学员年龄 C(C#,CN)C#,CN分别代表课程编号,课程名称 SC(S#,C#,G) S#,C#,G 分别代表学号,所选的课程编号,学习成绩

sql面试题及答案

sql面试题及答案 sql面试题及答案一 1. 简述索引存取的方法的作用和建立索引的原则 作用:加快查询速度。 原则: (1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引; (2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引; (3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引; 2. 简述数据库的设计过程 数据库设计分为五个阶段: 需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。 概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的DBMS无关概念模型(一般为ER模型)。 逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。

物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。 实施和维护:实施就是使用DLL语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。维护阶段是对运行中的数据库进行评价、调整和修改。 3. 什么是内存泄漏? 答案:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 4. 什么是基本表?什么是视图? 答案:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表 5. 试述视图的优点 (1) 视图能够简化用户的操作 (2) 视图使用户能以多种角度看待同一数据; (3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供安全保护。 6. 所有的视图是否都可以更新?为什么? 答案:不是。

sql面试题大全

sql面试题大全 SQL(Structured Query Language)是一种用于管理关系型数据库的 标准化语言。在数据库相关的职位面试中,SQL面试题是常见的一种 考察方式。本文将为您提供一份SQL面试题大全,帮助您更好地准备 面试。 1. SELECT语句 SELECT语句用于从数据库中检索数据。以下是一些常见的SELECT语句相关的面试题: - 请解释SELECT语句中的DISTINCT关键字的作用。 - 如何使用WHERE子句来过滤结果? - 什么是表达式(Expression)和谓词(Predicate)? - 请解释SQL中的NULL值和未知值(UNKNOWN)的区别。 2. 数据库表操作 数据库表操作是SQL中的核心操作之一。以下是一些常见的数据 库表操作相关的面试题: - 如何创建一个新的数据库表? - 如何添加列、删除列或修改列的定义? - 如何添加主键(Primary Key)和外键(Foreign Key)约束? - 请解释SQL中的合并(JOIN)操作和不同类型的合并操作的区别。

3. 数据查询与过滤 数据查询与过滤是SQL中的重要方面,以下是一些相关的面试题:- 如何使用GROUP BY子句对数据进行分组? - 如何使用HAVING子句过滤分组数据? - 请解释SQL中的聚合函数(Aggregate Functions)的作用和常见的聚合函数有哪些? - 如何使用ORDER BY子句对结果进行排序? 4. 数据更新与删除 数据更新与删除是SQL中的常见操作之一。以下是一些相关的面 试题: - 如何使用INSERT语句向数据库表中插入新的数据? - 如何使用UPDATE语句更新已有的数据? - 如何使用DELETE语句从数据库中删除数据? - 请解释SQL中的事务(Transaction)和事务的四个特性(ACID)。 5. 数据库索引与优化 数据库索引和优化是提高数据库性能的重要手段。以下是一些相关 的面试题: - 请解释数据库索引的作用和常见的索引类型有哪些?

常见SQL数据库面试题和答案(一)

常见SQL数据库面试题和答案(一) 常见SQL数据库面试题和答案(一) Student(S#,Sname,Sage,Ssex) 学生表S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别 Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号 SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩 Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student where S# not in (select distinct( SC.S#) from

SQL经典面试题及答案

1。用一条SQL 语句查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 A:select distinct name from table where name not in (select distinct name from table where fenshu<=80) select name from table group by name having min(fenshu)〉80 select name from table group by name having count(kecheng)〉=3 and min (fenshu)>=80 2. 学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三0001 数学69 2 2005002 李四0001 数学89 3 2005001 张三0001 数学69 删除除了自动编号不同,其他都相同的学生冗余信息 A: delete tablename where 自动编号not in(select min(自动编号) from tablename group by 学号,姓名,课程编号, 课程名称, 分数) 3。面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1。3 1991 4 1。4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2。4 查成这样一个结果 year m1 m2 m3 m4 1991 1。1 1.2 1.3 1.4 1992 2.1 2.2 2。3 2.4

SQL面试题目汇总

SQL面试题目汇总 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 4.什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 5.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

sql语句面试题及答案

sql语句面试题及答案 本文将为您提供一些常见的SQL语句面试题,并给出相应的答案。通过阅读本文,您将对SQL语句有更深入的了解,从而在面试中更加 自信。 一、查询相关的面试题 1. 如何用SQL语句查询一张表的所有记录? 答案:使用SELECT语句来查询表中的所有记录,语法为:SELECT * FROM 表名; 2. 如何查询指定条件的记录? 答案:使用SELECT语句的WHERE子句来查询指定条件的记录, 语法为:SELECT * FROM 表名 WHERE 条件; 3. 如何对查询结果进行排序? 答案:使用SELECT语句的ORDER BY子句来对查询结果进行排序,语法为:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; 4. 如何获取查询结果的前几条记录? 答案:使用SELECT语句的TOP或LIMIT子句来获取查询结果的 前几条记录,语法为:SELECT TOP 数量 * FROM 表名; 或 SELECT * FROM 表名 LIMIT 数量; 5. 如何对查询结果进行分页?

答案:使用SELECT语句的LIMIT子句来实现分页效果,语法为:SELECT * FROM 表名 LIMIT 起始位置, 每页数量; 二、插入、更新和删除相关的面试题 1. 如何插入一条新记录? 答案:使用INSERT INTO语句来插入一条新记录,语法为:INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); 2. 如何更新已有的记录? 答案:使用UPDATE语句来更新已有的记录,语法为:UPDATE 表名 SET 列名 = 新值 WHERE 条件; 3. 如何删除指定的记录? 答案:使用DELETE FROM语句来删除指定的记录,语法为:DELETE FROM 表名 WHERE 条件; 三、聚合函数相关的面试题 1. 如何计算表中记录的数量? 答案:使用COUNT(*)函数来计算表中记录的数量,语法为:SELECT COUNT(*) FROM 表名; 2. 如何计算某一列的总和? 答案:使用SUM(列名)函数来计算某一列的总和,语法为:SELECT SUM(列名) FROM 表名;

SQL数据库面试题以及答案

SQL数据库面试题以及答案 Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表 C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号 select a.S# from (select S#,score from SC where C#='001')a, (select s#,sco re from SC where c#='002')b Where a.score> b.score and a.s# = b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩 select S#, avg(score) from sc group by S# having avg(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select student.S#, student.Sname, count(sc.C#), sum(score) from student le ft outer join SC on student.S# = SC.S# group by Student.S#, Sname

4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名: select student.S#, student.Sname from Student where S# not in (select distinct(SC.S#) from SC,Course,Teacher where sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='叶平'); 6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平')); 7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名: select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名: Select S#,Sname from (select Student.S#,Student.Sname,score , (select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') sco re2

SQL数据分析面试题

SQL数据分析面试题 在进行SQL数据分析面试时,面试官通常会提供一些问题和场景,要求我们通过编写SQL查询语句来解决问题或得出相关结果。以下是 一些常见的SQL数据分析面试题,供您参考: 1. 在一个订单表中,有以下字段:订单号、客户ID、订单日期、订单总额。请编写一条SQL查询语句,计算每个客户的总订单数和订单 总额,并按订单总额降序排列。 ``` SELECT 客户ID, COUNT(订单号) AS 总订单数, SUM(订单总额) AS 订单总额 FROM 订单表 GROUP BY 客户ID ORDER BY 订单总额 DESC; ``` 2. 给定一个学生成绩表,包含学生ID、科目、分数等字段。请编写一条SQL查询语句,返回每个科目的平均分,并按平均分降序排列。 ``` SELECT 科目, AVG(分数) AS 平均分 FROM 学生成绩表

GROUP BY 科目 ORDER BY 平均分 DESC; ``` 3. 在一个雇员表中,有以下字段:员工ID、入职日期、所在部门。请编写一条SQL查询语句,返回每个部门中入职时间最早的员工。 ``` SELECT 员工ID, 入职日期, 所在部门 FROM 雇员表 AS e1 WHERE 入职日期 = ( SELECT MIN(入职日期) FROM 雇员表 AS e2 WHERE e1.所在部门 = e2.所在部门 ); ``` 4. 给定一个商品表,包含商品ID、销售日期、销售额等字段。请编写一条SQL查询语句,返回每个月的销售总额,并按销售月份升序排列。 ```

SELECT DATE_FORMAT(销售日期, '%Y-%m') AS 销售月份, SUM(销售额) AS 销售总额 FROM 商品表 GROUP BY DATE_FORMAT(销售日期, '%Y-%m') ORDER BY 销售月份 ASC; ``` 5. 在一个用户表中,有以下字段:用户ID、注册时间、最近登录时间。请编写一条SQL查询语句,返回每个月的新增用户数和活跃用户数,并按日期升序排列。 ``` SELECT DATE_FORMAT(注册时间, '%Y-%m') AS 日期, COUNT(用户ID) AS 新增用户数, COUNT(DISTINCT 用户ID) AS 活跃用户数FROM 用户表 GROUP BY DATE_FORMAT(注册时间, '%Y-%m') ORDER BY 日期 ASC; ``` 以上是一些常见的SQL数据分析面试题示例,通过写SQL查询语句来解决这些问题,可以展示出您在数据分析方面的能力和经验。当然,在面试时,还需要根据具体问题的要求进行适当的修改和调整。祝您面试成功!

相关主题
相关文档
最新文档