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

合集下载

sql 相关的查询面试题收集及答案

sql 相关的查询面试题收集及答案

sql 相关的查询面试题收集及答案问题:sql 相关的查询面试题收集及答案回答:一//查询某表中的第30到40行的数据select * from 表名where 字段in( select top 40 字段from 表名)and 字段not in( select top30 字段from 表名)或者select top 10 * from 表名where 字段not in( select top 30 字段from 表名)二//查询一个表中存在重复的字段“字段1”select DISTINCT 字段1 from 表名having count(字段1)>1 group by 字段1(并显示可能重复的次数)select DISTINCT 字段1,count(字段1) As 次数from 表名having count(字段1)>1 group by 字段1某门户网站数据库职位笔试题1、事务是什么2、oracle中truncate和delete命令有何区别3、Oracle中char和varchar2数据类型有什么区别有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别4、参见如下表结构出版社:出版社代码char(2),出版社名称varchar2(32)图书:图书编号char(8),图书名称varchar2(128),出版社代码char(2),作者代号char(4),图书简介varchar2(128)作者:作者代号char(4),作者名称varchar2(10),性别char(1),年龄number(3),文学方向varchar2(64)获奖名单:获奖日期date,获奖人员char(4)编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者信息的SQL语句(提示:使用notin、not exists以及外关联三种方法,并说明哪种方法最优。

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

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 表名;3. 如何计算某一列的平均值?答案:使用AVG(列名)函数来计算某一列的平均值,语法为:SELECT AVG(列名) FROM 表名;四、连接查询相关的面试题1. 如何在两个表之间进行连接查询?答案:使用JOIN语句来进行连接查询,语法为:SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;2. 如何实现左连接和右连接?答案:使用LEFT JOIN或RIGHT JOIN来实现左连接和右连接,语法为:SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列; 或SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;五、其他面试题1. 如何创建一个新表?答案:使用CREATE TABLE语句来创建一个新表,语法为:CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, 列3 数据类型);2. 如何修改表的结构?答案:使用ALTER TABLE语句来修改表的结构,语法为:ALTER TABLE 表名 ADD 列名数据类型; 或 ALTER TABLE 表名DROP 列名;3. 如何在表中创建索引?答案:使用CREATE INDEX语句来在表中创建索引,语法为:CREATE INDEX 索引名 ON 表名 (列名);总结:本文介绍了一些常见的SQL语句面试题和对应的答案,涵盖了查询、插入、更新、删除、聚合函数、连接查询、表的创建和修改等方面。

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))gocreate table [order]ﻫ(ID int primary key,CustomerID int foreign key references customer(id),Revenue float)go--查询ﻫselect Customer、ID, sum(isnull([Order]、Revenue,0))ﻫfrom customer full join [order]on([order]、custome rid=customer、id)groupby customer、idselectcustomer、id,sum(order、revener) fromorder,customer where customer、id=customerid group by customer、idselect customer、id,sum(order、revener)from customer fulljoin orderon(order、customerid=customer、id)group bycustomer、id5数据库(10)a tabel called “performance”contain :name andscore,please用SQL语言表述如何选出score最high得一个(仅有一个)仅选出分数,Select max(score) from performance仅选出名字,即选出名字,又选出分数:select top 1score,name fromperorder by scoreselect name1,score from per where score in/=(select max(score)fromper)、、、、、4有关系s(sno,sname) c(cno,cname) sc(sno,cno,grade)1 问上课程"db"得学生noselect count(*)from c,scwhere came='db’ and co=scoselect count(*)fromsc wherecno=(select cnofrom c where came=’db')2成绩最高得学生号select sno from sc wheregrade=(select max(grade)from sc )3 每科大于90分得人数select came,count(*)from c,scwhere co=scoand sc、grad e>90 group by cameselect came,count(*)from c join sc on co=sco and sc、grade>90group bycame数据库笔试题*ﻫ建表:dept:ﻫ deptno(primary key),dname,locﻫemp:empno(primary key),ename,job,mgr,sal,deptnoﻫ*/1列出emp表中各部门得部门号,最高工资,最低工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno from e mp groupby deptno;2 列出emp表中各部门job为'CLERK'得员工得最低工资,最高工资select max(sal)as 最高工资,min(sal) as 最低工资,deptno as部门号fromempwherejob = 'CLERK' group by deptno;3对于emp中最低工资小于1000得部门,列出job为’CLERK’得员工得部门号,最低工资,最高工资ﻫselect max(sal)as最高工资,min(sal)as最低工资,deptno as 部门号from empas bﻫwhere job='CLERK'and 1000〉(select min(sal)from emp as a where a、deptno=b、de ptno) groupby b、deptno4 根据部门号由高而低,工资有低而高列出每个员工得姓名,部门号,工资select deptno as部门号,ename as姓名,sal as 工资fromemp order by deptno desc,sal asc5 写出对上题得另一解决方法(请补充)6 列出’张三'所在部门中每个员工得姓名与部门号ﻫselect ename,deptno fromemp wheredeptno =(selectdeptno from emp where ename='张三’)7列出每个员工得姓名,工作,部门号,部门名selectename,job,emp、deptno,dept、dnamefrom emp,deptwhereemp、deptno=dept、deptno8 列出emp中工作为'CLERK'得员工得姓名,工作,部门号,部门名ﻫselect ename,job,dept、deptno,dnamefrom emp,deptwhered ept、deptno=emp、deptnoandjob='CLERK'9对于emp中有管理者得员工,列出姓名,管理者姓名(管理者外键为mgr)ﻫselec ta、enameas 姓名,b、enameas 管理者fromemp as a,empas b where a、mgrisnot null and a、mgr=b、empno10 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为'CLERK'得员工名与工作selectdname as 部门名,dept、deptnoas 部门号,ename as 员工名,jobas 工作from dept,emp ﻫwheredept、deptno*=emp、deptno and job= 'CLE RK’11对于工资高于本部门平均水平得员工,列出部门号,姓名,工资,按部门号排序select a、deptno as部门号,a、enameas姓名,a、sal as工资fr om empas aﻫwherea、sal〉(select avg(sal) from emp as bwhere a、deptno=b、deptno)orderbya、deptno12对于emp,列出各个部门中平均工资高于本部门平均水平得员工数与部门号,按部门号排序select count(a、sal)as 员工数,a、deptno as 部门号from emp asaﻫwhere a、sal〉(select avg(sal)fromemp asbwherea、deptno=b、deptno)group by a、deptnoorder by a、deptno13对于emp中工资高于本部门平均水平,人数多与1人得,列出部门号,人数,按部门号排序ﻫselect count(a、empno)as员工数,a、deptnoas部门号,avg(sal)as 平均工资from emp as awhere(select count(c、empno) from emp asc where c、deptno =a、deptno and c、sal>(select avg(sal)from empas bwhere c、deptno=b、deptno))>1groupby a、deptno order by a、deptno14对于emp中低于自己工资至少5人得员工,列出其部门号,姓名,工资,以及工资少于自己得人数select a、deptno,a、ename,a、sal,(select count(b、ename)from empas b where b、sal<a、sal) as人数from emp as a where(select count(b、ename)from emp as b where b、sal <a、sal)>5数据库笔试题及答案第一套一、选择题1、下面叙述正确得就是CCBAD______.A、算法得执行效率与数据得存储结构无关B、算法得空间复杂度就是指算法程序中指令(或语句)得条数C、算法得有穷性就是指算法必须能在执行有限个步骤之后终止D、以上三种描述都不对2、以下数据结构中不属于线性数据结构得就是______.A、队列B、线性表C、二叉树D、栈3、在一棵二叉树上第5层得结点数最多就是______。

