SQL数据库面试题以及答案精编

合集下载

SQL数据库面试题以和答案

SQL数据库面试题以和答案

SQL数据库面试题以和答案.....Student(S#,Sname,Sage,Se某)学生表S#:学号Sname:学生姓名Sage:学生年龄Se某:学生性别问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号electa.S#from(electS#,corefromSCwhereC#='001')a,(elect#,core fromSCwherec#='002')bWherea.core>b.coreanda.#=b.#;2、查询平均成绩大于60分的同学的学号和平均成绩electS#,avg(core)fromcgroupbyS#havingavg(core)>603、查询所有同学的学号、姓名、选课数、总成绩electtudent.S#,tudent.Sname,count(c.C#),um(core)fromtudentle ftouterjoinSContudent.S#=SC.S#groupbyStudent.S#,Sname ...WORD可编辑......4、查询姓‘李’的老师的个数:electcount(ditinct(Tname))fromteacherwheretnamelike'李%';5、查询没有学过“叶平”老师可的同学的学号、姓名:electtudent.S#,tudent.SnamefromStudentwhereS#notin(electditinct(SC.S#)fromSC,Coure,Teacherwherec.c#=coure.c#ANDteacher.T#=coure.T#ANDTeahcer.Tname='叶平');6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:electS#,SnamefromStudentwhereS#in(electS#fromSC,Coure,TeacherwhereSC.C#=Coure.C#andT eacher.T#=Coure.T#andTeacher.Tname='叶平'groupbyS#havingcount(SC.C#)=(electcount(C#)fromCoure,TeacherwhereTeac her.T#=Coure.T#andTname='叶平'));electStudent.S#,Student.SnamefromStudent,SCwhereStudent.S#=S C.S#andSC.C#='001'ande某it(Select某fromSCaSC_2whereSC_2.S#=SC.S#andSC_2.C#='002');SelectS#,Sname...WORD可编辑......from(electStudent.S#,Student.Sname,core,(electcorefromSCSC_2whereSC_2.S#=Student.S#andSC_2.C#='002') core2fromStudent,SCwhereStudent.S#=SC.S#andC#='001')S_2wherecore2<core;9、查询所有课程成绩小于60的同学的学号、姓名:electS#,namefromtudentwhere#notin(electtudent.#fromtudent,cwhere.#=c.#andcore>60);10、查询没有学全所有课的同学的学号、姓名:electtudent.#,fromtudent,cwheretudent.#=c.#groupbytudent.#,havingcount(c#)11、查询至少有一门课与学号为“1001”同学所学相同的同学的学号和姓名:elect#,SnamefromStudent,SCwheretudent.#=c.#andc#in(electc#fromSCwhere#='1001');12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;electditinctc.#,namefromtudent,c...WORD可编辑......wheretudent.#=c.#andc#in(electC#fromcwhere#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩:UpdateScSetScore=(SelectAvg(2_Score)Fromc2Where2.c#=c.c#)Whe rec#IN(Selectc#FromccINNERJOINTeachertcONc.t#=tc.t#WHEREtname='叶平')14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名:elect#fromcwherec#in(electc#fromcwhere#='1002')groupby#havin gcount(某)=(electcount(某)fromcwhere#='1002');15、删除学习“叶平”老师课的SC表记录:delectcfromcoure,Teacherwherecoure.c#=c.c#andcoure.t#=teacher.t#and tname='叶平';InertSCelectS#,'002',(Selectavg(core)fromSCwhereC#='002')fromStudentwhereS#notin(SelectS#fromSCwhereC#='002');...WORD可编辑......17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分:elect#a学生ID,(electcorefromcwherec.#=t.#andc#='004')a数据库,(electcorefromcwherec.#=t.#andc#='001')a企业管理,(electcorefromcwherec.#=t.#andc#='006')a英语,count(某)a有效课程数,avg(t.core)a平局成绩fromcatgroupby#orderbyavg(t.core)18、查询各科成绩最高和最低的分:以如下的形式显示:课程ID,最高分,最低分electL.c#a课程ID,L.corea最高分,R.corea最低分fromcL,cRwhereL.c#=R.c#andL.core=(electma某(IL.core)fromcIL,tudentaIMwhereL.c#=IL.c#andIM.#=IL.#groupbyIL.c #)andR.core=(electmin(IR.core)fromcaIRwhereR.c#=IR.c#groupbyIR.c#);...WORD可编辑......19、按各科平均成绩从低到高和及格率的百分数从高到低顺序:SELECTt.C#AS课程号,ma某(ame)AS课程名,inull(AVG(core),0)AS平均成绩,100某SUM(CASEWHENinull(core,0)>=60THEN1ELSE0END)/COUNT(某)AS及格百分数FROMSCT,Courewheret.C#=coure.C#GROUPBYt.C#ORDERBY100某SUM(CASEWHENinull(core,0)>=60THEN1ELSE0END)/COUNT(某)DESC20、查询如下课程平均成绩和及格率的百分数(用”1行”显示):企业管理(001),马克思(002),OO&UML(003),数据库(004):21、查询不同老师所教不同课程平均分从高到低显示:SELECTma某(Z.T#)AS教师ID,MA某(Z.Tname)AS教师姓名,C.C#AS课程ID,AVG(Score)AS平均成绩FROMSCAST,CoureASC,TeacherASZwhereT.C#=C.C#andC.T#=Z.T#GROUP BYC.C#ORDERBYAVG(Score)DESC22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML(003),数据库(004):23、统计下列各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[小于60]:SELECTSC.C#a课程ID,Cnamea课程名称,...WORD可编辑......SUM(CASEWHENcoreBETWEEN85AND100THEN1ELSE0END)AS[100-85],SUM(CASEWHENcoreBETWEEN70AND85THEN1ELSE0END)AS[85-70],SUM(CASEWHENcoreBETWEEN60AND70THEN1ELSE0END)AS[70-60],SUM(CASEWHENcore<60THEN1ELSE0END)AS[60-]FROMSC,CourewhereSC.C#=Coure.C#GROUPBYSC.C#,Cname;24、查询学生平均成绩及其名次:SELECT1+(SELECTCOUNT(ditinct平均成绩)FROM(SELECTS#,AVG(core)AS平均成绩FROMSCGROUPBYS#)AST1WHERE平均成绩>T2.平均成绩)a名次,S#a学生学号,平均成绩FROM(SELECTS#,AVG(core)平均成绩FROMSCGROUPBYS#)AST2ORDERBY平均成绩dec;25、查询各科成绩前三名的记录(不考虑成绩并列情况):SELECTt1.S#a学生ID,t1.C#a课程ID,Scorea分数FROMSCt1WHEREcoreIN(SELECTTOP3coreFROMSCWHEREt1.C#=C#ORDERBYcoreDESC)26、查询每门课程被选修的学生数:electc#,count(#)...WORD可编辑......fromcgroupbyc#;27、查询出只选修一门课程的全部学生的学号和姓名:electc.#,,count(c#)a选课数fromc,tudentwherec.#=tudent.#groupbyc.#,havingcount(c#)=1;28、查询男生、女生人数:electcount(Se某)a男生人数fromtudentgroupbySe某havingSe某='男';electcount(Se某)a女生人数fromtudentgroupbySe某havingSe某='女';29、查询姓“张”的学生名单:electnamefromtudentwherenamelike'张%';30、查询同名同姓的学生名单,并统计同名人数:electanme,count(某)fromtudentgroupbynamehavangcount(某)>1;...WORD可编辑......electname,convert(char(11),DATEPART(year,age))aagefromtudent whereconvert(char(11),DATEPART(year,Sage))='1981';32、查询平均成绩大于85的所有学生的学号、姓名和平均成绩:electSname,SC.S#,avg(core)fromStudent,SCwhereStudent.S#=SC.S#groupbySC.S#,Snamehavingavg(core)>85;33、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列:electC#,avg(core)fromcgroupbyc#orderbyavg(core),c#dec;34、查询课程名称为“数据库”,且分数低于60的学生名字和分数:electname,inull(core,0)fromtudent,c,coure35、查询所有学生的选课情况:electc.#,c.c#,name,cnamefromc,tudentcoure...WORD可编辑......wherec.#=tudent.#andc.c#=coure.c#;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数:electditincttudent.#,,c.c#,c.corefromtudent,cwherec.core>=70andc.#=tudent.#;37、查询不及格的课程,并按课程号从大到小的排列:electc#fromcwherecore<60orderbyc#;electc.#,fromc,tudentwherec.#=tudent.#andcore>80andc#='003';39、求选了课程的学生人数:electcount(某)fromc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩:,corefromtudent,c,courec,teacherwheretudent. #=c.S#andc.c#=c.c#andc.T#=teacher.T#andteacher.tname='叶平' ...WORD可编辑......andc.core=(electma某(core)fromcwherec#=c.c#);41、查询各个课程及相应的选修人数:electcount(某)fromcgroupbyc#;42、查询不同课程成绩相同的学生和学号、课程号、学生成绩:electditincta.#,b.corefromca,cbwherea.core=b.coreanda.c#<>b. c#;43、查询每门课程成绩最好的前两名:electt1.#a学生ID,t1.c#课程ID,Scorea分数fromct1wherecorein(electtop2corefromcwheret1.c#=c#orderbycoredec)or derbyt1.c#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

sql面试题及答案

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语句面试题及答案

sql语句面试题及答案一、基本查询1. 简单查询请问如何查询一个表中的所有记录?答:可以使用SELECT * FROM table_name; 命令来查询表中的所有记录。

2. 条件查询如果我只想查询特定条件下的记录,例如查询年龄大于30的员工信息,应该怎么做?答:可以使用WHERE子句来进行条件查询,语句如下:SELECT * FROM employees WHERE age > 30;3. 限制查询结果在查询时,如果只想获取前5条记录,应该如何操作?答:可以使用LIMIT关键字来限制查询结果的数量,语句如下:SELECT * FROM table_name LIMIT 5;二、聚合查询1. 计数如何计算某个表中的记录数?答:可以使用COUNT()函数来计算表中的记录数,语句如下:SELECT COUNT(*) FROM table_name;2. 求和如果需要计算某列的总和,例如计算销售总额,应该怎么做?答:可以使用SUM()函数来计算某列的总和,语句如下:SELECT SUM(sales_amount) FROM sales_table;3. 平均值如何求某列的平均值,比如平均工资?答:可以使用AVG()函数来计算某列的平均值,语句如下:SELECT AVG(salary) FROM employees;三、分组查询1. 分组统计请问如何按照某个字段进行分组,并计算每个分组的记录数?答:可以使用GROUP BY子句来进行分组统计,语句如下:SELECT department, COUNT(*) FROM employees GROUP BY department;2. 多列分组如果需要按照多个字段进行分组,应该如何操作?答:可以在GROUP BY子句中列出所有需要分组的字段,语句如下:SELECT department, job_title, COUNT(*) FROM employees GROUP BY department, job_title;3. 分组聚合运算在分组查询中,如何对每个分组执行聚合运算,例如计算每个部门的最高工资?答:可以使用GROUP BY子句结合聚合函数来进行分组聚合运算,语句如下:SELECT department, MAX(salary) AS max_salary FROM employees GROUP BY department;四、连接查询1. 内连接如何查询两个表中有关联的记录?答:可以使用INNER JOIN来查询两个表中有关联的记录,语句如下:SELECT * FROM table1 INNER JOIN table2 ON mon_field = mon_field;2. 左连接如果需要查询左表的所有记录,以及右表中与之关联的记录,没有关联的则显示NULL,应该怎么做?答:可以使用LEFT JOIN来实现,语句如下:SELECT * FROM table1 LEFT JOIN table2 ON mon_field = mon_field;3. 右连接请问如何查询右表的所有记录,以及左表中与之关联的记录?答:可以使用RIGHT JOIN来实现,语句如下:SELECT * FROM table1 RIGHT JOIN table2 ON mon_field = mon_field;五、子查询1. 非相关子查询在查询时,如果需要在WHERE子句中使用一个SELECT语句作为条件,应该怎么做?答:可以使用非相关子查询来实现,语句如下:SELECT * FROM table1 WHERE column_name IN (SELECT column_name FROM table2);2. 相关子查询如果子查询需要引用外部查询的列,应该怎么做?答:可以使用相关子查询,在子查询中使用外部查询的列,语句如下:SELECT * FROM table1 WHERE column_name = (SELECT column_name FROM table2 WHERE related_column = table1.related_column);六、更新和删除操作1. 更新数据请问如何使用SQL语句来更新表中的记录?答:可以使用UPDATE语句来更新表中的记录,语句如下:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;2. 删除数据如果需要删除表中的某些记录,应该如何操作?答:可以使用DELETE语句来删除记录,语句如下:DELETE FROM table_name WHERE condition;七、排序和索引1. 排序查询结果如何对查询结果进行排序?答:可以使用ORDER BY子句对查询结果进行排序,语句如下:SELECT * FROM table_name ORDER BY column_name ASC/DESC;2. 创建索引为了提高查询效率,如何为表中的列创建索引?答:可以使用CREATE INDEX语句来创建索引,语句如下:CREATE INDEX index_name ON table_name (column_name);通过以上问题的探讨,我们了解了SQL语句在面试中常见的问题及答案。

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

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

1.触发器的作用?答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。

它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。

可以联级运算。

如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

2.什么是存储过程?用什么来调用?答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

如果某次操作需要执行多次SQL使用存储过程比单纯SQL语句执行要快。

可以用一个命令对象来调用存储过程。

3.索引的作用?和它的优点缺点是什么?答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。

它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。

索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

3。

什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。

堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。

当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

4.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?答:我是这样做的,尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便。

其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。

最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

5.什么是事务?什么是锁?答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。

sql语句面试题及答案

sql语句面试题及答案

sql语句面试题及答案一、概述SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化语言。

在数据库领域,掌握SQL语句的知识是非常重要的。

本文将提供一些常见的SQL语句面试题及答案,帮助读者更好地了解和掌握SQL语句的应用。

二、查询语句1. 查询所有表的信息答案:SELECT * FROM information_schema.tables;2. 查询指定表的所有字段答案:SELECT COLUMN_NAME FROMinformation_schema.columns WHERE TABLE_NAME='表名';3. 查询指定字段的数据,并按照指定字段进行排序答案:SELECT 列名 FROM 表名 ORDER BY 排序字段 ASC/DESC;4. 使用DISTINCT关键字查询指定字段的不重复数据答案:SELECT DISTINCT 列名 FROM 表名;5. 使用LIMIT关键字查询指定数量的数据答案:SELECT * FROM 表名 LIMIT 数量;三、条件查询1. 查询满足指定条件的数据答案:SELECT * FROM 表名 WHERE 条件;2. 多条件查询答案:SELECT * FROM 表名 WHERE 条件1 AND 条件2;3. 使用LIKE关键字进行模糊查询答案:SELECT * FROM 表名 WHERE 列名 LIKE '关键字%';4. 使用IN关键字查询指定字段值在指定范围内的数据答案:SELECT * FROM 表名 WHERE 列名 IN (值1, 值2, 值3, ...);四、聚合函数1. 求和答案:SELECT SUM(列名) FROM 表名;2. 平均值答案:SELECT AVG(列名) FROM 表名;3. 最大值答案:SELECT MAX(列名) FROM 表名;4. 最小值答案:SELECT MIN(列名) FROM 表名;五、表操作1. 创建表答案:CREATE TABLE 表名 (列名1 数据类型1, 列名2 数据类型2, ...);2. 删除表答案:DROP TABLE 表名;3. 修改表结构答案:ALTER TABLE 表名 ADD 列名数据类型;六、数据操作1. 插入数据答案:INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);2. 更新数据答案:UPDATE 表名 SET 列名=值 WHERE 条件;3. 删除数据答案:DELETE FROM 表名 WHERE 条件;七、表连接答案:SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;2. 左连接答案:SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名;3. 右连接答案:SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;八、子查询1. 子查询作为列答案:SELECT (SELECT COUNT(*) FROM 表名) AS 列名 FROM 表名;2. 子查询作为条件答案:SELECT * FROM 表名 WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 条件);九、索引和优化1. 创建索引答案:CREATE INDEX 索引名 ON 表名 (列名);答案:DROP INDEX 索引名 ON 表名;3. 优化查询答案:使用合适的索引、减少不必要的查询、优化查询语句等。

