Ⅰ 一些sql的试题
4.1
select stud_id,name ,birthday,gender,mark from stud_info where name like '张%' and len(name)=2
4.2
select stud_id ,name from stud_grade where grade=(select max(grade) from stud_grade
或者select top 1 stud_id ,name from stud_grade order by grade desc
4.3
declare @zhuanye char(10)
select @zhuanye=sunbstring(zhuanye,5,2) from stud_info
select name from stud_info where @zhuanye='01'
4.4
create proc people_num
as
begin
select count(*) from stud_info where gender='男'
end
4.5
alert table stud_info add column money varchar(30)
4.6
alter table stud_info add constraint uniqueindex unique(telcode)
4.7
ALTER TABLE stud_info
ADD
CONSTRAINT pk_level
PRIMARY KEY CLUSTERED (stud_id)
4.8
alter table stud_grade
add constraint stud_info
foreign key (stud_id)
references (stud_id)
4.9
create nonclustered index CourseIndex
on stud_grade(course_id)
4.10
create view stud_view
as
select A.stud_id ,A.name,B.grade from stud_info A,stud_grade B where A.stud_id=B.stud_id and
substring(stud_id,3,2)='01'
第二题
36 select 姓名,年龄 from S order by 年龄 desc
37 select * from S where 姓名 like '王%'
38 select S.姓名,S.年龄,S.性别,S.系别 from S,C,SC where S.学号=SC.学号 and C.课号=SC.课号 and C.课名='数据库原理'
39 select * from S where 系别=(select 系别 from S where 姓名='刘平')
Ⅱ sql的高级问题
你学过表的自连接吗?就是表自己连接自己,这个好理解吧?
还有你学过主键吗?又叫主关键词。主关键词可能不是由一个组成的,而是由多个,这时遇到这样的表连接时必须让主键进行全连接的,所以中间使用and,也就是说这个表可能是一个纽带表,不像常规的关键字只由一个属性组成,而由两个组成时,这样的两个表在连接时必须使用and分别进行连接。
在SQL中你可以选中两个字段,然后点设置主关键字的按钮(就是那个钥匙),两个这样表连接时使用ANSI语句时就应该当在where 中用and进行分别的连接。也就是说该表的主键是(cpbh,cpmc),而不是其中的一个。使用Tran-SQL时在on后用一个and进行连接。
Ⅲ 求助SQL考试题。。明天早上就考了 今晚要交
1.select 书名,出版社 from 图书 where 20=<价格=<50 order by 价格 desc
2.select distinct a.书号 as 图书种类 ,a.操作员帐号 from 借出 a,操作员 b where a.操作员帐号=(select b.操作员帐号 from 操作员 where 操作员姓名='李凡')
3.select 书名,出版社 from 图书 where 书名 like '%数据库%' or 书名 like '%SQL%'
4.delete from 课程 where 课程编号 in ( '20016','20018','20019')
5.insert into 教师 (教师编号,姓名,所在部门,职称) values (60016,王力,,讲师)
6.select a.生产厂家,count(b.商品编号) as 商品种类 from 商品 b,(select distinct 生产厂家 from 商品) as a where a.生产厂家=b.生产厂家 group by a.生产厂家
Ⅳ SQL数据库题目
--注意:执行这些代码要按题号分开执行,不然会报错。
--第一题:
create database 教工管理数据库系统
on primary
(name='教工管理数据库系统_dat1',
filename='c:\教工管理数据库系统_dat1.mdf',
size=51200KB,
maxsize=102400KB
),
--filegroup [fg1]
(
name='教工管理数据库系统_dat2',
filename='c:\教工管理数据库系统_dat2.mdf',
size=51200KB,
maxsize=102400KB
)
log on
(
name='教工管理数据库系统_log',
filename='c:\教工管理数据库系统_log.ldf',
size=20480KB,
filegrowth=25%,
maxsize=51200KB
)
go
--第二题:
use 教工管理数据库系统
go
create table 部门简况表
(
部门代号 int,部门名称 varchar(20),办公地点 varchar(30)
)
insert 部门简况表 values(1,'经管系','a教学楼')
insert 部门简况表 values(2,'计算机系','b教学楼')
insert 部门简况表 values(3,'机械系','c教学楼')
insert 部门简况表 values(4,'电子系','d教学楼')
insert 部门简况表 values(5,'设计系','e教学楼')
insert 部门简况表 values(6,'外语系','f教学楼')
insert 部门简况表 values(7,'基础教育系','g教学楼')
insert 部门简况表 values(8,'软件工程系','h教学楼')
create table 技术职称表
(
技术职称编码 int,技术职称 varchar(20)
)
insert 技术职称表 values(1,'高高高高级讲师')
insert 技术职称表 values(2,'高高高级讲师')
insert 技术职称表 values(3,'高高级讲师')
insert 技术职称表 values(4,'高级讲师')
insert 技术职称表 values(5,'高级实习指导教师')
insert 技术职称表 values(6,'一级实习指导教师')
insert 技术职称表 values(7,'中学高级教师')
insert 技术职称表 values(8,'小学高级教师')
create table 文化程度表
(
文化程度编码 int,文化程度 varchar(10)
)
insert 文化程度表 values(1,'小学')
insert 文化程度表 values(2,'初中')
insert 文化程度表 values(3,'高中')
insert 文化程度表 values(4,'中专')
insert 文化程度表 values(5,'大专')
insert 文化程度表 values(6,'研究生')
insert 文化程度表 values(7,'硕士')
insert 文化程度表 values(8,'博士')
create table 教工情况表
(
教工编号 int,部门代号 int,姓名 varchar(12),性别 varchar(4),出生年月 varchar(10),技术职称编码 int,文化程度编码 int,婚姻状况 varchar(6),基本工资 money,奖金 money,家庭电话 int
)
insert 教工情况表 values(1,1,'刘与申','男','1978-04',1,1,'已婚',10000,10000,81234567)
insert 教工情况表 values(2,2,'李美丽','女','1952-04',2,2,'已婚',9000,9000,81234566)
insert 教工情况表 values(3,3,'刘华','男','1971-04',3,3,'已婚',8000,8000,81234565)
insert 教工情况表 values(4,4,'黄恒','男','1988-04',4,4,'未婚',7000,7000,81234564)
insert 教工情况表 values(5,5,'马俊杰','男','1969-04',5,5,'已婚',6000,6000,81234563)
insert 教工情况表 values(6,6,'夏雨','男','1971-04',6,6,'已婚',5000,5000,81234562)
insert 教工情况表 values(7,7,'郭靖','男','1973-04',7,7,'已婚',4000,4000,81234561)
insert 教工情况表 values(8,8,'赵日敏','女','1982-04',8,8,'已婚',3000,3000,81234560)
create table 任课情况表
(
教工编号 int,课程号 int,教学效果编码 varchar(5)
)
insert 任课情况表 values(1,1,1)
insert 任课情况表 values(2,2,2)
insert 任课情况表 values(3,3,3)
insert 任课情况表 values(4,3,4)
insert 任课情况表 values(5,5,5)
insert 任课情况表 values(6,6,6)
insert 任课情况表 values(7,7,7)
insert 任课情况表 values(8,8,8)
create table 课程档案表
(
课程号 int,课程名称 varchar(50),总学时 int
)
insert 课程档案表 values(1,'语文',40)
insert 课程档案表 values(2,'数学',37)
insert 课程档案表 values(3,'政治',41)
insert 课程档案表 values(4,'物理',40)
insert 课程档案表 values(5,'软件工程',38)
insert 课程档案表 values(6,'英语',34)
insert 课程档案表 values(7,'计算机接口技术',29)
insert 课程档案表 values(8,'体育',43)
create table 教学效果表
(
教学效果编码 int,教学效果名称 varchar(20)
)
insert 教学效果表 values(1,'一般')
insert 教学效果表 values(2,'较好')
insert 教学效果表 values(3,'优秀')
insert 教学效果表 values(4,'优秀+')
insert 教学效果表 values(5,'优秀++')
insert 教学效果表 values(6,'优秀+++')
insert 教学效果表 values(7,'优秀++++')
insert 教学效果表 values(8,'优秀+++++')
--第三题:
use 教工管理数据库系统
go
alter table 教工情况表
add 家庭地址 varchar(50)
go
update 教工情况表 set 家庭地址='博爱路1号' where 教工编号=1
update 教工情况表 set 家庭地址='天堂路2号' where 教工编号=2
update 教工情况表 set 家庭地址='北京路3号' where 教工编号=3
update 教工情况表 set 家庭地址='上海路4号' where 教工编号=4
update 教工情况表 set 家庭地址='广州路5号' where 教工编号=5
update 教工情况表 set 家庭地址='中山路6号' where 教工编号=6
update 教工情况表 set 家庭地址='南京路7号' where 教工编号=7
update 教工情况表 set 家庭地址='天津路8号' where 教工编号=8
--第四题:
--grant all on dbo. with grant option; --这题我不是不很明白他的意思,表示不会。
--第五题:
alter database 教工管理数据库系统
add filegroup Testl
go
alter database 教工管理数据库系统
add file
( name='file1',
filename='c:\file1.mdf',
size=5MB,
maxsize=20MB,
filegrowth=1MB),
( name='file2',
filename='c:\file2.mdf',
size=5MB,
maxsize=20MB,
filegrowth=1MB)
to filegroup Testl
go
--第六题:
--1.
use 教工管理数据库系统
go
select 姓名,家庭电话 from 教工情况表 where 基本工资>1000
go
--2.
select * from 教工情况表 where RIGHT(家庭电话,1)=6
go
--3.
select c.姓名,d.技术职称 from 课程档案表 a inner join 任课情况表 b on a.课程号=b.课程号 inner join 教工情况表 c on b.教工编号=c.教工编号 inner join 技术职称表 d on c.技术职称编码=d.技术职称编码
where a.课程名称 in ('英语','计算机接口技术','软件工程')
go
--4.
select a.姓名,b.文化程度 from 教工情况表 a inner join 文化程度表 b on a.文化程度编码=b.文化程度编码 inner join 任课情况表 c on a.教工编号=c.教工编号
where c.课程号=(select d.课程号 from 任课情况表 d inner join 教工情况表 e on e.教工编号=d.教工编号 where 姓名='刘华')
go
--5.
select top 3 * from 部门简况表
go
--6.
--select * from 教工情况表 group by 技术职称编码 --这题我不是不很明白他的意思,也表示不会。
go
--7.
select c.姓名,a.教学效果名称 from 教学效果表 a inner join 任课情况表 b on a.教学效果编码=b.教学效果编码 inner join 教工情况表 c on c.教工编号=b.教工编号 inner join 部门简况表 d on c.部门代号=d.部门代号
where d.部门代号=001
go
--8.
select 办公地点 from 部门简况表 where 部门名称='计算机系'
go
sp_rename '部门简况表.办公地点','办公所在地'
go
--9.
select 教学效果名称,
(case
when 教学效果名称='一般' then 1
when 教学效果名称='较好' then 2
when 教学效果名称='优秀' then 3
end)
from 教学效果表
go
--10.
select a.*,b.* from 任课情况表 a,课程档案表 b
--11.
select * from 教工情况表 order by 奖金 desc
--12.
select count(a.教工编号)AS '教师总人数' from 任课情况表 a
where a.课程号 =(select 课程号 from 课程档案表 where 课程名称='英语')
--13.
--没时间略
--14.
--不是很懂题目意思
--第七题:
use 教工管理数据库系统
go
create nonclustered index i_姓名 on 教工情况表(姓名)
with fillfactor =30
go
use 教工管理数据库系统
go
create unique index i_家庭电话 on 教工情况表(家庭电话)
with fillfactor =30
go
select name,index_id from sys.indexes where name in('i_姓名','i_家庭电话') --查找索引号
--第八题:
use 教工管理数据库系统
go
create view VIEW8
as
select b.部门名称,a.姓名,c.技术职称,d.文化程度 from 教工情况表 a inner join 部门简况表 b on a.部门代号=b.部门代号 inner join 技术职称表 c on a.技术职称编码=c.技术职称编码 inner join 文化程度表 d on a.文化程度编码=d.文化程度编码
go
select * from VIEW8
Ⅳ SQL高手来帮我做一到作业题
--假设字段名位:tid 教师号,tname 姓名,tsex 性别,tage年龄,tdate 参加工作年月,tparty党员,tpay应发工资,tdect扣除工资
--1.用INSERT插入一条新纪录:
--300008 杨梦 女 59 66/04/22 YES 1660 210
insert into teachers values(300008,'杨梦','女',59,'66/04/22','yes',1660,210)
--2.用DELETE删除年龄少于36并且性别为女的纪录.
delete from teachers where tage<36 and tsex='女'
--3.对表中工龄超过25年的加20%的工资.
update teachers set tpay=tpay*1.2 where year(getdate())-year(tdate)>25
--4.查询教师的教师号,姓名和实发工资.
select tid,tname,tpay-tdect from teachers
--5.查询教师的人数和平均工资.
select count(*),avg(tpay) from teachers
--6.查询1990年以前参加工作的所有教师的教师号,姓名和实发工资.
select tid,tname,tpay-tdect from teachers where year(tdate)<1990
--7.查询男女职工的最低工资,最高工资和平均工资. (实发工资)
select min(tpay),max(tpay),avg(tpay) from teachers where tsex='男'
--8.查询所有党员的教师号和姓名,并且按年龄从大到小排列.
select tid,tname from teachers where tparty='yes' order by tage desc
Ⅵ 挑战SQL经典题(一)
建表语句:
表说明:
student(sid,sname,sage,ssex) 学生表
course(cid,cname,tid) 课程表
sc(sid,cid,score) 成绩表
teacher(tid,tname) 教师表
问题:
1、查询“1”课程比“2”课程成绩高的所有学生的学号;(3号-张三)
2、查询平均成绩大于60分的同学的学号和平均成绩;(1、2、3、4号)
3、查询所有同学的学号、姓名、选课数、总成绩;
4、查询姓“李”的老师的个数;(0个)
5、查询没学过“叶平”老师课的同学的学号、姓名; (4号-李四)
6、查询学过“1”并且也学过编号“2”课程的同学的学号、姓名;
(1号-刘一 2号-钱二 3号-张三 6号-赵六 除了4号和5号)---考查EXISTS
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; (除了4号)
8、查询课程编号“2”的成绩比课程编号“1”课程低的所有同学的学号、姓名;
(3号-张三)
9、查询所有课程有成绩小于60分的同学的学号、姓名;
(1号、3号、5号、6号 除了2号和4号)
10、查询没有学全所有课的同学的学号、姓名; (4号、5号、6号)
11、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名; (All)
12、查询跟学号为“1”的同学学的所有课一样的其他同学学号和姓名; (2号和3号)
13、把“sc”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩; (61.4)
14、删除学习“叶平”老师课的SC表记录;
15、向sc表中插入一条记录,要求符合以下条件:没有上过编号“3”课程的同学学号、2号课的平均成绩;(6号童鞋没有上过3号课程)
16、按平均成绩从高到低显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分(待更正 语句有错)
17、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
18、按各科平均成绩从低到高和及格率的百分数从高到低顺序
19、查询如下课程平均成绩和及格率的百分数(用"1行"显示):
语文-1、数学-2、英语-3、物理-4
20、查询不同老师所教不同课程平均分从高到低显示
21、统计打印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
22、查询学生平均成绩及其名次
23、查询各科成绩前三名的记录:(不考虑成绩并列情况)---------SQL不识别TOP
24、查询每门课程被选修的学生数
25、查询出只选修了一门课程的全部学生的学号和姓名
26、查询男生、女生人数
27、查询姓“张”的学生名单
28、查询同名同姓学生名单,并统计同名人数
29、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
30、查询“物理”课分数不及格的学生姓名和分数
31、查询所有学生的选课情况;
32、查询课程的成绩在80分以上的学生姓名、课程名称和分数;
33、查询选修“周磊”老师所授课程的学生中,成绩最高的学生姓名及其成绩(李四-93)
34、查询不同课程成绩相同的学生的学号、课程号、学生成绩
35、查询两门以上课程大于80分的同学的学号及其平均成绩
36、检索“4”课程分数小于60,按分数降序排列的同学学号
Ⅶ SQL高级编码题:某银行的数据库中有一账户信息表userInfo,结构如下:
第一个。
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE[dbo].[acc_moneyout]
(@acc_fromINTEGER,@acc_toINTEGER,@moneyINTEGER,@rtnINTEGEROUTPUT)
--@rtn表示返回值。返回为0时执行成功。其他值时表示错误。不需要可取消
AS
BEGINTRAN
DECLARE@tran_errINTEGER
SETNOCOUNTON;
UPDATEuserInfoSETucount=ucount+@moneyWHEREuid=@acc_to
SET@tran_err=@tran_err+@@ERROR
UPDATEuserInfoSETucount=ucount-@moneyWHEREuid=@acc_from
SET@tran_err=@tran_err+@@ERROR
IF@tran_err<>0
BEGINROLLBACKTRAN
SET@rtn=0
END
ELSE
BEGINCOMMITTRAN
SET@rtn=1
END
GO
第二个
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE[dbo].[add_salary]
(@depart_inVARCHAR(10),@rtnINTEGEROUTPUT)
--@rtn表示返回值。不需要可取消。为0时表示输入的部门查询到的平均工资为0,正常情况不会出现,除非输入的部门不存在
--@rtn为1时表示加100,为2时表示加200
AS
BEGIN
SETNOCOUNTON;
DECLARE@empavgDECIMAL(9,2)
DECLARE@depavgDECIMAL(9,2)
SELECT@depavg=ISNULL(ROUND(AVG(empSalary),2),0)FROMsalaryInfoWHEREdepartName=@depart_in
IF@depavg=0
BEGIN
SET@rtn=0
END
ELSE
BEGIN
SELECT@empavg=ISNULL(ROUND(AVG(empSalary),2),0)FROMsalaryInfo
IF@depavg<@empavg
BEGIN
UPDATEsalaryInfoSETempSalary=empSalary+200WHEREdepartName=@depart_in
SET@rtn=2
END
ELSE
BEGIN
UPDATEsalaryInfoSETempSalary=empSalary+100WHEREdepartName=@depart_in
SET@rtn=1
END
END
PRINT@rtn
END
GO