SQL笔试题带答案

SQL笔试题带答案

SQL笔试题带答案一单词解释(2分/个) 34分Data 数据Database 数据库RDBMS 关系数据库管理系统GRANT 授权REVOKE 取消权限DENY 拒绝权限DECLARE 定义变量PROCEDURE存储过程事务Transaction 触发器TRIGGER 继续continue 唯一unqiue主键primary key 标识列identity 外键foreign key 检查check 约束constraint二编写SQL语句(5分/题) 50分(包含笔试题问题和解答答案)1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话Create table stu (学号int ,姓名varchar(8),年龄int,性别varchar(4),家庭地址varchar(50),联系电话int);2) 修改学生表的结构,添加一列信息,学历Alter table stu add 学历varchar(6);3) 修改学生表的结构,删除一列信息,家庭住址Alter table stu drop column 家庭地址4) 向学生表添加如下信息:学号姓名年龄性别联系电话学历1A22男123456小学2B21男119中学3C23男110高中4D18女114大学Insert into stu values(1,’A’,22,’男’,123456,’小学’)Insert into stu values(2,’B’,21,’男’,119,’中学’)Insert into stu values(3,’C’,23,’男’,110,’高中’)Insert into stu values(4,’D’,18,’女’,114,’大学’)5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”Update stu set 学历=’大专’where 联系电话like ‘11%’6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除Delect from stu where 性别=’男’and 姓名like ‘c%’7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来Select 姓名,学号from stu where 年龄<22 and 学历=’大专’8) 查询学生表的数据,查询所有信息,列出前25%的记录Select top 25 percent * from stu9) 查询出所有学生的姓名,性别,年龄降序排列Select 姓名,性别from stu order by 年龄desc10) 按照性别分组查询所有的平均年龄Select avg(年龄) from stu group by 性别三填空(3分/题) 36分(包含笔试题问题和解答答案)1) 索引分为__聚集索引___和__非聚集索引__在一张表上最多可以创建1个聚集索引_索引。