sql面试题

sql面试题

sql面试题SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。

在面试中,SQL面试题经常被用来评估应聘者对SQL的理解和使用能力。

以下是一些常见的SQL面试题及其答案,供参考。

1. 请解释什么是SQL?SQL是一种用于管理和操作关系型数据库的标准化语言。

它包含了一系列的命令和功能,用于创建、查询、修改和删除数据库中的数据和结构。

2. 请解释什么是关系型数据库?关系型数据库是一种基于表格的数据库管理系统,它使用了表、行和列的结构来组织和存储数据。

表由行和列组成,每行代表一个记录,每列代表一个属性。

3. 请解释什么是主键?主键是一列或一组列,用来唯一地标识表中的每个记录。

它的值必须是唯一且不为空。

主键对于确保数据完整性和表之间的引用非常重要。

4. 请解释什么是外键?外键是用来建立表与表之间的关联的列。

外键的值必须是另一张表中的主键值,用于确保数据的一致性和引用完整性。

5. 请解释什么是索引?索引是一种数据结构,用于快速查找表中的记录。

它可以提高查询的性能,但会增加写操作的开销。

常见的索引类型包括主键索引、唯一索引和普通索引。

6. 请解释什么是事务?事务是一组数据库操作,它们被视为一个不可分割的工作单位。

