1. 程式人生 > 其它 >SQL server 視窗檢視例題

SQL server 視窗檢視例題

create table tb_stu(
sid int primary key,
sname varchar(50) not null,
birthday datetime not null,
sex varchar(10) not null
);

insert into tb_stu
select 1,'李四','2017-12-25','女'union
select 2,'李雲','1990-12-06','男'union
select 3,'錢電','1990-12-21','男'union
select 4,'孫風','1990-12-20','男'union
select 5,'孫七','2014-06-01','女'union


select 6,'吳蘭','1992-01-01','女'union
select 7,'張三','2017-12-20','女'union
select 8,'趙雷','1990-01-01','男'union
select 9,'趙六','2013-06-13','女'union
select 10,'鄭竹','1989-01-01','女'union
select 11,'周梅','1991-12-01','女'

create table TEACHER(
tid int primary key,
tname varchar(50) not null
);
insert into TEACHER
select 1,'李四'union


select 2,'王五'union
select 3,'張三'

create table course(
cid int not null,
cname varchar(50) not null,
tid int not null
);

insert into course
select 1,'數學',1union
select 2,'英語',3union
select 3,'語文',2union
select 4,'化學',1union
select 5,'物理',1union
select 6,'生物',2


create table SC(
scid int primary key ,
sid int null,


cid int null,
value float null

);
insert into SC
select 1,1,1,80.0union
select 2,1,2,90.0union
select 3,1,3,99.0union
select 4,2,1,70.0union
select 5,2,2,60.0union
select 6,2,3,80.0union
select 7,3,1,80.0union
select 8,3,2,80.0union
select 9,3,3,80.0union
select 10,4,1,50.0union
select 11,4,2,30.0union
select 12,4,3,20.0union
select 13,5,1,76.0union
select 14,5,2,87.0union
select 15,6,1,31.0union
select 16,6,3,34.0union
select 17,7,2,89.0union
select 18,7,3,98.0

--1.檢視年齡在15歲以上的學生
select * from tb_stu where DATEDIFF(YY,birthday,GETDATE())>15


--2.查詢所有的老師的資訊
select *from TEACHER

--3.檢視所有的課程的資訊
select *from course

--4.檢視課程與每門課程對應的老師
select a.tname,b.cid,b.cname from TEACHER a join course b on a.tid=b.tid;

--5.檢視張三授課的科目
select a.tname,b.cid,b.cname from TEACHER a join course b on a.tid=b.tid where tname='張三';

--6.檢視老師與負責的課程數量
select a.tname as '負責人' ,count(*) as '認課數量' from TEACHER a join course b on a.tid=b.tid group by a.tname;

--7.檢視帶課最少的老師(課程數量最多)
select top 1 a.tname as '負責人' ,COUNT(*) as '認課數量' from TEACHER a join course b on a.tid=b.tid group by a.tname
order by COUNT(*) ;

--8.檢視每門科目與對應的考試成績記錄
select a.cid,a.cname,b.cid,b.value from course a join SC b on a.cid=b.cid ;、
select *from course where cid in(
select cid from SC
)

--9.檢視沒有成績記錄的科目

 

--10.檢視具備成績記錄的科目,並計算該科目的總分與平均分
select cname as '考試科目',SUM(value)as '總分',count(*)as '考試人數',AVG(value) as '平均分'from course a join SC b on a.cid=b.cid
group by cname;

--11.檢視平均分最高的科目
select top 1 cname,SUM(value),count(*),AVG(value) from course a join SC b on a.cid=b.cid
group by cname order by AVG(value) desc

--12.檢視1課程中沒及格的學生
select a.sid,a.sname,b.sid,b.cid,b.value from tb_stu a join SC b on a.sid=b.sid where a.sid in(
select sid from SC where value<60
)

--13.檢視每一個學生參與的考試的數
select a.sname,COUNT(*)as'考試次數' from tb_stu a full join SC b on a.sid=b.sid full join course c on b.cid=c.cid group by a.sname


--14.檢視參加1課程考試同時年齡超過15的學生
select a.sname from tb_stu a join SC b on a.sid=b.sid
where DATEDIFF(YY,birthday,GETDATE())>15
group by a.sname having COUNT(*)>1

