From 46e603fa76992e375a9193722fedbb43aaf360cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=88=A9=E7=BE=A4?= <2246026162@qq.com> Date: Thu, 29 Sep 2022 15:47:19 +0800 Subject: [PATCH] 32 --- .../.keep" | 0 .../\344\275\234\344\270\232/.keep" | 0 ...4\346\254\241\344\275\234\344\270\232.sql" | 56 ++++ ...1\346\254\241\344\275\234\344\270\232.sql" | 41 +++ ...3\346\254\241\344\275\234\344\270\232.sql" | 40 +++ ...4\346\254\241\344\275\234\344\270\232.sql" | 160 ++++++++++ .../\347\254\224\350\256\260/.keep" | 0 .../2022-09-18\347\254\224\350\256\260.md" | 85 ++++++ .../2022-09-20\347\254\224\350\256\260.md" | 285 ++++++++++++++++++ .../2022-09-22\347\254\224\350\256\260.md" | 22 ++ ...30\351\207\217\347\254\224\350\256\260.md" | 69 +++++ 11 files changed, 758 insertions(+) create mode 100644 "32\351\231\206\345\210\251\347\276\244/.keep" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/.keep" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-20\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-22\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-23\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/.keep" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-18\347\254\224\350\256\260.md" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260.md" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260.md" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-23\345\261\200\351\203\250\345\217\230\351\207\217\347\254\224\350\256\260.md" diff --git "a/32\351\231\206\345\210\251\347\276\244/.keep" "b/32\351\231\206\345\210\251\347\276\244/.keep" new file mode 100644 index 0000000..e69de29 diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/.keep" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000..e69de29 diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..16cc13a --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.sql" @@ -0,0 +1,56 @@ +select * from Department +select * from [Rank] +select * from People + +--1. 查询出武汉地区所有的员工信息,要求显示部门名称以及员工的详细资料 +select p.*,d.DepartmentName from People p +join Department d on d.DepartmentId=p.DepartmentId +where PeopleAddress='武汉' + + +--2. 查询出武汉地区所有的员工信息,要求显示部门名称,职级名称以及员工的详细资料 +select p.*,d.DepartmentName,r.RankName from People p +join Department d on d.DepartmentId=p.DepartmentId +join Rank r on r.RankId=p.RankId +where PeopleAddress='武汉' + +--3. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资。 +select DepartmentId,COUNT(*)员工人数,SUM(PeopleSalary)员工工资总和, +AVG(PeopleSalary)平均工资,MAX(PeopleSalary)最高工资,MIN(PeopleSalary)最低工资 from People +group by DepartmentId + +--4. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资, +--平均工资在10000 以下的不参与统计,并且根据平均工资降序排列。 +select DepartmentId,COUNT(*)员工人数,SUM(PeopleSalary)员工工资总和, +AVG(PeopleSalary)平均工资,MAX(PeopleSalary)最高工资,MIN(PeopleSalary)最低工资 from People +group by DepartmentId +having AVG(PeopleSalary)>=10000 +order by 平均工资 desc + +--5. 根据部门名称,然后根据职位名称,分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资 +select d.DepartmentName ,COUNT(*) 员工人数,SUM(PeopleSalary) 员工工资总和 , +AVG(PeopleSalary) 平均工资,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资 from People p +join Department d on d.DepartmentId=p.DepartmentId +group by d.DepartmentName,RankId + +--6.查询出巨蟹 6.22--7.22 的员工信息 +select * from People where +(MONTH(PeopleBirth)=6 and DAY(PeopleBirth)>=22) or +(MONTH(PeopleBirth)=7 and DAY(PeopleBirth)<=22) + +--7.查询所有员工信息,添加一列显示属相(鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪) +select *,case YEAR(PeopleBirth) % 12 +when 4 then '鼠' +when 5 then '牛' +when 6 then '虎' +when 7 then '兔' +when 8 then '龙' +when 9 then '蛇' +when 10 then '马' +when 11 then '羊' +when 0 then '猴' +when 1 then '鸡' +when 2 then '狗' +when 3 then '猪' +end 属相 + from People \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-20\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-20\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..bd89737 --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-20\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" @@ -0,0 +1,41 @@ + +select * from AccountInfo --个人信息 +select * from BankCard --银行卡信息 +select * from CardStateChange --银行卡状态更改表 +select * from CardTransfer --转账表 +select * from CardExchange --交易记录 + +--1. 关羽的银行卡号为"6225547858741263",查询出余额比关羽多的银行卡信息,显示卡号,身份证,姓名,余额。 +select b.CardNo 卡号, AccountCode 身份证 , RealName 姓名 , b.CardMoney 余额 from AccountInfo a +join BankCard b on b.AccountId=a.AccountId +where a.AccountId =any (select AccountId from BankCard where CardMoney >(select CardMoney from BankCard where CardNo ='6225547858741263')) ; + +--2. 从所有账户信息中查询出余额最高的交易明细(存钱取钱信息)。 +select * from CardExchange where CardNo =any ( +select a.CardNo from (select CardNo,RANK() over (order by CardMoney desc) sort from BankCard ) a +where a.sort=1 +) + +--3. 查询有取款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select b.CardNo ,a.AccountCode ,a.RealName,b.CardMoney from AccountInfo a +inner join BankCard b on a.AccountId=b.AccountId +where CardNo =any (select distinct CardNoOut from CardTransfer) + +--4. 查询出没有存款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select CardNo,AccountCode,RealName,CardMoney from BankCard b +inner join AccountInfo a on a.AccountId=b.AccountId +where CardNo not in (select CardNo from CardExchange) + +--5. 关羽的银行卡号为"6225547858741263",查询当天是否有收到转账。 +select * from CardTransfer where CardNoIn ='6225547858741263' + +--6. 查询出交易次数(存款取款操作)最多的银行卡账户信息,显示:卡号,身份证,姓名,余额,交易次数。 +select b.CardNo, AccountInfo .AccountCode,AccountInfo .RealName,b.CardMoney,a.cou from BankCard b inner join +(select CardNo,COUNT(*) cou,RANK() over (order by count(*) desc) sort from CardExchange group by CardNo) a on b.CardNo=a.CardNo +inner join AccountInfo on AccountInfo.AccountId=b.AccountId +where a.sort=1 + +--7. 查询出没有转账交易记录的银行卡账户信息,显示卡号,身份证,姓名,余额。 +select CardNo,AccountCode,RealName,CardMoney from BankCard b +inner join AccountInfo a on a.AccountId=b.AccountId +where CardNo not in (select CardNoOut from CardTransfer) diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-22\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-22\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..3ef1aa3 --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-22\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.sql" @@ -0,0 +1,40 @@ +select * from Student;--学生表 +select * from Course;--课程表 +select * from Teacher;--教师表 +select * from SC;--成绩表 + +--13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 +select sc.sid,c.Cname,sc.score,sc1.平均分 from sc +join Course c on c.CId=sc.CId +join(select sid, avg(score)平均分 from sc group by SId) sc1 on sc1.SId=sc.SId +order by sc1.平均分 desc + +--14. 查询各科成绩最高分、最低分和平均分: + +--以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 + +--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 + +--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 +SELECT co.cid AS 课程id ,co.Cname AS 课程,MAX(sc.score) AS 最高分, MIN(sc.score)AS 最低分 ,AVG(sc.score) AS 平均分 , + SUM(CASE WHEN sc.score >= 60 THEN 1 ELSE 0 END)/COUNT(sc.[SId]) AS 及格率, + SUM(CASE WHEN sc.score >= 70 AND sc.score< 80 THEN 1 ELSE 0 END)/COUNT(sc.[SId]) AS 中等率, + SUM(CASE WHEN sc.score >= 80 AND sc.score<90 THEN 1 ELSE 0 END)/COUNT(sc.[SId]) AS 优良率, + SUM(CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END)/COUNT(sc.[SId]) AS 优秀率 +FROM Course co +inner join SC on co.CId=sc.CId +group by co.cid ,co.Cname + +--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺 +select *,RANK() over(partition by cid order by score desc) rank from sc + +--15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次 +select *,DENSE_RANK() over(partition by cid order by score desc) rank from sc + +--16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 +select sid,sum(score),rank() over(partition by sid order by sum(score) desc) rank from sc +group by sid + +--16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺 +select sid,sum(score),ROW_NUMBER() over(partition by sid order by sum(score)desc) rank from sc +group by sid \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-23\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-23\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..6b1bbce --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-09-23\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.sql" @@ -0,0 +1,160 @@ +select * from AccountInfo +select* from BankCard +select* from CardExchange +select* from CardStateChange +select* from CardTransfer +--1. 为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 +declare @idcard varchar(20),@code varchar(20),@aid int,@cn varchar(30) +set @idcard = '420107199904054233' +select @code=AccountCode from AccountInfo where AccountCode=@idcard +if(@code is null) +begin + insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) + values (@idcard,'13566755867','赵云',GETDATE()) + select @aid =AccountId from AccountInfo where AccountCode=@idcard + insert into BankCard (CardNo,AccountId,CardPwd,CardMoney,CardState,CardTime) values ('6225547858741264',@aid,'123456',0,1,GETDATE ()) + select @cn=CardNo from BankCard where AccountId=@aid + print '您已成功开卡开户,你的卡号是' +@cn+'初始密码是123456' +end + + +--2. 需要求出张飞的银行卡卡号和余额,张飞身份证:420107199602034138 (1.使用连接查询,2.使用变量) +declare @cardno varchar(50),@money money +select @cardno = CardNo,@money = CardMoney from AccountInfo a +join BankCard b on a.AccountId = b.AccountId +where AccountCode = '420107199602034138' +print '银行卡卡号为'+ @cardno + ',余额为' + cast(@money as varchar(50)) + + +--3.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元,余额充足则进行取钱操作, +--并提示"取钱成功",否则提示“余额不足”。 +declare @cardmoney money; +select @cardmoney= CardMoney from BankCard where CardNo='6225547854125656'; +if @cardmoney>5000 +begin + update BankCard set CardMoney=CardMoney-5000 where CardNo='6225547854125656' + insert into CardExchange (CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) values ('6225547854125656',0,5000,GETDATE()) + print '取钱成功' +end +else +begin + print '余额不足' +end + +--?4.查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”, +--并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +----显示列分别为卡号,身份证,姓名,余额,用户等级,银行卡状态。 +select +CardNo 卡号, +(select AccountCode from AccountInfo a where a.AccountId = b.AccountId) 身份证, +(select RealName from AccountInfo a where a.AccountId = b.AccountId) 姓名, +CardMoney 余额, +case + when CardState = 1 then '正常' + when CardState = 1 then '挂失' + when CardState = 1 then '冻结' + else '注销' + end as 银行卡状态, +case + when CardMoney > 300000 then 'VIP用户' + else '普通用户' + end as 用户等级 +from BankCard b + +--?5.循环打印1-10。 +declare @i int =1 +while(@i <= 10) +begin + print @i + set @i += 1 +end + +--6.打印99乘法表 +declare @n int = 1 +while @n<=9 +begin + + declare @m int = 1 + declare @result varchar(500) = '' + while @m<=@n + + begin + set @result = @result + convert(varchar(2), @n) + ' * ' + + convert(varchar(2), @m) + ' = '+ convert(varchar(2),@n*@m) + char(9) + set @m =@m + 1 + end + + print @result + set @n = @n + 1 + +end + +#### 局部变量 + +局部变量必须以标记@作为前缀 ,如@age +局部变量的使用是先声明,再赋值 +局部变量只在定义它的局部范围内有效 + +声明一个局部变量:**declare @变量名 数据类型** + +```sql +--例: + declare @id int --声明一个名为id的整型变量 + declare @name varchar(50) --声明一个可变长度为50的存放姓名的字符串变量 + +``` + +赋值: + +- set @变量名 = 值 + +- select @变量名 = 值 + +```sql +--例: + select @id = 1001 + set @name = '周飘' +``` + +set与select赋值的区别: + +set赋值给变量指定的值,select一般用于表中查询出的数据赋值给变量,如果查询结果有多条,取最后一条赋值给变量 + +## 输出语句 + +1. print变量或表达式 +2. select变量或表达式 + +```sql +--例: + print '数据库服务器名:' + @@servicename + select 15*8 +``` + +## 逻辑控制语句 + +```sql +-- if() else +if() +begin + ... +end +else + ... +end + +-- switch case +case +when 条件 then 结果 +else 其他结果 +end +``` + +## 循环控制语句 + +```sql +while() +begin + ... +end +``` \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/.keep" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/.keep" new file mode 100644 index 0000000..e69de29 diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-18\347\254\224\350\256\260.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-18\347\254\224\350\256\260.md" new file mode 100644 index 0000000..7fbb8cc --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-18\347\254\224\350\256\260.md" @@ -0,0 +1,85 @@ + 涓婚敭锛歱rimary key + +鑷锛歩ndentity锛坸,y锛塠浠巟寮濮嬫瘡娆″鍔爕] + +闈炵┖锛歯ot null + +榛樿锛歞efault锛堬級 + + check绾︽潫锛歝henk锛堟潯浠讹級 + +鍞竴锛歶nique + +澶栭敭锛(foreign key)references 琛ㄥ悕锛堝瓧娈靛悕锛 + +澶栭敭锛欰lter table 琛ㄥ悕 add constraint 绾︽潫鍚 foreign key(瀛楁鍚) references 涓婚敭琛(瀛楁) + +澧炲姞瀛楁锛欰lter table 琛ㄥ悕 add 瀛楁鍚 鏉′欢 + + + +SQL璇彞鎵ц椤哄簭: + +1.FROM + +2.ON + +3. **JOIN** + +4.**WHERE** + +5.**GROUP** **BY** + +6. HAVING + +7.**SELECT** + +8.**DISTINCT** + +9.**ORDER** **BY** + +10.**LIMIT** + + + +鑱氬悎鍑芥暟锛 + +1.count:姹傛暟閲 + +2.**max**:姹傛渶澶у + +3.**min**:姹傛渶灏忓 + +4.**sum**:姹傚拰 + +5.**avg**:姹傚钩鍧囧 + + + +sql涓父鐢ㄧ殑鏃堕棿鍑芥暟锛 + +**select** DATEDIFF(**day**, '2019-08-20', getDate()); --鑾峰彇鎸囧畾鏃堕棿鍗曚綅鐨勫樊鍊 + +**SELECT** DATEADD(**MINUTE**,-5,GETDATE()) --鍔犲噺鏃堕棿,姝ゅ涓鸿幏鍙栦簲鍒嗛挓鍓嶇殑鏃堕棿,MINUTE 琛ㄧず鍒嗛挓锛屽彲涓 YEAR,MONTH,DAY,HOUR + +**select** DATENAME(**month**, getDate()); --褰撳墠鏈堜唤 + +**select** DATENAME(WEEKDAY, getDate()); --褰撳墠鏄熸湡鍑 + +**select** DATEPART(**month**, getDate()); --褰撳墠鏈堜唤 + +**select** **DAY**(getDate()); --杩斿洖褰撳墠鏃ユ湡澶╂暟 + +**select** **MONTH**(getDate()); --杩斿洖褰撳墠鏃ユ湡鏈堟暟 + +**select** YEAR(getDate()); --杩斿洖褰撳墠鏃ユ湡骞存暟 + +**SELECT** **CONVERT**(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 + +**SELECT** **CONVERT**(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 + +**SELECT** **CONVERT**(VARCHAR(22),GETDATE(),23) --2020-01-09 + +**SELECT** **CONVERT**(VARCHAR(22),GETDATE(),24) --15:04:07 + +**Select** **CONVERT**(varchar(20),GETDATE(),14) --15:05:49:330 diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260.md" new file mode 100644 index 0000000..2a33f3f --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260.md" @@ -0,0 +1,285 @@ +## 鍥為【 + +1. 鍙橀噺鐨勪娇鐢ㄣ傝鍏堢敤DECLARE 鍏抽敭瀛楀0鏄庯紝鐒跺悗鐢⊿ET鎴朣ELECT璧嬪笺傚眬閮ㄥ彉閲忓墠蹇呴』鏈 鈥淍鈥 浣滃墠缂锛屽叏灞鍙橀噺蹇呴』鏈 鈥淍@鈥 浣滃墠缂銆 +2. 鍙橀噺鐨勮緭鍑哄彲浠ョ敤锛歅RINT鎴朣ELECT璇彞銆 +3. 閫昏緫鎺у埗璇彞鎻愪緵浜嗘潯浠舵搷浣滄墍闇鐨勯『搴忓拰閫昏緫銆 +4. 鎵瑰鐞嗗彲浠ユ彁楂樿鍙ユ墽琛岀殑鏁堢巼锛屼娇鐢ㄢ淕O鈥濅綔涓虹粨鏉熸爣蹇椼 + + + +## 宓屽/瀛愭煡璇 + +#### 浠涔堟槸瀛愭煡璇紵 + +**闂:缂栧啓T-SQL璇彞锛屾煡璇⑩滈粍鐐滄澃鈥濆悓瀛︾殑鍒嗘暟澶т簬80 鍒嗙殑鑰冭瘯鎴愮哗璁板綍锛** + +```sql +--瀹炵幇鏂瑰紡1锛氳繛鎺ユ煡璇 +--瀹炵幇鏂瑰紡2: 瀛愭煡璇 +``` + + + +#### 瀛愭煡璇㈢殑鐗圭偣鍜屼紭鍔 + +1锛変娇鐢ㄧ伒娲汇 + +1. 鍙互鎴愪负SQL 璇彞鐨勫涓儴鍒嗐 +2. **瀛愭煡璇綔涓烘煡璇㈡潯浠朵娇鐢**銆 + +```sql +--缁冧範:鏌ヨ瀛﹀彿鍦ㄦ浘楣忓墠闈㈢殑鍚屽淇℃伅 +``` + +1. **瀛愭煡璇綔涓轰复鏃惰〃浣跨敤**銆 from () + +```sql +--缁冧範:鏌ヨ鎵鏈夊鐢熺殑HTML鎴愮哗锛屽鏋滃鐢熸病鏈夋垚缁╂樉绀簄ull +``` + +1. **瀛愭煡璇綔涓哄垪浣跨敤**銆 + +```sql +--缁冧範:鏌ヨ鎵鏈夊鐢熺殑HTML鎴愮哗锛屽鏋滃鐢熸病鏈夋垚缁╂樉绀簄ull +``` + +2锛夐檷浣嶴QL 鐨勮鍙ョ殑澶嶆潅搴︼紝鎻愰珮SQL 璇彞鐨勫彲璇绘с + +#### 瀛愭煡璇 + +![](https://gitee.com/snailclass/tuchuang/raw/master/img/image-20220906173549480-2022-9-1913:24:45.png) + +##### 鎸夌粨鏋滃垎绫 + +###### 鏍囬噺瀛愭煡璇 锛 + +**閫氬父鍙互浣跨敤杩炴帴鏌ヨ鏇夸唬** + +鏍囬噺瀛愭煡璇㈡槸鎸囧瓙鏌ヨ杩斿洖鐨勬槸**鍗曚竴鍊**锛屽涓涓暟瀛楁垨涓涓瓧绗︿覆銆 + +```sql +--1.鏌ヨ涔︾洰琛(tb_bibliography)涓紝鏉$爜鍙(barcode)涓"TP311锛13"鍥句功锛堥渶瑕佸湪鍥句功琛ㄤ腑鍏堟煡鎵"TP31L13"鐨処SBN鍙凤級鐨勫浘涔﹀悕绉(name)鍜屼綔鑰(author) + + +--2.鏌ヨ鍊熼槄琛(tb-record锛変腑濮撳悕涓"閭撴壙鏄"锛堥渶瑕佸湪瀛︾敓琛ㄤ腑鍏堟煡鎵"閭撴壙鏄'鐨勫鍙凤級鐨勫鐢熺殑鍊熼槄淇℃伅锛屾樉绀哄鍙(stu-num)鍜屾潯鐮佸彿(barcode) +``` + + + +###### 鍒楀瓙鏌ヨ + +**鍒楀瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炵殑缁撴灉闆嗘槸N琛1鍒**锛岃缁撴灉閫氬父鏉ヨ嚜瀵硅〃鏌愪釜瀛楁鐨勬煡璇㈢粨鏋滐紝甯n鍏抽敭瀛楃殑瀛愭煡璇㈡槸鏈甯哥敤鐨勪竴绫诲瓙鏌ヨ锛屽湪浣跨敤in鍏抽敭瀛楄繘琛屾煡璇㈡椂锛屽瓙鏌ヨ璇彞杩斿洖鐨勭粨鏋滃簲璇ユ槸涓涓暟鎹垪涓殑澶氫釜鍊硷紝濡傛灉浠呰繑鍥1涓暟鍊硷紝鍒欏彲鐢ㄦ爣閲忓瓙鏌ヨ浠f浛銆 + +```sql +--in涔犻 +--鏌ヨ瀛︾敓琛(tb-student)涓拰榛勫紭鐩稿悓涓撲笟瀛︾敓璇昏呯殑瀛﹀彿(stu-num)濮撳悕(name)鍜屼笓涓(major) +--鍏堟煡璇 榛勫畯鐨 涓撲笟 +select major from tb_student where name='榛勫紭' +--in浠h〃:鍙绗﹀悎鍚庨潰鐨勬潯浠跺氨绛涢夊嚭鏉 +select * from tb_student where major in (select major from tb_student where name='榛勫紭') + + +--鏌ヨ瀛︾敓琛(tb-student)涓繕鏈繕涔︾殑璇昏呯殑瀛﹀彿(stu-num)鍜屽鍚(name) +--鏌ヨ鏈繕涔﹀鐢熺殑瀛﹀彿 +select stu_num from tb_record where return_time is null +--閫氳繃瀛﹀彿鏌ヨ瀛︾敓濮撳悕 +select * from tb_student where stu_num in (select stu_num from tb_record where return_time is null) + + +--all any some 涔犻 +--1.鏌ヨ瀛︾敓琛(tb-student)涓紝姣斾俊鎭闄㈠嚭鐢熸棩鏈熸渶澶х殑杩樿澶х殑鎵鏈夊鐢熻褰曪紝鍗虫瘮淇℃伅瀛﹂櫌骞撮緞鏈灏忕殑杩樿灏忕殑鎵鏈夎褰曪紝浣跨敤ALL鍏抽敭瀛楋紝鏄剧ず瀛︾敓鐨勫鍚(name)銆佸嚭鐢熸棩鏈(birth)鍜屾墍灞炲闄(school)锛屽悓鏍风殑缁撴灉灏濊瘯鐢╩ax()鍑芥暟鍐嶅疄鐜颁竴娆° +--淇℃伅瀛﹂櫌瀛︾敓鏈灏忓勾榫 +select birth from tb_student where school='淇℃伅瀛﹂櫌' +select max(birth) from tb_student where school='淇℃伅瀛﹂櫌' + +select * from tb_student where birth>(select max(birth) from tb_student where school='淇℃伅瀛﹂櫌' ) + +--all鍏抽敭瀛楋細>,<,= +select * from tb_student where birth>all(select birth from tb_student where school='淇℃伅瀛﹂櫌') +--2.鏌ヨ瀛︾敓琛(tb-student)涓紝姣斾俊鎭闄㈠嚭鐢熸棩鏈熸渶灏忕殑杩樿澶х殑鎵鏈夊鐢熻褰曪紝鍗虫瘮淇℃伅瀛﹂櫌骞撮緞鏈澶х殑杩樿灏忕殑鎵鏈夎褰曪紝浣跨敤ANY鍏抽敭瀛楋紝鏄剧ず瀛︾敓鐨勫鍚(name)銆佸嚭鐢熸棩鏈(birth)鍜屾墍灞炲闄(school)銆傚皾璇曠敤SOME鍏抽敭瀛椾唬鏇緼NY锛岄噸鏂版墽琛屽悗瑙傚療鏌ヨ缁撴灉銆 +select * from tb_student where birth>any(select birth from tb_student where school='淇℃伅瀛﹂櫌') +select * from tb_student where birth>some(select birth from tb_student where school='淇℃伅瀛﹂櫌') +--3.鏌ヨ涔︾洰琛(tb-bibliography)涓紝浣跨敤ANY鍏抽敭瀛楋紝姣忕绫诲瀷涓渶璐电殑鍥 涔﹀悕绉(name)鍜屼环鏍(price) +-- =any 涓 in 绛変环 +select max(price) 鏈璐电殑浠锋牸 from tb_bibliography group by category +select name 鍥句功鍚嶇О,price 浠锋牸 from tb_bibliography +where price in (select max(price) 鏈璐电殑浠锋牸 from tb_bibliography group by category) + +``` + + + +###### 琛屽瓙鏌ヨ + +琛屽瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炵殑缁撴灉闆嗘槸1琛孨鍒楋紝璇ュ瓙鏌ヨ鐨勭粨鏋滈氬父鏄琛ㄧ殑鏌愯鏁版嵁杩涜鏌ヨ鑰岃繑鍥炵殑缁撴灉闆嗐 + +```sql +--锛1锛夋煡璇功鐩〃(tb_bibliography)涓笌銆婄鐞嗕俊鎭郴缁熷疄鐢ㄦ暀绋嬶紙绗3鐗堬級銆嬪悓浣滆(author)锛屽悓绫诲瀷(category)鐨勪功銆 +--锛2锛夋煡璇㈠鐢熻〃(tb_student)涓笌"閭圭澘鐫'鍦ㄥ悓涓涓闄(school)涓斿悓涓骞寸骇锛堝鍙峰ご涓や綅鐩稿悓鍒欒〃鏄庡湪鍚屼竴骞寸骇锛夊鐢熺殑瀛﹀彿銆佸鍚嶅拰瀛﹂櫌銆 +``` + + + +###### 琛ㄥ瓙鏌ヨ(from瀛愭煡璇) + +琛ㄥ瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炴槸M琛孨鍒楃殑缁撴灉闆嗭紝鏌ヨ璇彞鍙祵濂楀湪FROM鍏 +閿瓧鍚庯紝涓旈渶瑕佸畾涔夊埆鍚嶃 + +```sql +--鏌ヨ姣忕鍥句功鍦ㄩ鐨勬湰鏁帮紝鏄剧ずISBN鍙(ISBN)銆佸浘涔﹀悕绉(name)鍜岃鍥句功鐨勫湪棣嗘暟閲忋 +``` + + + +##### 鎸変綅缃垎绫 + +###### exists瀛愭煡璇 + +鍏抽敭瀛桬XISTS鏋勯犲瓙鏌ヨ鏃讹紝褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓嶄负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负TRUE锛屽灞傛煡璇㈣鍙ヨ繘琛屾煡璇紱褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓虹┖鏃讹紝鍒橢XISTS杩斿洖鐨勭粨鏋滀负FALSE锛屽灞傛煡璇㈣鍙ヤ笉杩涜鏌ヨ銆 + +```sql +--锛1锛夋煡璇㈠鐢熻〃(tb-student)涓紝鏄惁鏈夊鐢熻鑰呯殑濮撳悕鏄"榛勫紭" +if exists(select stu_num from tb_record where stu_num in (select stu_num from tb_student where name='榛勫紭') and return_time is null) + print '鏈' +else + print '娌℃湁' + +--锛2锛夋煡璇功鐩〃(tb-bibliography)涓紝搴撳瓨鏁颁负0鐨勪功鐩悕绉(name) +``` + +## 鎺掑簭鍑芥暟 + +**鎺掑簭鍑芥暟 OVER( [鍒嗙粍瀛愬彞] 鎺掑簭瀛愬彞[DESC][ASC] )** + +**鎺掑簭瀛愬彞 锛歄RDER BY 鎺掑簭鍒,鎺掑簭鍒椻** + +缁冧範:浣跨敤鍚勪釜鎺掑悕鍑芥暟瀵瑰鍛樼殑Java 鎴愮哗杩涜鎺掑悕锛屽苟浠旂粏浣撲細鍏朵腑鎺掑簭鍑芥暟鐨勫叿浣撶敤娉曚笌鍏朵腑鐨勫尯鍒 + +```sql + +``` + +- ROW_NUMBER()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑杩炵画鐨勫簭鍙** +- RANK()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪骞朵笖璺崇┖** +- DENSE_RANK() 鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪涓嶈烦绌** + +鏍规嵁涓婇潰涓変釜鍑芥暟锛屾垜浠彲浠ュ鍔犱竴涓簭鍒楋紝浣嗘槸鏈夋椂鍊欐垜浠渶瑕佸鏁版嵁杩涜鍒嗙粍锛岀劧鍚庡鍒嗙粍鍚庣殑鏁版嵁杩涜澧炲姞搴忓垪锛孭ARTITION BY鍙互涓庝互涓婁笁涓嚱鏁拌仈鍚堜娇鐢 + +```sql +--瀛︾敓鐨凧ava鎴愮哗锛屽苟鏍规嵁鎴愮哗鎺掑悕 +--row_number() +select StuName 濮撳悕,ROW_NUMBER() over(order by score desc) 鎺掑悕,score 鍒嗘暟 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' + +--rank() +select StuName 濮撳悕,rank() over(order by score desc) 鎺掑悕,score 鍒嗘暟 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' + +--DENSE_RANK() + select StuName 濮撳悕,dense_rank() over(order by score desc) 鎺掑悕,score 鍒嗘暟 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' + +``` + + + + + +## 鍒嗛〉鏌ヨ + +#### 鍒嗛〉鏂规涓 + +**浣跨敤top鍒嗛〉** + +```sql +declare @PageSize int = 5 -- 姣忛〉5鏉 +declare @PageIndex int = 2 --绗2椤 +select top(@PageSize) * from Student +where Stuid not in (select top(@PageSize)*(@PageIndex-1)) StuId from Student +``` + + + +#### 鍒嗛〉鏂规浜 + +**浣跨敤row_number鍒嗛〉** + +```sql +declare @PageSize int = 5 +declare @PageIndex int = 3 +select * from +(select ROW_NUMBER() over(order by StuId) RowId,*from Student) as Temp +where RowId between (@PageIndex-1)*@PageSize+1 and @PageIndex*PageSize +``` + + + + + + + +## 浣滀笟 + +#### 瀛愭煡璇㈢粌涔 + +1. 鍏崇窘鐨勯摱琛屽崱鍙蜂负"6225547858741263"锛屾煡璇㈠嚭浣欓姣斿叧缇藉鐨勯摱琛屽崱淇℃伅锛屾樉绀哄崱鍙凤紝韬唤璇侊紝濮撳悕锛屼綑棰濄 +2. 浠庢墍鏈夎处鎴蜂俊鎭腑鏌ヨ鍑轰綑棰濇渶楂樼殑浜ゆ槗鏄庣粏(瀛橀挶鍙栭挶淇℃伅)銆 + +1. 鏌ヨ鏈夊彇娆捐褰曠殑閾惰鍗″強璐︽埛淇℃伅锛屾樉绀哄崱鍙凤紝韬唤璇侊紝濮撳悕锛屼綑棰濄 +2. 鏌ヨ鍑烘病鏈夊瓨娆捐褰曠殑閾惰鍗″強璐︽埛淇℃伅锛屾樉绀哄崱鍙凤紝韬唤璇侊紝濮撳悕锛屼綑棰濄 +3. 鍏崇窘鐨勯摱琛屽崱鍙蜂负"6225547858741263",鏌ヨ褰撳ぉ鏄惁鏈夋敹鍒拌浆璐︺ +4. 鏌ヨ鍑轰氦鏄撴鏁帮紙瀛樻鍙栨鎿嶄綔锛夋渶澶氱殑閾惰鍗¤处鎴蜂俊鎭紝鏄剧ず锛氬崱鍙凤紝韬唤璇侊紝濮撳悕锛屼綑棰濓紝浜ゆ槗娆℃暟銆 + +1. 鏌ヨ鍑烘病鏈夎浆璐︿氦鏄撹褰曠殑閾惰鍗¤处鎴蜂俊鎭紝鏄剧ず鍗″彿锛岃韩浠借瘉锛屽鍚嶏紝浣欓銆 + + + +#### 鍒嗛〉鏌ヨ缁冧範 + +```sql +--鏁版嵁缁撴瀯鍜屾暟鎹涓嬶細 +create table Student +( + StuId int primary key identity(1,2), --鑷姩缂栧彿 + StuName varchar(20), + StuSex varchar(4) +) +insert into Student(StuName,StuSex) values('鍒樺','鐢') +insert into Student(StuName,StuSex) values('鍏崇窘','鐢') +insert into Student(StuName,StuSex) values('寮犻','鐢') +insert into Student(StuName,StuSex) values('璧典簯','鐢') +insert into Student(StuName,StuSex) values('椹秴','鐢') +insert into Student(StuName,StuSex) values('榛勫繝','鐢') +insert into Student(StuName,StuSex) values('榄忓欢','鐢') +insert into Student(StuName,StuSex) values('绠闆','鐢') +insert into Student(StuName,StuSex) values('璇歌憶浜','鐢') +insert into Student(StuName,StuSex) values('寰愬憾','鐢') +insert into Student(StuName,StuSex) values('鍛ㄤ粨','鐢') +insert into Student(StuName,StuSex) values('鍏冲钩','鐢') +insert into Student(StuName,StuSex) values('寮犺嫗','鐢') +insert into Student(StuName,StuSex) values('鏇规搷','鐢') +insert into Student(StuName,StuSex) values('鏇逛粊','鐢') +insert into Student(StuName,StuSex) values('鏇逛笗','鐢') +insert into Student(StuName,StuSex) values('鏇规','鐢') +insert into Student(StuName,StuSex) values('鏇瑰桨','鐢') +insert into Student(StuName,StuSex) values('鍏搁煢','鐢') +insert into Student(StuName,StuSex) values('璁歌','鐢') +insert into Student(StuName,StuSex) values('澶忎警鏁','鐢') +insert into Student(StuName,StuSex) values('閮槈','鐢') +insert into Student(StuName,StuSex) values('鑽褰','鐢') +insert into Student(StuName,StuSex) values('璐捐','鐢') +insert into Student(StuName,StuSex) values('瀛欐潈','鐢') +insert into Student(StuName,StuSex) values('瀛欏潥','鐢') +insert into Student(StuName,StuSex) values('瀛欑瓥','鐢') +insert into Student(StuName,StuSex) values('澶彶鎱','鐢') +insert into Student(StuName,StuSex) values('澶т箶','濂') +insert into Student(StuName,StuSex) values('灏忎箶','濂') +``` + +**鏂瑰紡涓锛氫娇鐢╮ow_number** + +**鏂瑰紡浜岋細浣跨敤top鍒嗛〉** + diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260.md" new file mode 100644 index 0000000..5f85da4 --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260.md" @@ -0,0 +1,22 @@ +--鏌ヨ鐢风敓鍜屽コ鐢熶腑骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 --闈炲叧鑱斿瓙鏌ヨ + +``` +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 +``` \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-23\345\261\200\351\203\250\345\217\230\351\207\217\347\254\224\350\256\260.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-23\345\261\200\351\203\250\345\217\230\351\207\217\347\254\224\350\256\260.md" new file mode 100644 index 0000000..1507883 --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-09-23\345\261\200\351\203\250\345\217\230\351\207\217\347\254\224\350\256\260.md" @@ -0,0 +1,69 @@ +#### 灞閮ㄥ彉閲 + +灞閮ㄥ彉閲忓繀椤讳互鏍囪@浣滀负鍓嶇紑 锛屽@age +灞閮ㄥ彉閲忕殑浣跨敤鏄厛澹版槑锛屽啀璧嬪 +灞閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫眬閮ㄨ寖鍥村唴鏈夋晥 + +澹版槑涓涓眬閮ㄥ彉閲忥細**declare @鍙橀噺鍚 鏁版嵁绫诲瀷** + +```sql +--渚嬶細 + declare @id int --澹版槑涓涓悕涓篿d鐨勬暣鍨嬪彉閲 + declare @name varchar(50) --澹版槑涓涓彲鍙橀暱搴︿负50鐨勫瓨鏀惧鍚嶇殑瀛楃涓插彉閲 + +``` + +璧嬪硷細 + +- set @鍙橀噺鍚 = 鍊 + +- select @鍙橀噺鍚 = 鍊 + +```sql +--渚: + select @id = 1001 + set @name = '鍛ㄩ' +``` + +set涓巗elect璧嬪肩殑鍖哄埆锛 + +set璧嬪肩粰鍙橀噺鎸囧畾鐨勫硷紝select涓鑸敤浜庤〃涓煡璇㈠嚭鐨勬暟鎹祴鍊肩粰鍙橀噺锛屽鏋滄煡璇㈢粨鏋滄湁澶氭潯锛屽彇鏈鍚庝竴鏉¤祴鍊肩粰鍙橀噺 + +## 杈撳嚭璇彞 + +1. print鍙橀噺鎴栬〃杈惧紡 +2. select鍙橀噺鎴栬〃杈惧紡 + +```sql +--渚: + print '鏁版嵁搴撴湇鍔″櫒鍚:' + @@servicename + select 15*8 +``` + +## 閫昏緫鎺у埗璇彞 + +```sql +-- if() else +if() +begin + ... +end +else + ... +end + +-- switch case +case +when 鏉′欢 then 缁撴灉 +else 鍏朵粬缁撴灉 +end +``` + +## 寰幆鎺у埗璇彞 + +```sql +while() +begin + ... +end +``` \ No newline at end of file -- Gitee