事务具有四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),以确保数据库的数据一致性和完整性。

7. 请解释什么是子查询?子查询是嵌套在主查询中的查询语句。

它可以作为主查询的条件或提供数据集合。

子查询通常用于限制查询结果或获取相关数据。

8. 请解释什么是联结?联结是将两个或多个表的行组合在一起,形成一个新的集合。

联结通常通过在相关列上进行比较来实现,它是查询多个表的常见操作。

9. 请解释什么是触发器?触发器是与表相关的特殊类型的存储过程。

它在插入、更新或删除数据时自动触发,用于执行特定的操作或应用业务规则。

sql 面试题及答案

sql 面试题及答案

sql 面试题及答案在面试过程中,SQL (Structured Query Language) 是常见的一个考察重点。

以下是一些常见的 SQL 面试题及其答案,帮助你在面试中更好地准备。

1. 什么是 SQL?SQL 是一种用于管理关系数据库系统的标准化语言。

它用于访问和操作数据库中的数据,并提供了创建、修改和删除数据库中的表、视图和存储过程等功能。

2. SQL 的主要分类有哪些?SQL 主要分为以下几类:- 数据定义语言 (DDL):用于创建和管理数据库中的对象,例如CREATE、ALTER、DROP 等。

- 数据操作语言 (DML):用于从数据库中获取、插入、修改和删除数据,例如 SELECT、INSERT、UPDATE 和 DELETE 等。