--15.檢視李四參加的考試中成績最高分
select top 1 MAX(value) from SC where sid in (
select sid from tb_stu where sname='李四'
) group by value
order by MAX(value) desc
---------------------------------------------------------------
select top 1 a.sname,cid,value from tb_stu a join SC b on a.sid=b.sid where a.sid in (
select sid from SC where sname='李四'
)group by value ,a.sname,cid
order by value desc
--查詢2課程成績最高的學生的資訊及分數
select * from tb_stu a join SC b on a.sid=b.sid where a.sid in (
select sid from SC where sname='李四'
)group by value ,a.sname,cid

--a.sname,cid,value

 

--一、設有一資料庫,包括四個表:
--學生表(Student)、課程表(Course)、
--成績表(Score)以及教師資訊表(Teacher)。
--四個表的結構分別如表1-1的表(一)~表(四)所示,
--資料如表1-2的表(一)~表(四)所示。
--用SQL語句建立四個表並完成相關題目。
create table Student(

Sno char(3) not null primary key,
Sname char(8) not null,
Ssex char(2) not null,
Sbirthday datetime ,
Class char(5)
);

insert into Student
select '108','曾華','男','1977-09-01','95033'union
select '105','匡明','男','1975-10-02','95031'union
select '107','王麗','女','1976-01-23','95033'union
select '101','李軍','男','1976-02-20','95033'union
select '109','王芳','女','1975-02-10','95031'union
select '103','陸君','男','1974-06-03','95031'


create table Courses (

Cno char(5) not null primary key,
Cname varchar(10) not null ,
Tno char(5) not null
);
insert into Courses
select '3-105','計算機導論','825'union
select '3-245','作業系統','804'union
select '6-166','數位電路','856'union
select '9-888','高等數學','831'

create table Score(
Sno char(3) not null,
Cno char(5) not null,
Degree decimal(4,1)
);
insert into Score
select '103','3-245','86'union
select '105','3-245','75'union
select '109','3-245','68'union
select '103','3-105','92'union
select '105','3-105','88'union
select '109','3-105','76'union
select '101','3-105','64'union
select '107','3-105','91'union
select '108','3-105','78'union
select '101','6-166','85'union
select '107','6-166','79'union
select '108','6-166','81'


create table Teach(
Tno char(3) not null primary key ,
Tname varchar(4) not null,
Tsex char(2) not null ,
Tbirthday datetime null,
Prof varchar(6) null,
Depart varchar(10) not null
);

insert into Teach
select '804','李城','男','1958-12-02','副教授','計算機系'union
select '856','張旭','男','1969-03-12','講師','電子工程系'union
select '825','王萍','女','1972-05-05','助教','計算機系'union
select '831','劉冰','女','1977-08-14','助教','電子工程系'


--1、 查詢Student表中的所有記錄的Sname、Ssex和Class列。
select Sname,Ssex,Class from Student

--2、 查詢教師所有的單位即不重複的Depart列。
select distinct Depart from Teach

--3、 查詢Student表的所有記錄。
select *from Student

--4、 查詢Score表中成績在60到80之間的所有記錄。
select *from Score where Degree between '60' and '80'

--5、 查詢Score表中成績為85,86或88的記錄。
select *from Score where Degree='85' or Degree='86' or Degree='88'

--6、 查詢Student表中“95031”班或性別為“女”的同學記錄。
select *from Student where Class='95031' or Ssex= '女';

--7、 以Class降序查詢Student表的所有記錄。
select *from Student order by Class desc

--8、 以Cno升序、Degree降序查詢Score表的所有記錄。
select *from Score order by Cno ,Degree desc

--9、 查詢“95031”班的學生人數。
select count(*)as '95031班人數' from Student where Class='95031' group by Class

--10、查詢Score表中的最高分的學生學號和課程號。(子查詢或者排序)
select *from Score where Degree =(
select MAX(Degree) from Score
)
select top 1 Sno,Cno from Score order by Degree desc

--11、查詢‘3-105’號課程的平均分。
select Cno,AVG(Degree) from Score where Cno='3-105'group by Cno;

SELECT Cno,ROUND(AVG(Degree),1) FROM Score
GROUP BY Cno


--12、查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。
select Cno ,AVG(Degree)
from Score where Cno like '3%'
group by Cno
having COUNT(Sno)>=5;