sql面试题及答案

sql面试题及答案

sql面试题及答案数据库面试的技术员,对常见的面试题目了解会对面试结果有所帮助。

以下是为大家的sql面试题及答案,希望可以帮到大家。

1. 在一个查询中,使用哪一个关键字能够除去重复列值?答案:使用distinct关键字2. 什么是快照?它的作用是什么?答案:快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。

快照对于拥有不能停顿的应用或具有常翻开文件的文件系统的备份非常重要。

对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。

3. 解释存储过程和触发器答案:存储过程是一组Transact-SQL语句,在一次编译后可以执行屡次。

因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。

触发器是一种特殊类型的存储过程,不由用户直接调用。

创立触发器时会对其进展定义,以便在对特定表或列作特定类型的数据修改时执行。

4. SQL Server是否支持行级锁,有什么好处?答案:支持动态行级锁定SQL Server 2000动态地将查询所引用的每一个表的锁定粒度调整到适宜的级别。

当查询所引用的少数几行分散在一个大型表中时,优化数据并行访问的最正确方法是使用粒度锁,如行锁。

但是,如果查询引用的是一个表中的大多数行或所有行,优化数据并行访问的最正确方法可以是锁定整个表,以尽量减少锁定开销并尽快完成查询。

SQL Serve 2000通过为每个查询中的每个表选择适当的锁定级别,在总体上优化了数据并发访问。

对于一个查询,如果只引用一个大型表中的几行,那么数据库引擎可以使用行级锁定;如果引用一个大型表的几页中的多行,那么使用页级锁定;如果引用一个小型表中的所有行,那么使用表级锁定。

5. 数据库日志干什么用,数据库日志满的时候再查询数据库时会出现什么情况。

答案:每个数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。

6. 存储过程和函数的区别?答案:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表7. 事务是什么?答案:事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:(1) 原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

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面试题数据结构如下:模拟数据:ss1:选修过“李明”老师讲授课程的所有学生姓名步骤:1找到选修老师的学生id参考答案1参考答案22:找出没有选修过“李明”老师讲授课程的所有学生姓名步骤1 找见选修李明老师的学生参考答案1参考答案23:列出有两门以上(含两门)不及格课程的学生姓名及其平均成绩步骤:找见不及格的成绩的数量大于2的学生id参考答案1参考答案24:列出即学过名称为“1”号课程,又学过名称为“2”号课程的所有学生姓名步骤1 查询出课程1步骤2 查询出课程2参考答案1参考答案25:列出名称为“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号步骤1 找出课程1的所有成绩步骤2找出2号同学的成绩参考答案1参考答案26:列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩步骤1 找出一号课的成绩步骤2找出2号课的成绩参考答案1参考答案27:查询不选修课程编号为'5'学员的编号,姓名步骤:先查出选修5课程的学员参考答案1参考答案28:查询选修课程编号为'1'学员的编号,姓名步骤1 查询选修课程1的学号参考答案1参考答案29:查询选修课程名称为'5'的学员的编号,姓名步骤: 找出选修课程名称为5的学员编号参考答案1参考答案210:查询选修了课程的学员人数参考答案1参考答案211:查询选修全部课程的学员的编号,姓名步骤1 查询出一共有多少课程步骤2 查询用户的选修参考答案12:查询选修课程超过2门的学生步骤1 查询出一共有多少课程参考答案13:查询至少有3名学生选修的并且课程号2为的学生及平均分数步骤:至少有3名学生选修的参考答案14:查询学生选修了至少3门课程并且课程号3为的学生及平均分数步骤1 学生选修了至少3门课程参考答案115:查询最低分数大于60分,最高分数小于95分的学生学生的编号步骤1 先找出每个学生的最高分步骤2 找出最低分参考答案1参考答案216:显示选修了课程名称为“1”号课程的成绩高于“7”号同学成绩的所有同学的学生的编号步骤找出课程1的成绩步骤2 找出7号同学1号课程的成绩参考答案参考答案217:查询成绩比该课程平均成绩低的同学的成绩表步骤1:找出每门课程的平均成绩参考答案118:查询选修某课程的同学人数多于2人的课程号,课程名,教师姓名步骤找出选修的人数达鱼2人的课程id参考答案1参考答案219:横向列出每个学生的成绩(假说固定有门课程)。