- 数据控制语言 (DCL):用于定义数据库对象的访问权限,例如GRANT 和 REVOKE 等。

3. 什么是表和视图?- 表:表是存储数据的基本结构,由列和行组成。

每个表代表一个数据实体,如用户、订单等。

- 视图:视图是从一个或多个表中导出的虚拟表。

它基于特定的查询定义,并可像表一样使用。

视图可以简化复杂的查询操作,并提供对数据的安全性和抽象性。

4. 什么是主键、外键和唯一键?- 主键 (Primary Key):主键是用来唯一标识表中每条记录的列或列组合。

它必须保证唯一性和非空性。

- 外键 (Foreign Key):外键是用来建立表之间的关联关系的列。

它建立在另一个表的主键上,并用于维护数据完整性。

- 唯一键 (Unique Key):唯一键是用来确保列或列组合的唯一性,但允许为空值。

5. 什么是索引?索引是一种数据结构,用于加快数据访问的速度。

它可以在一个或多个列上创建,以提高查找、排序和分组等操作的性能。

6. 什么是连接 (JOIN)?连接是指根据一定的条件将两个或多个表中的数据进行合并。

常见的连接类型有内连接 (INNER JOIN)、左连接 (LEFT JOIN)、右连接(RIGHT JOIN) 和全连接 (FULL JOIN)。

