diff --git "a/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0919\344\275\234\344\270\232.sql" "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0919\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..30424bbf9d9e6c1f009ba54cb09b577cc12543e0 --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0919\344\275\234\344\270\232.sql" @@ -0,0 +1,32 @@ +----------------作业--------------------- +--1. 关羽的银行卡号为"6225547858741263",查询出余额比关羽多的银行卡信息,显示卡号,身份证,姓名,余额。 +select * from BankCard b +inner join AccountInfo a on b.AccountId=a.AccountId +where CardMoney >(select CardMoney from BankCard where CardNo='6225547858741263'); +--2. 从所有账户信息中查询出余额最高的交易明细(存钱取钱信息)。 +select * from BankCard b +INNER join CardExchange c on b.CardNo = c.CardNo +where CardMoney IN (select max(CardMoney) from BankCard ) +--3. 查询有取款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select a.RealName,a.AccountCode,b.CardNo,b.CardMoney from AccountInfo a +INNER JOIN dbo.BankCard b ON b.AccountId = a.AccountId +WHERE b.CardNo IN (select CardNoOut from CardTransfer) +--4. 查询出没有存款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select a.RealName,a.AccountCode,b.CardNo,b.CardMoney from AccountInfo a +INNER JOIN dbo.BankCard b ON b.AccountId = a.AccountId +WHERE b.CardMoney IN (select MoneyInBank from CardExchange) +--5. 关羽的银行卡号为"6225547858741263",查询当天是否有收到转账。 + if exists( select * from CardTransfer where CardNoIn=6225547858741263) + print '有' + else + print '没有' +--6. 查询出交易次数(存款取款操作)最多的银行卡账户信息,显示:卡号,身份证,姓名,余额,交易次数。 +select AccountInfo.*,BankCard.CardMoney from AccountInfo +inner join BankCard on BankCard.AccountId=AccountInfo.AccountId +where BankCard.AccountId in( +select AccountId from BankCard +where CardNo in (select CardNoOut from CardTransfer)) +--7. 查询出没有转账交易记录的银行卡账户信息,显示卡号,身份证,姓名,余额。 +select a.RealName,a.AccountCode,b.CardNo,b.CardMoney from AccountInfo a +INNER JOIN dbo.BankCard b ON b.AccountId = a.AccountId +WHERE b.CardNo != ( SELECT CardNoIn FROM CardTransfer ) AND b.CardNo !=( SELECT CardNoOut FROM CardTransfer ) \ No newline at end of file diff --git "a/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0921\344\275\234\344\270\232.sql" "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0921\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..24308ef954d423d0f7ee43489212031d3e72ae32 --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\344\275\234\344\270\232/0921\344\275\234\344\270\232.sql" @@ -0,0 +1,51 @@ +--13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 +select sid, + max(case when cid ='01'then score else null end)语文, + max(case when cid ='02'then score else null end)数学, + max(case when cid ='03'then score else null end)英语, + AVG(score)平均成绩 + from sc + group by sid + order by avg (score) desc + +--14. 查询各科成绩最高分、最低分和平均分: + +--以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 + +--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 + +--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 +SELECT +cid AS 课程ID, +COUNT(sid) AS 课程人数, +MAX(score) AS 最高分, +MIN(score) AS 最低分, +AVG(score) AS 平均分, +SUM(及格) / COUNT(sid) AS 及格率, +SUM(中等) / COUNT(sid) AS 中等率, +SUM(优良) / COUNT(sid) AS 优良率, +SUM(优秀) / COUNT(sid) AS 优秀率 +FROM +(SELECT *, +CASE WHEN score >= 60 THEN 1 ELSE 0 END AS 及格, +CASE WHEN score >= 70 AND score<80 THEN 1 ELSE 0 END AS 中等, +CASE WHEN score >= 80 AND score<90 THEN 1 ELSE 0 END AS 优良, +CASE WHEN score >= 90 THEN 1 ELSE 0 END AS 优秀 +FROM sc) a +GROUP BY cid +ORDER BY COUNT(sid) DESC,cid + +select +(select count(*) from sc s2 where s1.CId = s2.CId and s2.score>60 group by cid) s,count(*) +from sc s1 +group by s1.cid + +--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺 +select rank() over (partition by cid order by score desc) as 排名,cid,score from SC; + +--15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次 +select DENSE_RANK() over (partition by cid order by score desc) as 排名,cid,score from SC; +--16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 +select rank() over (order by sum(score) desc) as 排名,sid,sum(score) from SC group by sid +--16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺 +select DENSE_RANK() over (order by sum(score) desc) as 排名,sid,sum(score) from SC group by sid \ No newline at end of file diff --git "a/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/0919\345\255\220\346\237\245\350\257\242\346\225\260\346\215\256\350\241\250.sql" "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/0919\345\255\220\346\237\245\350\257\242\346\225\260\346\215\256\350\241\250.sql" new file mode 100644 index 0000000000000000000000000000000000000000..254830b7baff493af99916df426c10f448909785 --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/0919\345\255\220\346\237\245\350\257\242\346\225\260\346\215\256\350\241\250.sql" @@ -0,0 +1,67 @@ +--drop database DBSTUDENT +create database DBSTUDENTS +go +use DBSTUDENTS +go + +create table StuInfo( + StuID int primary key identity(1,1), + StuName varchar(20), + StuSex varchar(2), + ClassID int +); +go + +create table StuScore( + ExamNo int primary key identity(1,1), + StuID int, + Subject varchar(20), + Score int +); +go + + +create table StuCourse( + cid int primary key, + cname varchar(20) +); + + +create table teacher( + tid int, + tname varchar(20) unique +); + + +-- +insert StuInfo values('黄炜杰','男',1); +insert StuInfo values('周飘','女',2); +insert StuInfo values('曾鹏','男',1); +insert StuInfo values('李雅芸','女',1); +insert StuInfo values('达兴建','男',2); +go + +-- +insert StuScore values(1,'HTML',85); +insert StuScore values(1,'Java',80); +insert StuScore values(1,'SQL',82); +insert StuScore values(2,'HTML',70); +insert StuScore values(2,'Java',81); +insert StuScore values(2,'SQL',60); +insert StuScore values(3,'HTML',70); +insert StuScore values(3,'Java',90); +insert StuScore values(3,'SQL',85); +insert StuScore values(4,'Java',61); +insert StuScore values(4,'SQL',68); +insert StuScore values(5,'HTML',90); +insert StuScore values(5,'Java',81); +insert StuScore values(5,'SQL',65); +go + +select * from StuInfo; +select * from StuScore; +go + + + + diff --git "a/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/20220921-4\347\217\255-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242_\346\216\222\345\272\217.sql" "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/20220921-4\347\217\255-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242_\346\216\222\345\272\217.sql" new file mode 100644 index 0000000000000000000000000000000000000000..866f10e5ab4076e1904283c7b65161bc22ce2a20 --- /dev/null +++ "b/40\345\274\240\350\200\200\344\273\201/\347\254\224\350\256\260/20220921-4\347\217\255-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242_\346\216\222\345\272\217.sql" @@ -0,0 +1,29 @@ +use STUDENTS +go + +select * from tb_student + +--查询年龄最大的学生信息,要求显示:姓名,性别,年龄 +select birth,name 姓名,gender 性别 from tb_student +where birth = (select min(birth) from tb_student) + +--排序函数 +select birth,姓名,性别 from ( +select birth,name 姓名,gender 性别,row_number() over (order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1 + +--查询男生和女生中年龄最大的学生信息,要求显示:姓名,性别,年龄 +--非关联子查询 +select birth,name 姓名,gender 性别 from tb_student +where birth in (select min(birth) from tb_student group by gender) + +--关联子查询:内部查询需要引用外部表已查询出的信息 +select birth,name 姓名,gender 性别 from tb_student t1 +where birth = (select min(birth) from tb_student t2 where t2.gender=t1.gender) + +--窗口函数:排序 +select birth,姓名,性别 from ( +select birth,name 姓名,gender 性别,row_number() over (partition by gender order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1