SQL考试试题含答案

SQL考试试题含答案

SQL考试试题含答案1.选择题:以下哪个SQL命令用于创建一个新的数据库?A.CREATE TABLEB.CREATE DATABASEC.DROP DATABASED.ALTER DATABASE答案:B2.填空题:在SQL中,使用____关键字可以删除一个已经存在的表。

答案:DROP TABLE3.判断题:以下SQL语句是否正确?"SELECT*FROM users WHERE name='John';"A.正确B.错误答案:A4.简答题:解释SQL中的主键(PRIMARY KEY)是什么?答案:主键是一个或多个字段的组合,用于在数据库表中唯一标识每条记录。

一个表只能有一个主键,且主键的值不能为NULL。

5.选择题:在SQL中,哪个函数用于计算表中所有记录的总数?A.COUNT(*)B.SUM(*)C.AVG(*)D.MAX(*)答案:A6.填空题:在SQL中,使用____关键字可以更新表中的记录。

答案:UPDATE7.判断题:以下SQL语句是否正确?"INSERT INTO customers(name,email)VALUES('Alice','*****************');"A.正确B.错误答案:A8.简答题:解释SQL中的外键(FOREIGN KEY)是什么?答案:外键是一个字段(或一组字段),它在一个表中引用另一个表的主键。

外键用于建立两个表之间的关系,并确保数据的引用完整性。

9.选择题:在SQL中,哪个命令用于删除数据库中的表?A.DELETE TABLEB.DROP TABLEC.REMOVE TABLED.CLEAR TABLE答案:B10.填空题:在SQL中,使用____关键字可以添加一个新列到现有的表中。

答案:ALTER TABLE。