sql面试题及答案

sql面试题及答案

sql面试题及答案在现代的软件开发和数据处理领域中,SQL(Structured Query Language)是一种常见的工具和语言。

它被广泛应用于数据库管理系统中,用于查询和操作数据。

因此,对于从事相关工作的人员来说,掌握SQL是必不可少的技能。

在职业发展过程中,可能会面临SQL面试的考核,下面将为您提供一些常见的SQL面试题及其答案。

题目1:什么是SQL?答案:SQL是一种用于管理和处理关系型数据库的编程语言。

它允许我们通过编写结构化的查询语句从数据库中提取和操作数据。

题目2:什么是关系数据库?答案:关系数据库是一种基于关系模型的数据库系统。

它使用表来组织和存储数据,每个表由多个列和行组成,每个列代表一个属性,每个行代表一个记录。

题目3:SQL中的常见数据类型有哪些?答案:常见的SQL数据类型包括整数(INT),浮点数(FLOAT),字符型(VARCHAR),日期时间型(DATE,TIME,DATETIME)等。

不同的数据库可能会有一些特定的数据类型。

题目4:如何创建一个新表?答案:可以使用CREATE TABLE语句来创建一个新表。

例如,创建一个名为"students"的表,拥有id、name和age三个列,可以使用以下语句:```CREATE TABLE students (id INT,name VARCHAR(50),age INT);```题目5:如何插入新的数据行到一个表中?答案:可以使用INSERT INTO语句来插入新的数据行。