--13、查詢最低分大於70,最高分小於90的Sno列。
select * from Score
where degree>70 and degree<90

select Sno from Score group by
Sno having MAX(Degree)<90 and MIN(Degree)>70

--14、查詢所有學生的Sname、Cno和Degree列。
select a.Sname,b.Cno,b.Degree from Student a join Score b on a.Sno=b.Sno

--15、查詢所有學生的Sno、Cname和Degree列。
select a.Sno,b.Degree,c.Cname from Student a join Score b on a.Sno=b.Sno join Courses c on b.Cno=c.Cno

--16、查詢所有學生的Sname、Cname和Degree列。
select a.Sname,b.Degree,c.Cname from Student a join Score b on a.Sno=b.Sno join Courses c on b.Cno=c.Cno

--17、查詢“95033”班所選課程的平均分。
select Courses.Cno,Courses.Cname,ROUND( AVG(Degree),1)as'平均分' from
Student inner join Score
on (Student.Sno=Score.Sno) inner join Courses
on Score.Cno=Courses.Cno
where Class='95033'
group by Courses .Cname,Courses.Cno
order by Courses.Cno

--18、假設使用如下命令建立了一個grade表:
create table grade(low int,upp int,ranks char(1));

insert into grade values(90,100,'A')
insert into grade values(80,89,'B')
insert into grade values(70,79,'C')
insert into grade values(60,69,'D')
insert into grade values(0,59,'E')
--現查詢所有同學的Sno、Cno和rank列。
select Sno,Cno,ranks from Score inner join grade on
Score.Degree>=grade.low and Score.Degree<=grade.upp
order by Sno;
select a.Sno,b.Cno,c.ranks from Student a full join Score b on a.Sno=b.Sno full join grade c on b.Cno=c.ranks
--19、 查詢選修“3-105”課程的成績高於“109”號同學成績的所有同學的記錄。
select *from Student inner join
(select *from Score where Cno='3-105' and Degree>
(select Degree from Score where Sno='109' and Cno='3-105'))
as s2 on Student.Sno=s2.Sno order by Student.Sno

--20、查詢score中選學多門課程的同學中分數為非最高分成績的記錄。
select Score.Sno,Cno,Degree,md From Score inner join(select Sno,MAX(Degree)as md from Score
group by Sno having COUNT(*) >1)
b on Score.Sno=b.Sno and Degree <md order by Sno

--21、查詢成績高於學號為“109”、課程號為“3-105”的成績的所有記錄。
select a.Sno,a.Degree
from Score a inner join Score b on a.Cno=b.Cno and a.Degree>b.Degree
where a.Cno='3-105' and b.Sno='109' order by a.Sno

--22、查詢和學號為108的同學同年出生的所有學生的Sno、Sname和Sbirthday列。
select a.Sno ,a.Sname,a.Sbirthday from Student a join Student b on
YEAR(a.Sbirthday)=YEAR(b.Sbirthday) where b.Sno='108'

--23、查詢“張旭“教師任課的學生成績。
select Sno Degree
from Score a inner join Courses b
on a.Cno=b.Cno join Teach c on b.Tno=c.Tno where c.Tname='張旭';

--24、查詢選修某課程的同學人數多於5人的教師姓名。
select distinct Tname from Score a join Courses b on
a.Cno=b.Cno join Teach c on b.Tno=c.Tno where b.Cno in (
select Cno from Score group by (Cno) having COUNT(Sno)>5);

--25、查詢95033班和95031班全體學生的記錄。
select * from student
where class='95033' or class='95031'

select sno,sname as s1 from Student where class='95033'
union
SELECT sno,sname as s2 FROM Student WHERE class='95031'

--26、查詢存在有85分以上成績的課程Cno.
select cno from Score where degree>85

--27、查詢出“計算機系“教師所教課程的成績表。
select Tname ,Cname ,Sname ,Degree
from Teach a join Courses b on a.Tno=b.Tno join Score c
on b.Cno=c.Cno join Student d on c.Sno=d.Sno where a.Depart='計算機系'
order by Tname,Cname,Cname,Degree desc;

--28、查詢“計算機系”與“電子工程系“不同職稱的教師的Tname和Prof。
select Tname ,Prof from Teach
where Depart='計算機系' and Prof Not in(
select distinct Prof
from Teach
where Depart='電子工程師');