经典的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#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup 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#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC whereStudent.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');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere 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 whereTeacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (selectStudent.S#,Student.Sname,score ,(select score from SC SC_2 whereSC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.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 whereS#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学生ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.C# = R.C# andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.C# = IL.C# and IM.S#=IL.S#GROUP BY IL.C#)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.C# = IR.C#GROUP BY IR.C#);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.C#=course.C#GROUP BY t.C#ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数 ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.Sname AS 学生姓名 ,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0)FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# 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 SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩 > T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩 desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#;27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname havingcount(C#)=1;28、查询男生、女生人数Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数select Sname,count(*) from Student group by Snamehaving count(*)>1;;31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age from studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Snamehaving avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# ;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#;37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C# ;38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Sname from SC,Student whereSC.S#=Student.S# and Score>80 and C#='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修人数select count(*) from sc group by C#;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.S#,B.score from SC A ,SC B whereA.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

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

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))gocreate table [order]?(ID int primary key,CustomerID int foreign key references customer(id),Reven ue float)go--查询?select Customer、ID, sum(isnull([Order]、Revenue,0))?from customer full join [order]on([or der]、custome rid=customer、id)groupby customer、idselectcustomer、id,sum(order、revener) fromorder,customer where customer、id=customerid group by customer、idselect customer、id,sum(order、revener)from customer fulljoin orderon(order、customerid=customer、id)group bycustomer、id5数据库(10)a tabel called “performance”contain :name andscore,please用SQL语言表述如何选出score最high得一个(仅有一个)仅选出分数,Select max(score) from performance 仅选出名字,即选出名字,又选出分数:select top 1score,name fromperorder by scoreselect name1,score from per where score in/=(select max(score)fromper)、、、、、4有关系s(sno,sname) c(cno,cname) sc(sno,cno,grade)1 问上课程"db"得学生noselect count(*)from c,scwhere came='db’ and co=scoselect count(*)fromsc wherecno=(select cnofrom c where came=’db')2成绩最高得学生号select sno from sc wheregrade=(select max(grade)from sc )3 每科大于90分得人数select came,count(*)from c,scwhere co=scoand sc、grad e>90 group by cameselect came,count(*)from c join sc on co=sco and sc、grade>90group bycame数据库笔试题*?建表:dept:? deptno(primary key),dname,loc?emp:empno(primary key),ename,job,mgr,sal,deptno?*/1列出emp表中各部门得部门号,最高工资,最低工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno from e mp groupby deptno;2 列出emp表中各部门job为'CLERK'得员工得最低工资,最高工资select max(sal)as 最高工资,min(sal) as 最低工资,deptno as部门号fromempwherejob = 'CLERK' group by deptno;3对于emp中最低工资小于1000得部门,列出job为’CLERK’得员工得部门号,最低工资,最高工资?select max(sal)as最高工资,min(sal)as最低工资,deptno as 部门号from empas b?where job='CLERK'and 1000〉(select min(sal)from emp as a where a、deptno=b、de ptno) groupby b、deptno4 根据部门号由高而低,工资有低而高列出每个员工得姓名,部门号,工资select deptno as部门号,ename as姓名,sal as 工资fromemp order by deptno desc,sal asc5 写出对上题得另一解决方法(请补充)6 列出’张三'所在部门中每个员工得姓名与部门号?select ename,deptno fromemp wheredeptno =(selectdeptno from emp where ename='张三’)7列出每个员工得姓名,工作,部门号,部门名selectename,job,emp、deptno,dept、dnamefrom emp,deptwhereemp、deptno=dept、deptno8 列出emp中工作为'CLERK'得员工得姓名,工作,部门号,部门名?select ename,job,dept、deptno,dnamefrom emp,deptwhered ept、deptno=emp、deptnoandjob ='CLERK'9对于emp中有管理者得员工,列出姓名,管理者姓名(管理者外键为mgr)?selec ta、enameas 姓名,b、enameas 管理者fromemp as a,empas b where a、mgrisnot null and a、mgr=b、empno10 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为'CLERK'得员工名与工作selectdname as 部门名,dept、deptnoas 部门号,ename as 员工名,jobas 工作from dept,emp ?wheredept、deptno*=emp、deptno and job= 'CLE RK’11对于工资高于本部门平均水平得员工,列出部门号,姓名,工资,按部门号排序select a、deptno as部门号,a、enameas姓名,a、sal as工资fr om empas a?wherea、sal〉(select avg(sal) from emp as bwhere a、deptno=b、deptno)orderbya、deptno12对于emp,列出各个部门中平均工资高于本部门平均水平得员工数与部门号,按部门号排序select count(a、sal)as 员工数,a、deptno as 部门号from emp asa?where a、sal〉(select avg(sal)fromemp asbwherea、deptno=b、deptno)group by a、deptnoorder by a、deptno13对于emp中工资高于本部门平均水平,人数多与1人得,列出部门号,人数,按部门号排序?select count(a、empno)a s员工数,a、deptnoas部门号,avg(sal)as 平均工资from emp as awhere(select count(c、empno) from emp asc where c、deptno =a、deptno and c、sal>(select avg(sal)from empas bwhere c、deptno=b、deptno))>1 groupby a、deptno order by a、deptno14对于emp中低于自己工资至少5人得员工,列出其部门号,姓名,工资,以及工资少于自己得人数select a、deptno,a、ename,a、sal,(select count(b、ename)from empas b where b、sal<a、sal) as人数from emp as a where(select count(b、ename)f rom emp as b where b、sal <a、sal)>5数据库笔试题及答案第一套一、选择题1、下面叙述正确得就是CCBAD______.A、算法得执行效率与数据得存储结构无关B、算法得空间复杂度就是指算法程序中指令(或语句)得条数C、算法得有穷性就是指算法必须能在执行有限个步骤之后终止D、以上三种描述都不对2、以下数据结构中不属于线性数据结构得就是______.A、队列B、线性表C、二叉树D、栈3、在一棵二叉树上第5层得结点数最多就是______。

