Ⅰ 一些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