--29、查詢選修編號為“3-105“課程且成績至少高於選修編號為“3-245”的同學的Cno、Sno和Degree,並按Degree從高到低次序排序。
select Cno,Sno,Degree from Score where
Cno='3-105' and Degree> any(
select Degree from Score where Cno ='3-245')
order by Degree desc;

--30、 查詢選修編號為“3-105”且成績高於選修編號為“3-245”課程的同學的Cno、Sno和Degree.
select Cno ,Sno Degree from Score
where Cno='3-105' and Degree >all(
select Degree from Score where Cno='3-245')
order by Degree desc;

--31、查詢所有教師和同學的name、sex和birthday.
select tname name,Tsex sex,Tbirthday birthday from Teach
union
select sname,ssex,sbirthday from student

--32、查詢所有“女”教師和“女”同學的name、sex和birthday.
select tname,Tsex,Tbirthday from Teach where tsex='女'
union
select sname,ssex,sbirthday from Student where ssex='女'

--33、查詢成績比該課程平均成績低的同學的成績表。
select a.*from Score a join (select Cno ,AVG(Degree) as aDegree
from Score group by Cno) b on
a.Cno=b.Cno and a.Degree<b.aDegree;

--34、查詢所有任課教師的Tname和Depart.
SELECT tname,depart FROM Teach
WHERE tno IN ( SELECT DISTINCT tno FROM courses )

--35、 查詢所有未講課的教師的Tname和Depart.
SELECT tname,depart FROM Teach
WHERE tno NOT IN ( SELECT DISTINCT tno FROM Courses )

--36、查詢至少有2名男生的班號。
select Class ,COUNT(1) as boyCount from Student
where Ssex='男'
group by Class having COUNT(1) >=2;

--37、查詢Student表中不姓“王”的同學記錄。
select *from Student where Sname not like '王%';

--38、查詢Student表中每個學生的姓名和年齡。
select Sname ,YEAR(getdate())-YEAR(sbirthday) as Sage from Student;

--39、查詢Student表中最大和最小的Sbirthday日期值。
select MIN(Sbirthday),MAX(sbirthday) from Student;

--40、以班號和年齡從大到小的順序查詢Student表中的全部記錄。
select *from Student order by Class Desc ,Sbirthday asc;

--41、查詢“男”教師及其所上的課程。
select a.Tname ,b.Cname from Teach a join Courses b on a.Tno=b.Tno
where a.Tsex='男'

--42、查詢最高分同學的Sno、Cno和Degree列。
select *from Score group by Cno having Degree=MAX(Degree)

--43、查詢和“李軍”同性別的所有同學的Sname.
select a.Sname from Student a join Student b on a.Ssex=b.Ssex where b.Sname='李軍';

--44、查詢和“李軍”同性別並同班的同學Sname.
select a.Sname from Student a join Student b on a.Sno=b.Sno and a.Class=b.Class
where b.Sname='李軍';

--45、查詢所有選修“計算機導論”課程的“男”同學的成績表。
SELECT * FROM Score
WHERE cno=(SELECT cno FROM Courses WHERE cname='計算機導論')
ORDER BY Degree DESC;

--tb-user 使用者表
create table tb_users
(
uid float,
uname nvarchar(max),
upwd nvarchar(max),
usf nvarchar(max),
uage int null,
usex varchar(3) null
);

INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (1, N'黎明', N'111', N'前臺',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (2, N'劉德華', N'222', N'前臺',63,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (3, N'張學友', N'333', N'經理',83,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (10, N'張三', N'111', N'前臺',43,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (6, N'李四', N'111', N'經理',26,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (20, N'yishanjing', N'123', N'前臺',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (15, N'要', N'aa', N'老闆',23,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (16, N'小李子', N'111', N'前臺',13,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (20, N'yishanjing', N'123', N'前臺',53,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (10, N'name', N'pwd', N'sf',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',15,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',46,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',73,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',24,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',64,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (100, N'aa', N'111111', N'老闆',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',11,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',10,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',23,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',46,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',13,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',73,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',23,'女');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',43,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',10,'男');
INSERT INTO tb_users (uid, uname, upwd, usf,uage,usex) VALUES (200, N'眾', N'aa', N'前臺',19,'女');

 

 

--tb-客房型別表
create table tb_type
(
tid float,
tname nvarchar(max),
tmenu nvarchar(max)
);

INSERT INTO tb_type (tid, tname, tmenu) VALUES (1, N'總統套房', N'最貴的');
INSERT INTO tb_type (tid, tname, tmenu) VALUES (2, N'豪華間', null);
INSERT INTO tb_type (tid, tname, tmenu) VALUES (3, N'單間', null);
INSERT INTO tb_type (tid, tname, tmenu) VALUES (4, N'雙人間', null);
INSERT INTO tb_type (tid, tname, tmenu) VALUES (5, N'三人間', null);


--tb——客房表o
create table tb_kefang
(
fid float,
tid float,
fprice float,
fkzrs float,
fyzrs float,
fzhutai nvarchar(max),
fcnt float,
fmenu nvarchar(max)
);

INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (101, 5, 50, 3, 3, N'住滿', 100, N'電視,熱水器');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (102, 5, 50, 3, 3, N'住滿', 50, N'電視,熱水器');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (103, 5, 60, 3, 2, N'未住滿', 80, N'電視,熱水器,風扇');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (104, 5, 60, 0, 0, N'維修', 30, N'電視,熱水器,風扇');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (105, 5, 60, 3, 0, N'空房', 100, N'電視,熱水器,風扇');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (201, 4, 80, 2, 2, N'住滿', 100, N'電視,熱水器');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (202, 4, 80, 2, 0, N'空房', 200, N'電視,熱水器');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (203, 4, 100, 2, 0, N'空房', 201, N'電視,熱水器,空調');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (204, 4, 100, 2, 0, N'空房', 20, N'電視,熱水器,空調');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (205, 4, 120, 2, 1, N'未住滿', 100, N'電視,熱水器,電話,空調');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (301, 3, 150, 1, 1, N'住滿', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (302, 3, 150, 1, 0, N'空房', 500, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (303, 3, 150, 1, 0, N'空房', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (304, 3, 150, 0, 0, N'維修', 50, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (305, 3, 150, 1, 1, N'住滿', 50, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (401, 2, 200, 1, 1, N'住滿', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (402, 2, 200, 1, 1, N'住滿', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (403, 2, 180, 1, 0, N'空房', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (404, 2, 200, 1, 1, N'住滿', 500, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (405, 2, 200, 0, 0, N'維修', 100, N'無');
INSERT INTO tb_kefang (fid, tid, fprice, fkzrs, fyzrs, fzhutai, fcnt, fmenu) VALUES (501, 5, 1000, 1, 0, N'空房', 500, N'無');

 

--tb_登記表

create table tb_dengji
(
did float,
kname nvarchar(255),
fid float,
sfz nvarchar(255),
yajin float,
ruzhu datetime,
tufang datetime
);

INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (1, N'小貓', 101, N'123', 200, N'2007-05-12 07:22:18.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (2, N'阿狗', 101, N'123', 200, N'2007-05-14 10:22:39.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (3, N'阿牛', 101, N'123', 200, N'2007-05-15 14:23:02.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (4, N'王昭君', 102, N'123', 200, N'2007-05-15 10:23:31.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (5, N'西施', 102, N'123', 200, N'2007-05-15 03:23:46.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (6, N'昭嬋', 102, N'123', 200, N'2007-05-13 00:23:57.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (8, N'魯迅', 103, N'123', 300, N'2007-05-15 00:24:31.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (9, N'劉德華', 201, N'111', 500, N'2007-05-15 00:25:10.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (10, N'張學友', 201, N'111', 500, N'2007-05-12 10:25:22.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (11, N'成龍', 205, N'222', 800, N'2007-05-15 00:25:57.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (12, N'李世民', 301, N'333', 1000, N'2007-05-11 02:26:35.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (13, N'朱元璋', 305, N'444', 1000, N'2007-05-15 00:27:09.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (14, N'張曼玉', 401, N'55', 100, N'2007-05-15 00:27:24.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (15, N'張柏芝', 402, N'777', 1000, N'2007-05-14 11:10:12.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (16, N'小貓', 102, N'123', 200, N'2007-03-12 07:22:00.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (17, N'小羊', 201, N'222', 100, N'2007-03-14 00:00:00.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (18, N'喜來樂', 201, N'222', 100, N'2007-04-01 00:31:04.000', null);
INSERT INTO tb_dengji (did, kname, fid, sfz, yajin, ruzhu, tufang) VALUES (19, N'小李子', 404, N'111', 500, N'2007-05-15 00:00:00.000', null);


--二、在資料庫中建表如下,並根據實際要求建立約束
---四、建立基於客戶型別表以及客戶表的檢視
create view view_a
as
select *from tb_type
create view view_k
as
select *from tb_users

select *from view_k
select *from view_a
--五、要求用程式碼建立檢視,要求得到如下資料:2012年一月入住的所有姓“張”的女性
create view view_g
as
select *from tb_dengji
select *from view_g

select *from view_c where kname like '%張%' and YEAR(ruzhu)='2007'
--六、要求在作業六檢視的基礎上,查詢出年齡在20-30之間的客戶

select *from view_k where uage between 10 and 23
--七、要求用程式碼建立檢視,要求如下:要求查詢出可以住人的三人間
create view view_m
as
select *from tb_kefang
select *from view_m where fkzrs=3
--八、要求用程式碼建立檢視,要求如下:查詢出名字當中含有“豆”字的使用者,並且密碼中的1、2、3分別用a、b、c代替
select *from view_k where uname like '%豆%'

--九、要求用程式碼建立檢視,要求如下:要求所有沒有住滿,並且只能住一個人的客房
select *from view_m where fkzrs-fyzrs!=0 and fkzrs=1
--十、要求用程式碼建立檢視,要求如下:要求所有房間的入住統計,如果為null的話則用0代替
select ISNULL(ruzhu,0) from view_g


create table changk(
ckid varchar(10) primary key,
ckcs varchar(40) not null,
rea int not null
);

insert into changk
select 'WH1','北京',370 union
select 'WH2','上海',500 union
select 'WH3','廣州',200 union
select 'WH4','武漢',400


create table ding(
zhigong varchar(10) not null,
gong varchar(10) not null,
dgdh varchar(50) not null primary key,
tims datetime null
);

insert into ding
select 'E3','S7','OR67','2021-06-23'union
select 'E1','S4','OR73','2021-07-28'union
select 'E5','S4','OR76','2021-05-25'union
select 'E6','S6','OR77','2021-05-26'union
select 'E3','S4','OR79','2021-06-13'union
select 'E1','S2','OR80','2021-08-29'union
select 'E3','S3','OR90','2021-09-01'union
select 'E3','S3','OR91','2021-07-13'


create table gysb(
gysh varchar(10) not null primary key,
gname varchar(50) not null,
address varchar(100) not null
);

insert into gysb
select 'S2','名碩電子公司','蘇州'union
select 'S3','振華電子廠','西安'union
select 'S4','華通電子公司','北京'union
select 'S6','607廠','鄭州'union
select 'S7','愛華電子廠','北京'


create table zgb(
cgh varchar(10) not null,
zgh varchar(10) primary key not null,
money int not null
);

insert into zgb
select 'WH2','E1',1220union
select 'WH1','E3',1210union
select 'WH2','E4',1250union
select 'WH3','E5',1230union
select 'WH1','E6',1250


--使用SQL語句完成:
--DDL
--1.寫出建立上述表的語句(並設定好主外來鍵,以及其他約束)
--命令:

--2.給出插入上述資料的insert語句
--命令:

--單表查詢
--3.檢索職工關係中的所有資訊
--結果:
SELECT *from zgb
--4.檢索供應商關係中的所有資訊
select *from gysb
--5.檢索六月之後的所有訂單
select *from ding where MONTH(tims)>5
--6.檢索麵積大於400的倉庫
select *from changk where rea>400
--7.檢索哪些職工的工資多於1210
select *from zgb where money>1210
--8.檢索倉庫是“WH1”或“WH2”並且面積大於400的城市
select ckcs from changk where rea>400 and ckid='WH1'or ckid='WH2'


--9.找出倉庫面積在400到600的倉庫
select *from changk where rea between 400 and 600


--10.找出名中包含 “廠”的所有供應商的名

select gname as '供應商名' from gysb where gysb.gname like '%廠%'

--11.找出不在西安的供應商
select *from gysb where not address='西安'

--12.找出不在北京的倉庫
select *from changk where changk.ckcs!='北京'

--13.按工資降序排列出所有職工的資訊
select *from zgb order by money desc;

--14.先按倉庫號升序排列,再按工資降序排列
select *from zgb order by cgh , money desc

--15.在倉庫表中統計一下有幾個倉庫
select COUNT(*)as '倉庫數' from changk

-- 116.在職工表中統計一下有幾個倉庫

 

--17.求總的倉庫面積
select SUM(rea)as'總面積' from changk

--18.每個職工的訂單數
select zhigong as'職工號',COUNT(*)as'訂單數' from ding group by ding.zhigong


--19.訂單數大於3的職工

select zhigong as'職工號',COUNT(*)as'訂單數' from ding group by ding.zhigong having COUNT(*)>3

--20.找出在面積大於400的倉庫中工作的職工
select a.zgh from zgb a join changk b on a.cgh=b.ckid where rea>400

 

--21.找出在北京工作的職工和他們的工資情況
select zgh,money from zgb a join changk b on a.cgh=b.ckid where ckcs='北京'

--22.找出工資大於1215的職工和他們所在的城市
select ckcs,zgh from zgb a join changk b on a.cgh=b.ckid where money>1215

--23.哪些城市至少有一個訂單(從倉庫角度考慮)
select distinct a.ckcs from changk a join zgb b
on a.ckid =b.cgh join ding c
on b.zgh=c.zhigong group by a.ckcs having COUNT(*)>=1

select distinct ckcs from ding join zgb on ding.zhigong=zgb.zgh join changk on zgb.cgh=changk.ckid

--24.找出沒有任何訂單的城市
select c.ckcs from ding a join zgb b
on a.zhigong=b.zgh full join changk c
on b.cgh=c.ckid group by c.ckcs having COUNT(*)=1

select ckcs from changk except select distinct ckcs from ding join zgb on ding.zhigong=zgb.zgh join changk on zgb.cgh=changk.ckid

--25.找出和E4有同樣工資的所有職工
select *from zgb where money=(
select money from zgb where zgb.zgh='E4'
)


--26.找出倉庫面積大於400的倉庫的所有職工

select *from zgb where zgb.cgh=(
select changk.ckid from changk where rea>400
)

--27.找出供應商在西安的職工和他們的工資情況
select address,money from gysb a join ding b on a.gysh=b.gong join zgb c
on b.zhigong=c.zgh where address='西安' group by address,money

--28.找出不在北京倉庫裡工作的職工
select zgh,money from zgb a join changk b
on a.cgh=b.ckid
except select zgh,money from
zgb join changk c on zgb.cgh=c.ckid
where c.ckcs='北京'

--29.找出不在北京倉庫裡工作的職工
select zgh ,money from zgb join changk on zgb.cgh=changk.ckid where changk.ckcs='北京'


--30.求廣州和上海倉庫職工的總工資
select SUM(money) as '總工資' from zgb join changk on zgb.cgh=changk.ckid

--31.求所有職工工資都大於1210的倉庫的平均面積
select AVG(rea) from changk join zgb on changk.ckid=zgb.cgh where money>1210

select AVG(rea)as'平均面積' from
(select cgh from zgb except select cgh from zgb where money<1210)
a join changk on a.cgh=changk.ckid

--32.求上海倉庫中職工的最高工資
select MAX(money)as'最高工資' from zgb join changk on zgb.cgh=changk.ckid where ckcs='上海'

--33.訂單數大於或等於2的職工的工資
select a.money from (select zgb .zgh,money from zgb join ding on zgb.zgh=ding.zhigong
group by zgb.zgh,money having COUNT(*)>=2)a
create table stuInfo
(
stuNo varchar(6) not null primary key,
stuName varchar(10) not null,
stuSex varchar(2) not null,
stuAge int not null,
stuSeat int not null identity (1, 1),
strAddress varchar(255) default ('地址不詳')
)

--建立學生成績表
create table stuMarks
(
ExamNo varchar(7) not null primary key,
stuNo varchar(6) not null references stuInfo (stuNo),
writtenExam int null,
LabExam int null
)
--往學生資訊表內插入測試資料
insert into stuInfo(stuNo, stuName, stuSex, stuAge, strAddress)
select 's25301', '張秋麗', '男', 18, '北京海淀'
union
select 's25303', '李斯文', '女', 22, '河陽洛陽'
union
select 's25302', '李文才', '男', 85, '地址不詳'
union
select 's25304', '歐陽俊雄', '男', 28, '新疆'
union
select 's25318', '梅超風', '女', 23, '地址不詳'

--往學生成績表內插入測試資料
insert into stuMarks(ExamNo, stuNo, writtenExam, LabExam)
select 's271811', 's25303', 93, 59
union
select 's271813', 's25302', 63, 91
union
select 's271816', 's25301', 90, 83
union
select 's271817', 's25318', 63, 53
--聚合函式的使用
select COUNT(*) from stuInfo
--表關聯操作
select *from stuInfo a join stuMarks b on a.stuNo=b.stuNo
--檢視年齡比“李斯文”大的學員
select * from stuInfo where stuAge>(
select stuAge from stuInfo where stuName='李斯文'
)
--檢視性別和“李斯文”一致的學員
select *from stuInfo where stuSex=(
select stuSex from stuInfo where stuName='李斯文'
)
--查刪除別和“李斯文”一致的學員
delete from stuInfo where stuSex=(
select stuSex from stuInfo where stuName='李斯文'
)
--查詢年齡最大的學生資訊
select *from stuInfo where stuAge=(
select MAX(stuAge) from stuInfo
)
--查詢年齡最小的學生資訊
select *from stuInfo where stuAge=(
select MIN(stuAge) from stuInfo
)
--查詢筆試成績成績最高的學生
select *from stuMarks where writtenExam=(
select MAX(writtenExam) from stuMarks
)
--查詢筆試成績大於全班筆試平均成績的學生記錄
select * from stuMarks a join stuInfo b on a.stuNo=b.stuNo where writtenExam>(
select AVG(writtenExam) from stuMarks
)
--查詢筆試成績在70分以上的學生資訊(禁止聯表)
select *from stuInfo where stuNo in(
select stuNo from stuMarks where writtenExam>70
)

--檢視那些人沒有考試
select *from stuInfo where stuNo not in (
select stuNo from stuMarks
)

create view a
as
select *from stuInfo

select *from a where stuName like '%麗'

--like % 可以放任意的字
--like _ 只可以放一個字
select *from stuInfo where stuName like '張__';
-- 想知道每個學生對應的成績
create view view_a
as
select * from stuInfo a inner join stuMarks b
on a.stuNo=b.stuNo;
create view view_b
as
select * from stuMarks;

create view view_c
as
select a.*,labexam, writtenexam, examno
from stuInfo a full join stuMarks b
on a.stuNo=b.stuNo;

select *from view_c;
select * from view_c where stuName='李斯文';

create view view_d
as
select stuSex,count(*) as mount
from stuInfo group by stuSex;


create table region(
id varchar(20) primary key, --主鍵,區域編號
name varchar(20) not null, --區域名稱
pid varchar(20) not null --區域附屬編號 0省份
);

insert into region
select 's2309','廣東省','0'union
select 's2098','湖南省' ,'0'union
select 's2033','廣西省' ,'0'union
select 's2034','永州市' ,'s2098'union
select 's2056','長沙市' ,'s2098'union
select 's2012','廣東市' ,'s2309'union
select 's2089','東莞市' ,'s2309' union
select 's2037','懷化市' ,'s2098'


--查詢所有的省分
select *from region where pid='0'

---- 查詢湖南省下素有的市
select *from region where pid='s2098'

select *from region where pid in(
select id from region where name ='湖南省'
)

select a.name,count(b.name)
from region a full join region b
on a.id=b.pid where a.name like '%省%'
group by a.name;

-- 查詢性張的人: 張x,張xx,張xxx
select * from stuInfo where stuName like '張%';

-- 查詢性張的人: 張xx
select * from stuInfo where stuName like '張__';

-- 查詢以麗結尾的人: xx麗
select * from stuInfo where stuName like '%麗';

-- 查詢名字帶秋的人: 秋xx,x秋x,xx秋
select * from stuInfo where stuName like '%秋%';