SQL经典面试题及答案

SQL经典面试题及答案

1。

用一条SQL 语句查询出每门课都大于80 分的学生姓名name kecheng fenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90A: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)〉80select name from table group by name having count(kecheng)〉=3 and min (fenshu)>=802. 学生表如下:自动编号学号姓名课程编号课程名称分数1 2005001 张三0001 数学692 2005002 李四0001 数学893 2005001 张三0001 数学69删除除了自动编号不同,其他都相同的学生冗余信息A: delete tablename where 自动编号not in(select min(自动编号) from tablename group by 学号,姓名,课程编号, 课程名称, 分数)3。

面试题:怎么把这样一个表儿year month amount1991 1 1.11991 2 1.21991 3 1。

31991 4 1。

41992 1 2.11992 2 2.21992 3 2.31992 4 2。

4查成这样一个结果year m1 m2 m3 m41991 1。

1 1.2 1.3 1.41992 2.1 2.2 2。

3 2.4答案一、select year,(select amount from aaa m where month=1 and m。

year=aaa.year)as m1,(select amount from aaa m where month=2 and m。

SQL_面试题及答案

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。

sql面试题目汇总(3篇)

sql面试题目汇总(3篇)

第1篇第一部分:基础SQL查询1. 如何使用SELECT语句从数据库中查询数据?- 答案:SELECT语句用于从数据库表中查询数据。

基本语法如下:```sqlSELECT column1, column2, ... FROM table_name;```2. 如何使用WHERE子句对查询结果进行过滤?- 答案:WHERE子句用于过滤查询结果,只返回满足特定条件的行。

语法如下: ```sqlSELECT column1, column2, ... FROM table_name WHERE condition;```3. 如何使用ORDER BY子句对查询结果进行排序?- 答案:ORDER BY子句用于对查询结果进行排序。

语法如下:```sqlSELECT column1, column2, ... FROM table_name ORDER BY column1ASC|DESC;```4. 如何使用LIMIT子句限制查询结果的数量?- 答案:LIMIT子句用于限制查询结果的数量。

语法如下:```sqlSELECT column1, column2, ... FROM table_name LIMIT row_count;```5. 如何使用DISTINCT关键字去除查询结果中的重复值?- 答案:DISTINCT关键字用于去除查询结果中的重复值。

语法如下:```sqlSELECT DISTINCT column1, column2, ... FROM table_name;```第二部分:高级SQL查询6. 如何使用JOIN子句进行多表查询?- 答案:JOIN子句用于连接两个或多个表,并返回满足连接条件的行。

常见的JOIN类型包括:- INNER JOIN:返回两个表中匹配的行。

- LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有行,即使右表中没有匹配的行。

- RIGHT JOIN(或RIGHT OUTER JOIN):返回右表的所有行,即使左表中没有匹配的行。

SQL考试题库及答案

SQL考试题库及答案

SQL考试题库及答案1. 选择题:以下哪个SQL命令用于创建一个新的数据库?A. CREATE TABLEB. CREATE DATABASEC. DROP DATABASED. ALTER DATABASE答案:B2. 填空题:在SQL中,使用____关键字可以删除一个已经存在的表。

答案:DROP TABLE3. 判断题:以下SQL语句是否正确?"SELECT * FROM users WHERE name = 'John';"A. 正确B. 错误答案:A4. 简答题:解释SQL中的主键(PRIMARY KEY)是什么?答案:主键是一个或多个字段的组合,用于在数据库表中唯一标识每条记录。

一个表只能有一个主键,且主键的值不能为NULL。

5. 选择题:在SQL中,哪个函数用于计算表中所有记录的总数?A. COUNT(*)B. SUM(*)C. AVG(*)D. MAX(*)答案:A6. 填空题:在SQL中,使用____关键字可以更新表中的记录。

答案:UPDATE7. 判断题:以下SQL语句是否正确?"INSERT INTO customers (name, email)VALUES('Alice','*****************');"A. 正确B. 错误答案:A8. 简答题:解释SQL中的外键(FOREIGN KEY)是什么?答案:外键是一个字段(或一组字段),它在一个表中引用另一个表的主键。

外键用于建立两个表之间的关系,并确保数据的引用完整性。

9. 选择题:在SQL中,哪个命令用于删除数据库中的表?A. DELETE TABLEB. DROP TABLEC. REMOVE TABLED. CLEAR TABLE答案:B10. 填空题:在SQL中,使用____关键字可以添加一个新列到现有的表中。

答案:ALTER TABLE结束语:以上是SQL考试题库及答案,希望能够帮助考生更好地理解和掌握SQL的基本概念和操作。

sql语句 面试题

sql语句 面试题

sql语句面试题在数据库开发和管理领域,SQL(Structured Query Language)是一种用于操纵和管理关系型数据库的标准语言。

在面试过程中,面试官往往会提出一系列关于SQL语句的面试题目,以评估应聘者的数据库技能和知识水平。

本文将分享一些常见的SQL语句面试题目及其解答,帮助读者更好地准备面试。

1. 查询员工表中所有员工的姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表;```2. 查询员工表中工资大于5000的员工姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 > 5000;```3. 查询员工表中工资在4000到6000之间的员工姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 BETWEEN 4000 AND 6000;```4. 查询员工表中工资最高的员工姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 = (SELECT MAX(工资) FROM 员工表);```5. 查询员工表中每个部门的平均工资。

```sqlSELECT 部门, AVG(工资) FROM 员工表 GROUP BY 部门;```6. 查询员工表中工资大于所在部门平均工资的员工姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表 WHERE 工资 > (SELECT AVG(工资) FROM 员工表 GROUP BY 部门);```7. 查询员工表中工资排名第二的员工姓名和工资。

```sqlSELECT 姓名, 工资 FROM 员工表 ORDER BY 工资 DESC LIMIT 1,1;```8. 查询员工表中每个部门的员工数目。

```sqlSELECT 部门, COUNT(*) FROM 员工表 GROUP BY 部门;```9. 查询员工表中没有分配部门的员工数目。

sql数据库面试题及答案

sql数据库面试题及答案

sql数据库面试题及答案【篇一:sql数据库经典面试题(笔试题)】=txt>1.一道sql语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成下列结果, 该如何写sql语句?胜负2005-05-09 2 22005-05-10 1 2------------------------------------------create table #tmp(rq varchar(10),shengfu nchar(1))insert into #tmp values(2005-05-09,胜)insert into #tmp values(2005-05-09,胜)insert into #tmp values(2005-05-09,负)insert into #tmp values(2005-05-09,负)insert into #tmp values(2005-05-10,胜)insert into #tmp values(2005-05-10,负)insert into #tmp values(2005-05-10,负)1)select rq, sum(case when shengfu=胜 then 1 else 0 end)胜,sum(case when shengfu=负 then 1 else 0 end)负 from #tmp group by rq2) select n.rq,n.勝,m.負 from (select rq,勝=count(*) from #tmp where shengfu=胜group by rq)n inner join(select rq,負=count(*) from #tmp where shengfu=负group by rq)m on n.rq=m.rq3)select a.col001,a.a1 胜,b.b1 负 from(select col001,count(col001) a1 from temp1 where col002=胜group by col001) a,(select col001,count(col001) b1 from temp1 where col002=负group by col001) bwhere a.col001=b.col0012.请教一个面试中遇到的sql语句的查询问题表中有a b c三列,用sql语句实现:当a列大于b列时选择a列否则选择b列,当b列大于c列时选择b列否则选择c列。

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

28、数据库:抽出部门,平均工资,要求按部门的字符串顺序排序,不能含有"human resource"部门,employee结构如下:employee_id, employee_name,depart_id,depart_name,wage答:select depart_name, avg(wage)from employee where depart_name <> 'human resource'group by depart_name order by depart_name--------------------------------------------------------------------------29、给定如下SQL数据库:Test(num INT(4)) 请用一条SQL语句返回num的最小值,但不许使用统计功能,如MIN,MAX等答:select top 1 num from Test order by num--------------------------------------------------------------------------33、一个数据库中有两个表:一张表为Customer,含字段ID,Name;一张表为Order,含字段ID,CustomerID(连向Customer中ID的外键),Revenue; 写出求每个Customer的Revenue总与的SQL语句。

建表create table customer(ID int primary key,Name char(10))gocreate table [order](ID int primary key,CustomerID int foreign key references customer(id) , Revenue float)go--查询select Customer、ID, sum( isnull([Order]、Revenue,0) )from customer full join [order] on( [order]、customerid=customer、id ) group by customer、idselect customer、id,sum(order、revener) from order,customer where customer、id=customerid group by customer、idselect customer、id, sum(order、revener ) from customer full join order on( order、customerid=customer、id ) group by customer、id5数据库(10)a tabel called “performance”contain :name and score,please 用SQL语言表述如何选出score最high的一个(仅有一个)仅选出分数,Select max(score) from performance仅选出名字,即选出名字,又选出分数:select top 1 score ,name from per order by scoreselect name1,score from per where score in/=(select max(score) from per)、、、、、4 有关系s(sno,sname) c(cno,cname) sc(sno,cno,grade)1 问上课程"db"的学生noselect count(*) from c,sc where c、cname='db' and c、cno=sc、cno select count(*) from sc where cno=(select cno from c where c、cname='db')2 成绩最高的学生号select sno from sc where grade=(select max(grade) from sc )3 每科大于90分的人数select c、cname,count(*) from c,sc where c、cno=sc、cno and sc、grade>90 group by c、cnameselect c、cname,count(*) from c join sc on c、cno=sc、cno and sc、grade>90 group by c、cname数据库笔试题*建表:dept:deptno(primary key),dname,locemp:empno(primary key),ename,job,mgr,sal,deptno*/1 列出emp表中各部门的部门号,最高工资,最低工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno from emp group by deptno;2 列出emp表中各部门job为'CLERK'的员工的最低工资,最高工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号from emp where job = 'CLERK' group by deptno;3 对于emp中最低工资小于1000的部门,列出job为'CLERK'的员工的部门号,最低工资,最高工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号from emp as bwhere job='CLERK' and 1000>(select min(sal) from emp as a where a、deptno=b、deptno) group by b、deptno4 根据部门号由高而低,工资有低而高列出每个员工的姓名,部门号,工资select deptno as 部门号,ename as 姓名,sal as 工资from emp order by deptno desc,sal asc5 写出对上题的另一解决方法(请补充)6 列出'张三'所在部门中每个员工的姓名与部门号select ename,deptno from emp where deptno = (select deptno from emp where ename = '张三')7 列出每个员工的姓名,工作,部门号,部门名select ename,job,emp、deptno,dept、dname from emp,dept where emp、deptno=dept、deptno8 列出emp中工作为'CLERK'的员工的姓名,工作,部门号,部门名select ename,job,dept、deptno,dname from emp,dept where dept、deptno=emp、deptno and job='CLERK'9 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)select a、ename as 姓名,b、ename as 管理者from emp as a,emp as b wherea、mgr is not null and a、mgr=b、empno10 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为'CLERK'的员工名与工作select dname as 部门名,dept、deptno as 部门号,ename as 员工名,job as 工作from dept,empwhere dept、deptno *= emp、deptno and job = 'CLERK'11 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序select a、deptno as 部门号,a、ename as 姓名,a、sal as 工资from emp as a where a、sal>(select avg(sal) from emp as b where a、deptno=b、deptno) order by a、deptno12 对于emp,列出各个部门中平均工资高于本部门平均水平的员工数与部门号,按部门号排序select count(a、sal) as 员工数,a、deptno as 部门号from emp as awhere a、sal>(select avg(sal) from emp as b where a、deptno=b、deptno) group by a、deptno order by a、deptno13 对于emp中工资高于本部门平均水平,人数多与1人的,列出部门号,人数,按部门号排序select count(a、empno) as 员工数,a、deptno as 部门号,avg(sal) as 平均工资from emp as awhere (select count(c、empno) from emp as c where c、deptno=a、deptno and c、sal>(select avg(sal) from emp as b where c、deptno=b、deptno))>1 group by a、deptno order by a、deptno14 对于emp中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数select a、deptno,a、ename,a、sal,(select count(b、ename) from emp as b where b、sal<a、sal) as 人数from emp as awhere (select count(b、ename) from emp as b where b、sal<a、sal)>5数据库笔试题及答案第一套一、选择题1、下面叙述正确的就是CCBAD ______。

A、算法的执行效率与数据的存储结构无关B、算法的空间复杂度就是指算法程序中指令(或语句)的条数C、算法的有穷性就是指算法必须能在执行有限个步骤之后终止D、以上三种描述都不对2、以下数据结构中不属于线性数据结构的就是______。

相关文档
最新文档