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)

insert into S values ('10005','Students5','department3',23)

insert into S values ('10006','Students6','department3',24)

insert into S values ('10007','Students7','department3',25)

insert into S values ('10008','Students8','department4',25)

insert into C values ('C1','数学')

insert into C values ('C2','物理')

insert into C values ('C3','化学')

insert into C values ('C4','英语')

insert into C values ('C5','中文')

insert into C values ('C6','税收基础')

insert into C values ('C7','传媒')

insert into C values ('C8','日语')

insert into SC values ('10001','C1',67)

insert into SC values ('10001','C2',77)

insert into SC values ('10001','C3',87)

insert into SC values ('10001','C4',97)

insert into SC values ('10001','C5',57)

insert into SC values ('10001','C6',47)

insert into SC values ('10002','C1',62)

insert into SC values ('10002','C2',72)

insert into SC values ('10002','C3',82)

insert into SC values ('10002','C4',92)

insert into SC values ('10002','C5',52)

insert into SC values ('10002','C6',42)

insert into SC values ('10004','C2',74)

insert into SC values ('10004','C5',54)

insert into SC values ('10004','C6',44)

--(1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?

--解法一:

select S#,SN from S where S# in (select S# from C, SC where C.C#=SC.C# and https://www.360docs.net/doc/6818980145.html,='税收基础')

--解法二:

select S.S#,S.SN from S inner join (select S# from C left join SC on C.C#=SC.C# where https://www.360docs.net/doc/6818980145.html,='税收基础') T on T.S#=S.S#

--(2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?

--解答:

select S.SN,S.SD from S,SC where S.S#=SC.S# and SC.C#='C2'

--(3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?

--解答:

select distinct S.SN,S.SD from S where S.S# not in (select S.S# from S,SC where S.S#=SC.S# and SC.C#='C5')

--(4) 查询选修了课程的学员人数?

--解法一:

select 学员人数=count(distinct s#) from sc

--解法二:

select count(*) as 学员人数from (select distinct SC.S# from SC) t

--(5) 查询选修课程超过5门的学员学号和所属单位?

--解法一:

select S#,SD from S where S.S# in (select SC.S# from SC group by SC.S# having count(*)>5) --解法二:

select S#,SD from S where S# in(select S# from SC group by S# having count(distinct C#)>5)

第二题:

create table testtable1

(

id int IDENTITY,

department varchar(12)

)

insert into testtable1 values('设计')

insert into testtable1 values('市场')

insert into testtable1 values('售后')

结果:

id department

1 设计

2 市场

3 售后

create table testtable2

(

id int IDENTITY,

dptID int,

name varchar(12)

)

insert into testtable2 values(1,'张三')

insert into testtable2 values(1,'李四')

insert into testtable2 values(2,'王五')

insert into testtable2 values(3,'彭六')

insert into testtable2 values(4,'陈七')

insert into testtable2 values(5,'陈七')

select t2.id,t2.dptID,t1.department,https://www.360docs.net/doc/6818980145.html, from testtable2 t2 left join testtable1 t1 on t1.id=t2.dptID

select * from testtable2

用一条SQL语句,怎么显示如下结果

id dptID department name

1 1 设计张三

2 1 设计李四

3 2 市场王五

4 3 售后彭六

5 4 黑人陈七

--解答:

--解法一:

select t2.id,t2.dptID,t1.department,https://www.360docs.net/doc/6818980145.html, from testtable2 t2 left join testtable1 t1 on t1.id=t2.dptID

--解法二:

SELECT t2.id , t2.dptID, ISNULL(t1.department,'黑人') dptName,https://www.360docs.net/doc/6818980145.html, FROM testtable1 t1 right join testtable2 t2 on t2.dptID = t1.ID

--注意下面两个语句查询结果与上面答案的区别

select t2.id,t2.dptID,t1.department,https://www.360docs.net/doc/6818980145.html, from testtable1 t1,testtable2 t2 where t1.id=t2.dptID select t2.id,t2.dptID,t1.department,https://www.360docs.net/doc/6818980145.html, from testtable2 t2 inner join testtable1 t1 on t1.id=t2.dptID

第三题:

有表A,结构如下:

A: p_ID p_Num s_id

1 10 01

1 1

2 02

2 8 01

3 11 01

3 8 03

其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为:

p_ID s1_id s2_id s3_id

1 10 1

2 0

2 8 0 0

3 11 0 8

其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

create table A

(

p_ID int,

p_Num int,

s_id int

)

insert into A values(1,10,01)

insert into A values(1,12,02)

insert into A values(2,8,01)

insert into A values(3,11,01)

insert into A values(3,8,03)

--解答:

select p_id ,

sum(case when s_id=1 then p_num else 0 end) as s1_id,

sum(case when s_id=2 then p_num else 0 end) as s2_id,

sum(case when s_id=3 then p_num else 0 end) as s3_id

from A group by p_id

第四题:

--1.查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列?

create table A

(

id int IDENTITY,

Name varchar (25)

)

--1.查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列?

--解答:

select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by id ) T) order by id

第五题:

--查询A(ID,Name)表中存在ID重复三次以上的记

drop table A

create table A

(

id int,

Name varchar (25)

)

insert into A values(1,'a')

insert into A values(2,'a')

insert into A values(3,'a')

insert into A values(1,'a')

insert into A values(2,'a')

insert into A values(3,'a')

insert into A values(4,'a')

insert into A values(1,'a')

--解答:

select id,name from A where id in (select id from A group by id having count(id)>3)order by id

第六题:

原表Course:

courseid coursename score

-------------------------------------

1 java 70

2 oracle 90

3 xml 40

4 jsp 30

5 servlet 80

-------------------------------------

为了便于阅读,查询此表后的结果显式如下(及格分数为60):

courseid coursename score mark

---------------------------------------------------

1 java 70 pass

2 oracle 90 pass

3 xml 40 fail

4 jsp 30 fail

5 servlet 80 pass

---------------------------------------------------

写出此查询语句。

create table Course(

courseid int IDENTITY,

coursename varchar (25),

score int

)

insert into Course values ( 'java',70)

insert into Course values ( 'oracle',90)

insert into Course values ( 'xml',40)

insert into Course values ( 'jsp',30)

insert into Course values ( 'servlet',80)

--解答:

--oracle:

select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course

--SQL Server:

select *, (case when score<60 then 'failed' else 'pass' end) as mark from Course

第七题:

有表:emp(id, name, age)

要求:列出所有名字重复的人的记录?

create table emp(

id int IDENTITY,

name varchar (25),

age int

)

insert into emp values('Zhang1',26)

insert into emp values('Zhang2',27)

insert into emp values('Zhang3',28)

insert into emp values('Zhang1',26)

insert into emp values('Zhang2',27)

insert into emp values('Zhang3',29)

insert into emp values('Zhang1',26)

insert into emp values('Zhang2',27)

insert into emp values('Zhang3',28)

insert into emp values('Zhang1',26)

insert into emp values('Zhang4',22)

insert into emp values('Wang1',27)

insert into emp values('wang2',28)

insert into emp values('Wang2',26)

insert into emp values('Wang1',22)

--列出所有名字重复的人的记录?

--解法一:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:

select id,name,age from emp where name in (select name from emp group by name having count(*)>1)

--解法二:如果对每个名字都和原表进行比较,大于2个人名字与这条记录相同的就是合格的,就有:

select * from emp where (select count(*) from emp e where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html,)>1

--解法三:如果有另外一个名字相同的人工号不与她他相同那么这条记录符合要求:select * from emp where exists (select * from emp e where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html, and e.id<>emp.id)

--或:

select distinct emp.* from emp inner join emp e on https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html, and emp.id<>e.id

第八题:

有例表:emp(name,age)

Tom 16

Sun 14

Tom 16

Tom 16

要求:过滤掉所有多余的重复记录

create table emp(

name varchar(20),

age int

)

insert into emp values('Tom',16)

insert into emp values('Sun',14)

insert into emp values('Tom',16)

insert into emp values('Tom',16)

--解法一:通过distinct、group by过滤重复:

select distinct * from emp

select name,age from emp group by name,age

--获得需要的数据,如果可以使用临时表就有解法:

select distinct * into #tmp from emp

delete from emp

insert into emp select * from #tmp

--但是如果不可以使用临时表,那该怎么办?

alter table emp add chk int identity(1,1)

--重复记录可以表示为:

select * from emp where (select count(*) from emp e where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html,)>1

--要删除的是:

delete from emp where (select count(*) from emp e where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html, and e.chk>=emp.chk)>1

--再把添加的列删掉,出现结果。

alter table emp drop column chk

--)另一个思路:视图

select min(chk) from emp group by name having count(*) >1

--获得有重复的记录chk最小的值,于是可以

delete from emp where chk not in (select min(chk) from emp group by name)

第九题:

有列表:emp(emp_no, name,age)

001 Tom 17

002 Sun 14

003 Tom 15

004 Tom 16

要求生成序列号

create table emp(

emp_no int,

name varchar(20),

age int

)

insert into emp values(001,'Tom',17)

insert into emp values(002,'Sun',14)

insert into emp values(003,'Tom',15)

insert into emp values(004,'Tom',16)

--(1)最简单的方法:

alter table emp add chk int identity(1,1)

--或

select *,identity(int,1,1) chk into #tmp from emp

select * from emp

alter table emp drop column chk

--如果需要控制顺序怎么办?

select *,identity(int,1,1) chk into #tmp from emp order by age

delete from emp

alter table emp add chk int

insert into emp select * from #tmp

select * from #tmp

drop table #tmp

--(2)假如不可以更改表结构,怎么办?

如果不可以唯一区分每条记录是没有办法的,

select emp.*,(select count(*) from emp e where e.emp_no<=emp.emp_no) from emp order by (select count(*) from emp e where e.emp_no<=emp.emp_no)

第十题:

学科表:

姓名选课

---------------------

张三数学

张三物理

张三语文

张三化学

李四数学

李四化学

李四语文

王五数学

王五物理

王五语文

赵六数学

赵六物理

赵六语文

周七数学

周七物理

问题一:只选数学,物理,语文的学生, 查询结果如下,写出相应SQL语句

姓名选课

---------------------

王五数学

王五物理

王五语文

赵六数学

赵六物理

赵六语文

问题二:同时选了数学,物理,语文的学生, 查询结果如下,写出相应SQL语句

姓名选课

---------------------

张三数学

张三物理

张三语文

王五数学

王五物理

王五语文

赵六数学

赵六物理

赵六语文

create table course(

Name varchar(25),

CName varchar(25)

)

insert into course values ('张三','数学')

insert into course values ('张三','物理')

insert into course values ('张三','语文')

insert into course values ('张三','化学')

insert into course values ('李四','数学')

insert into course values ('李四','语文')

insert into course values ('李四','化学')

insert into course values ('王五','数学')

insert into course values ('王五','物理')

insert into course values ('王五','语文')

insert into course values ('赵四','数学')

insert into course values ('赵四','物理')

insert into course values ('赵四','语文')

insert into course values ('周七','数学')

insert into course values ('周七','物理')

select * from course

--问题一:只选数学,物理,语文的学生, 查询结果如下,写出相应SQL语句------

--解法一:

select https://www.360docs.net/doc/6818980145.html,,https://www.360docs.net/doc/6818980145.html,ame from

(select https://www.360docs.net/doc/6818980145.html, from (select Name,CName from Course where CName in('数学','物理','语文'))T group by Name having count(*)=3 )A,

(select Name,CName from Course where CName in('数学','物理','语文'))B

where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html,

and https://www.360docs.net/doc/6818980145.html, not in (select Name from Course group by Name having count(*)>3 )

--解法二:

select * from course

where name in (select name from course where CName in('数学','物理','语文') group by name having count(*)=3)

and name not in(select name from course group by name having count(*)>3)

--问题二:同时选了数学,物理,语文的学生, 查询结果如下,写出相应SQL语句---

--解法一:

select https://www.360docs.net/doc/6818980145.html,,https://www.360docs.net/doc/6818980145.html,ame from

(select https://www.360docs.net/doc/6818980145.html, from (select Name,CName from Course where CName in('数学','物理','语文'))T group by Name having count(*)=3 )A,

(select Name,CName from Course where CName in('数学','物理','语文'))B

where https://www.360docs.net/doc/6818980145.html,=https://www.360docs.net/doc/6818980145.html,

--解法二:

select * from course

where name in (select name from course where CName in('数学','物理','语文') group by name having count(*)=3)

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经典面试题

1.张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC表关联;(SQL) 1)写出建表语句; 答:建表语句如下(mysql数据库): create table s(id integer primary key, name varchar(20)); create table c(id integer primary key, name varchar(20)); create table sc( sid integer references s(id), cid integer references c(id), primary key(sid,cid) ); 2)写出SQL语句,查询选修了所有选修课程的学生; 答:SQL语句如下: select , from s stu where (select count(*) from sc where sid= = (select count(*) from c); 3)写出SQL语句,查询选修了至少5门以上的课程的学生。 答:SQL语句如下: select , from s stu where (select count(*) from sc where sid=>=5; 2.数据库表(Test)结构如下:(SQL) IDNAMEAGEMANAGER(所属主管人ID) 106A30104 109B19104 104C20111 107D35109

112E25120 119F45NULL 要求:列出所有年龄比所属主管年龄大的人的ID和名字 答:SQL语句如下: select from test employee where > (select from test manager where =; 3.有3个表(15分钟):(SQL) Student 学生表 (学号,姓名,性别,年龄,组织部门) Course 课程表 (编号,课程名称) Sc 选课表 (学号,课程编号,成绩) 表结构如下: 1)写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名(3分钟) 答:SQL语句如下: select , from Student stu where (select count(*) from sc where sno= and cno = (select cno from Course where cname=’计算机原理’)) != 0; 2)写一个SQL语句,查询’周星驰’同学选修了的课程名字(3分钟) 答:SQL语句如下: select cname from Course where cno in (select cno from sc where sno=(select sno from Student where sname=’周星驰’)); 3)写一个SQL语句,查询选修了5门课程的学生学号和姓名(9分钟) 答:SQL语句如下: select , from student stu where (select count(*) from sc where sno= = 5;

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/6818980145.html,, https://www.360docs.net/doc/6818980145.html, from team a, team b where https://www.360docs.net/doc/6818980145.html, < https://www.360docs.net/doc/6818980145.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/6818980145.html,, https://www.360docs.net/doc/6818980145.html, from team a, team b where https://www.360docs.net/doc/6818980145.html, < https://www.360docs.net/doc/6818980145.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面试题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面试题及答案

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

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

【2018-2019】SQL查询面试题与答案-范文模板 (14页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == SQL查询面试题与答案 SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。下面是小编搜集的SQL查询面试题与答案,欢迎大家阅读。 SQL查询面试题与答案一 1.一道SQL语句面试题,关于group by表内容: 201X-05-09 胜 201X-05-09 胜 201X-05-09 负 201X-05-09 负 201X-05-10 胜 201X-05-10 负 201X-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 201X-05-09 2 2 201X-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('201X-05-09','胜')

insert into #tmp values('201X-05-09','胜') insert into #tmp values('201X-05-09','负') insert into #tmp values('201X-05-09','负') insert into #tmp values('201X-05-10','胜') insert into #tmp values('201X-05-10','负') insert into #tmp values('201X-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 rq 2) 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.rq 3)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) b where a.col001=b.col001 2.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。 ------------------------------------------ select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name

SQL经典面试题及答案

SQL经典面试题及答案 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 2 2005-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 ' then 1 else 0 end)'负' from #tmp group (case when shengfu='负 by

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),Revenue float) go --查询ﻫselect Customer、ID, sum(isnull([Order]、Revenue,0))ﻫfrom customer full join [order]on([order]、custome rid=customer、id) groupby customer、id selectcustomer、id,sum(order、revener) fromorder,customer where customer、id=customerid group by customer、id select customer、id,sum(order、revener)from customer fulljoin order on(order、customerid=customer、id)group bycustomer、id 5数据库(10) a tabel called “performance”contain :name andscore,please用SQL语言表述

2021年sql常见面试题

sql理论题 1.触发器作用? 答:触发器是一中特殊存储过程,重要是通过事件来触发而被执行。它可以强化约束,来维护数据完整性和一致性,可以跟踪数据库内操作从而不容许未经允许更新和变化。可以联级运算。如,某表上触发器上包括对另一种表数据操作,而该操作又会导致该表触发器被触发。 2。什么是存储过程?用什么来调用? 答:存储过程是一种预编译SQL语句,长处是容许模块化设计,就是说只需创立一次,后来在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一种命令对象来调用存储过程。 3。索引作用?和它长处缺陷是什么? 答:索引就一种特殊查询表,数据库搜索引擎可以运用它加速对数据检索。它很类似与现实生活中书目录,不需要查询整本书内容就可以找到

想要数据。索引可以是唯一,创立索引容许指定单个列或者是各种列。缺陷是它减慢了数据录入速度,同步也增长了数据库尺寸大小。 3。什么是内存泄漏? 答:普通咱们所说内存泄漏指是堆内存泄漏。堆内存是程序从堆中为其分派,大小任意,使用完后要显示释放内存。当应用程序用核心字new 等创立对象时,就从堆中为它分派一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,咱们就说该内存被泄漏了。 4。维护数据库完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做,尽量使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最以便。另一方面是使用触发器,这种办法可以保证,无论什么业务系统访问数据库都可以保证数据完整新和一致性。最后考虑是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 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面试题大全

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语句面试题,并给出相应的答案。通过阅读本文,您将对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经典面试题及答案

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

SqlServer数据库面试题(一)

SQL面试题目 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表drop table tabname 6、说明:增加一个列 Alter table tabname add column col type注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句

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