例如,向"students"表中插入一条记录,可以使用以下语句:```INSERT INTO students (id, name, age) VALUES (1, 'John', 20);```题目6:如何查询表中的数据?答案:可以使用SELECT语句来从表中查询数据。

例如,查询"students"表中所有记录的id和name列,可以使用以下语句:SELECT id, name FROM students;```题目7:如何更新表中的数据?答案:可以使用UPDATE语句来更新表中的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S Q L数据库面试题以及答案精编Document number:WTT-LKK-GBB-08921-EIGG-22986Student(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#='00 1')a, (select s#,score from SC where c#='002')b Whe re > and # = #;2、查询平均成绩大于60分的同学的学号和平均成绩select S#, avg(score) from sc group by S# having av g(score)>603、查询所有同学的学号、姓名、选课数、总成绩select #, , count#), sum(score) from student left o uter join SC on # = # group by #, Sname4、查询姓‘李’的老师的个数:select count(distinct(Tname))from teacherwhere tname like '李%';5、查询没有学过“叶平”老师可的同学的学号、姓名:select #,from Studentwhere S# not in (select distinct#) from SC,Course,T eacherwhere #=# AND #=# AND ='叶平');6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Studentwhere S# in (select S# from SC ,Course ,Teacher where #=# and #=#and ='叶平' group by S#having count#)=(select count(C#) from Course,Teache rwhere #=# and Tname='叶平'));7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名:select #,from Student,SC where #=#and #='001'andexists( Select * from SC as SC_2 where #=# and #='0 02');8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名:Select S#,Snamefrom (select #,,score ,(select score from SC SC_2 where #=# and #='002') s core2from Student,SCwhere #=# and C#='001') S_2where score2 < score;9、查询所有课程成绩小于60的同学的学号、姓名:select S#, snamefrom studentwhere s# not in(select # from student, sc where # = # and score>6 0);10、查询没有学全所有课的同学的学号、姓名:select #,from student, scwhere #=#group by #,having count(c#)<(select count(c#) from course); 11、查询至少有一门课与学号为“1001”同学所学相同的同学的学号和姓名:select s#, Snamefrom Student, SCwhere # = #and c# in (select c# from SC where s#='1001');12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct # , snamefrom student, scwhere #=#and c# in (select C# from sc where s#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩:Update Sc Set Score=(Select Avg(s2_Score) From sc s 2 Where #=#)Where c# IN(Select c# From sc cs INNER JOIN Teacher tc ON #=# WHERE tname ='叶平')14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名:select s# from sc where c# in(select c# from sc where s#='1002')group by s# having count(*)=(select count(*) from sc where s#='1002');15、删除学习“叶平”老师课的SC表记录:delect scfrom course, Teacherwhere #=#and #=#and tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、002号课的平均成绩:Insert SC select S#,'002',(Select avg(score) from SC where C#='002')from Student where S# not in (Select S# from SC whe re C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,数据库,企业管理,英语,有效课程数,有效平均分:select s# as 学生ID,(select score from sc where #=# and c#='004') as 数据库,(select score from sc where #=# and c#='001') as 企业管理,(select score from sc where #=# and c#='006') as 英语,count(*) as 有效课程数, avg as 平局成绩from sc as tgroup by s#order by avg18、查询各科成绩最高和最低的分:以如下的形式显示:课程ID,最高分,最低分select # as 课程ID, as 最高分,as 最低分from sc L, sc Rwhere # = #and = (select maxfrom sc IL, student as IMwhere #=# and #=#group by #)and = (select minfrom sc as IRwhere #=#group by #);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序:SELECT # AS 课程号,maxAS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELS E 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere #=#GROUP BY #ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 T HEN 1 ELSE 0 END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用”1行”显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004):21、查询不同老师所教不同课程平均分从高到低显示:SELECT max#) AS 教师ID,MAX AS 教师姓名,# AS 课程ID,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere #=# and #=#GROUP BY #ORDER BY AVG(Score) DESC22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML(003),数据库(004):23、统计下列各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ 小于60] :SELECT # as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85] ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]FROM SC,Coursewhere #=#GROUP BY #,Cname;24、查询学生平均成绩及其名次:SELECT 1+(SELECT COUNT( distinct 平均成绩) FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S# ) AS T1 WHERE 平均成绩 > T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S# ) AS T2ORDER BY 平均成绩 desc;25、查询各科成绩前三名的记录(不考虑成绩并列情况):SELECT # as 学生ID,# as 课程ID,Score as 分数FROM SC t1WHERE score IN(SELECT TOP 3 scoreFROM SCWHERE #= C#ORDER BY score DESC)26、查询每门课程被选修的学生数:select c#, count(s#)from scgroup by c#;27、查询出只选修一门课程的全部学生的学号和姓名:select #, , count(c#) as 选课数from sc,studentwhere # =#group by #,having count(c#)=1;28、查询男生、女生人数:select count(Ssex) as 男生人数from studentgroup by Ssexhaving Ssex='男';select count(Ssex) as 女生人数from studentgroup by Ssexhaving Ssex='女';29、查询姓“张”的学生名单:select snamefrom studentwhere sname like '张%';30、查询同名同姓的学生名单,并统计同名人数:select sanme,count(*)from studentgroup by snamehavang count(*)>1;31、1981年出生的学生名单(注:student表中sage列的类型是datetime):select sname, convert(char(11),DATEPART(year,sage)) as agefrom studentwhere convert(char(11),DATEPART(year,Sage))='1981';32、查询平均成绩大于85的所有学生的学号、姓名和平均成绩:select Sname,# ,avg(score)from Student,SCwhere #=#group by #,Snamehaving avg(score)>85;33、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列:select C#, avg(score)from scgroup by c#order by avg(score), c# desc;34、查询课程名称为“数据库”,且分数低于60的学生名字和分数:select sname, isnull(score,0)from student, sc ,coursewhere #=# and #=# and ='数据库' and score<60;35、查询所有学生的选课情况:select #,#,sname,cnamefrom sc,student coursewhere #=# and #=#;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数:select distinct #,,#,from student,scwhere >=70 and #=#;37、查询不及格的课程,并按课程号从大到小的排列:select c#from scwhere score<60order by c#;38、查询课程编号为“003”且课程成绩在80分以上的学生的学号和姓名:select #,from sc,studentwhere #=# and score>80 and c#='003';39、求选了课程的学生人数:select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩:select ,scorefrom student,sc,course c, teacherwhere #=# and #=#and #=#and ='叶平'and =(select max(score) from sc where c#=#);41、查询各个课程及相应的选修人数:select count(*) from sc group by c#;42、查询不同课程成绩相同的学生和学号、课程号、学生成绩:select distinct #,from sc a ,sc bwhere =and #<>#;43、查询每门课程成绩最好的前两名:select # as 学生ID,# 课程ID, Score as 分数from sc t1where score in (select top 2 score from scwhere #=c#order by score desc)order by #;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

相关文档
最新文档