SQL練習題-50道SQL練習題及答案與詳細分析

網上流傳較廣的50道SQL訓練,奮鬥了不知道多久終於寫完了。前18道題的難度依次遞增,從19題開始的後半部分算是循環練習和額外function的附加練習,難度恢復到普通狀態。
第9題很是難,我反正沒有寫出來,若是有寫出來了的朋友還請賜教。
這50道里面自認爲應該沒有太多錯誤,並且儘量使用了最簡單或是最直接的查詢,有多種不相上下解法的題目我也都列出了,但也歡迎一塊兒學習的朋友進行討論和解法優化啊~javascript


數據表介紹php

--1.學生表
Student(SId,Sname,Sage,Ssex)
--SId 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別css

--2.課程表
Course(CId,Cname,TId)
--CId 課程編號,Cname 課程名稱,TId 教師編號java

--3.教師表
Teacher(TId,Tname)
--TId 教師編號,Tname 教師姓名python

--4.成績表
SC(SId,CId,score)
--SId 學生編號,CId 課程編號,score 分數mysql

學生表 Student

create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values('01' , '趙雷' , '1990-01-01' , '男'); insert into Student values('02' , '錢電' , '1990-12-21' , '男'); insert into Student values('03' , '孫風' , '1990-12-20' , '男'); insert into Student values('04' , '李雲' , '1990-12-06' , '男'); insert into Student values('05' , '周梅' , '1991-12-01' , '女'); insert into Student values('06' , '吳蘭' , '1992-01-01' , '女'); insert into Student values('07' , '鄭竹' , '1989-01-01' , '女'); insert into Student values('09' , '張三' , '2017-12-20' , '女'); insert into Student values('10' , '李四' , '2017-12-25' , '女'); insert into Student values('11' , '李四' , '2012-06-06' , '女'); insert into Student values('12' , '趙六' , '2013-06-13' , '女'); insert into Student values('13' , '孫七' , '2014-06-01' , '女'); 

科目表 Course

create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10)); insert into Course values('01' , '語文' , '02'); insert into Course values('02' , '數學' , '01'); insert into Course values('03' , '英語' , '03'); 

教師表 Teacher

create table Teacher(TId varchar(10),Tname varchar(10)); insert into Teacher values('01' , '張三'); insert into Teacher values('02' , '李四'); insert into Teacher values('03' , '王五'); 

成績表 SC

create table SC(SId varchar(10),CId varchar(10),score decimal(18,1)); insert into SC values('01' , '01' , 80); insert into SC values('01' , '02' , 90); insert into SC values('01' , '03' , 99); insert into SC values('02' , '01' , 70); insert into SC values('02' , '02' , 60); insert into SC values('02' , '03' , 80); insert into SC values('03' , '01' , 80); insert into SC values('03' , '02' , 80); insert into SC values('03' , '03' , 80); insert into SC values('04' , '01' , 50); insert into SC values('04' , '02' , 30); insert into SC values('04' , '03' , 20); insert into SC values('05' , '01' , 76); insert into SC values('05' , '02' , 87); insert into SC values('06' , '01' , 31); insert into SC values('06' , '03' , 34); insert into SC values('07' , '02' , 89); insert into SC values('07' , '03' , 98); 

練習題目

  1. 查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數

1.1 查詢同時存在" 01 "課程和" 02 "課程的狀況sql

1.2 查詢存在" 01 "課程但可能不存在" 02 "課程的狀況(不存在時顯示爲 null )ruby

1.3 查詢不存在" 01 "課程但存在" 02 "課程的狀況bash

  1. 查詢平均成績大於等於 60 分的同窗的學生編號和學生姓名和平均成績學習

  2. 查詢在 SC 表存在成績的學生信息

  3. 查詢全部同窗的學生編號、學生姓名、選課總數、全部課程的總成績(沒成績的顯示爲 null )

4.1 查有成績的學生信息

  1. 查詢「李」姓老師的數量

  2. 查詢學過「張三」老師授課的同窗的信息

  3. 查詢沒有學全全部課程的同窗的信息

  4. 查詢至少有一門課與學號爲" 01 "的同窗所學相同的同窗的信息

  5. 查詢和" 01 "號的同窗學習的課程 徹底相同的其餘同窗的信息

  6. 查詢沒學過"張三"老師講授的任一門課程的學生姓名

  7. 查詢兩門及其以上不及格課程的同窗的學號,姓名及其平均成績

  8. 檢索" 01 "課程分數小於 60,按分數降序排列的學生信息

  9. 按平均成績從高到低顯示全部學生的全部課程的成績以及平均成績

  10. 查詢各科成績最高分、最低分和平均分:

以以下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率

及格爲>=60,中等爲:70-80,優良爲:80-90,優秀爲:>=90

要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列

  1. 按各科成績進行排序,並顯示排名, Score 重複時保留名次空缺

15.1 按各科成績進行排序,並顯示排名, Score 重複時合併名次

  1. 查詢學生的總成績,並進行排名,總分重複時保留名次空缺

16.1 查詢學生的總成績,並進行排名,總分重複時不保留名次空缺

  1. 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所佔百分比

  2. 查詢各科成績前三名的記錄

  3. 查詢每門課程被選修的學生數

  4. 查詢出只選修兩門課程的學生學號和姓名

  5. 查詢男生、女生人數

  6. 查詢名字中含有「風」字的學生信息

  7. 查詢同名同性學生名單,並統計同名人數

  8. 查詢 1990 年出生的學生名單

  9. 查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列

  10. 查詢平均成績大於等於 85 的全部學生的學號、姓名和平均成績

  11. 查詢課程名稱爲「數學」,且分數低於 60 的學生姓名和分數

  12. 查詢全部學生的課程及分數狀況(存在學生沒成績,沒選課的狀況)

  13. 查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數

  14. 查詢不及格的課程

  15. 查詢課程編號爲 01 且課程成績在 80 分以上的學生的學號和姓名

  16. 求每門課程的學生人數

  17. 成績不重複,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績

  18. 成績有重複的狀況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績

  19. 查詢不一樣課程成績相同的學生的學生編號、課程編號、學生成績

  20. 查詢每門功成績最好的前兩名

  21. 統計每門課程的學生選修人數(超過 5 人的課程才統計)。

  22. 檢索至少選修兩門課程的學生學號

  23. 查詢選修了所有課程的學生信息

  24. 查詢各學生的年齡,只按年份來算

  25. 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一

  26. 查詢本週過生日的學生

  27. 查詢下週過生日的學生

  28. 查詢本月過生日的學生

  29. 查詢下月過生日的學生

答案


1.查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數
由於須要所有的學生信息,則須要在sc表中獲得符合條件的SId後與student表進行join,能夠left join 也能夠 right join

select * from Student RIGHT JOIN ( select t1.SId, class1, class2 from (select SId, score as class1 from sc where sc.CId = '01')as t1, (select SId, score as class2 from sc where sc.CId = '02')as t2 where t1.SId = t2.SId AND t1.class1 > t2.class2 )r on Student.SId = r.SId; 
select * from  (
    select t1.SId, class1, class2 
    from
        (SELECT SId, score as class1 FROM sc WHERE sc.CId = '01') AS t1, (SELECT SId, score as class2 FROM sc WHERE sc.CId = '02') AS t2 where t1.SId = t2.SId and t1.class1 > t2.class2 ) r LEFT JOIN Student ON Student.SId = r.SId; 

1.1 查詢同時存在" 01 "課程和" 02 "課程的狀況

select * from (select * from sc where sc.CId = '01') as t1, (select * from sc where sc.CId = '02') as t2 where t1.SId = t2.SId; 

1.2 查詢存在" 01 "課程但可能不存在" 02 "課程的狀況(不存在時顯示爲 null )
這一道就是明顯須要使用join的狀況了,02可能不存在,即爲left join的右側或right join 的左側便可.

select * from (select * from sc where sc.CId = '01') as t1 left join (select * from sc where sc.CId = '02') as t2 on t1.SId = t2.SId; 
select * from (select * from sc where sc.CId = '02') as t2 right join (select * from sc where sc.CId = '01') as t1 on t1.SId = t2.SId; 

1.3 查詢不存在" 01 "課程但存在" 02 "課程的狀況

select * from sc where sc.SId not in ( select SId from sc where sc.CId = '01' ) AND sc.CId= '02'; 
  1. 查詢平均成績大於等於 60 分的同窗的學生編號和學生姓名和平均成績
    這裏只用根據學生ID把成績分組,對分組中的score求平均值,最後在選取結果中AVG大於60的便可. 注意,這裏必需要給計算獲得的AVG結果一個alias.(AS ss)
    獲得學生信息的時候既能夠用join也能夠用通常的聯合搜索
select student.SId,sname,ss from student,( select SId, AVG(score) as ss from sc GROUP BY SId HAVING AVG(score)> 60 )r where student.sid = r.sid; 
select Student.SId, Student.Sname, r.ss from Student right join( select SId, AVG(score) AS ss from sc GROUP BY SId HAVING AVG(score)> 60 )r on Student.SId = r.SId; 
select s.SId,ss,Sname from( select SId, AVG(score) as ss from sc GROUP BY SId HAVING AVG(score)> 60 )r left join (select Student.SId, Student.Sname from Student)s on s.SId = r.SId; 
  1. 查詢在 SC 表存在成績的學生信息
select DISTINCT student.*
from student,sc
where student.SId=sc.SId 

4.查詢全部同窗的學生編號、學生姓名、選課總數、全部課程的成績總和
聯合查詢不會顯示沒選課的學生:

select student.sid, student.sname,r.coursenumber,r.scoresum
from student, (select sc.sid, sum(sc.score) as scoresum, count(sc.cid) as coursenumber from sc group by sc.sid)r where student.sid = r.sid; 

如要顯示沒選課的學生(顯示爲NULL),須要使用join:

select s.sid, s.sname,r.coursenumber,r.scoresum
from ( (select student.sid,student.sname from student )s left join (select sc.sid, sum(sc.score) as scoresum, count(sc.cid) as coursenumber from sc group by sc.sid )r on s.sid = r.sid ); 

4.1 查有成績的學生信息
這一題涉及到in和exists的用法,在這種小表中,兩種方法的效率都差很少,可是請參考SQL查詢中in和exists的區別分析
當表2的記錄數量很是大的時候,選用exists比in要高效不少.
EXISTS用於檢查子查詢是否至少會返回一行數據,該子查詢實際上並不返回任何數據,而是返回值True或False.
結論:IN()適合B表比A表數據小的狀況
結論:EXISTS()適合B表比A表數據大的狀況

select * from student 
where exists (select sc.sid from sc where student.sid = sc.sid); 
select * from student where student.sid in (select sc.sid from sc); 
  1. 查詢「李」姓老師的數量
select count(*)
from teacher
where tname like '李%'; 
  1. 查詢學過「張三」老師授課的同窗的信息
    多表聯合查詢
select student.* from student,teacher,course,sc where student.sid = sc.sid and course.cid=sc.cid and course.tid = teacher.tid and tname = '張三'; 
  1. 查詢沒有學全全部課程的同窗的信息
    由於有學生什麼課都沒有選,反向思考,先查詢選了全部課的學生,再選擇這些人以外的學生.
select * from student where student.sid not in ( select sc.sid from sc group by sc.sid having count(sc.cid)= (select count(cid) from course) ); 
  1. 查詢至少有一門課與學號爲" 01 "的同窗所學相同的同窗的信息
    這個用聯合查詢也能夠,可是邏輯不清楚,我以爲較爲清楚的邏輯是這樣的:從sc表查詢01同窗的全部選課cid--從sc表查詢全部同窗的sid若是其cid在前面的結果中--從student表查詢全部學生信息若是sid在前面的結果中
select * from student 
where student.sid in ( select sc.sid from sc where sc.cid in( select sc.cid from sc where sc.sid = '01' ) ); 

9.查詢和" 01 "號的同窗學習的課程徹底相同的其餘同窗的信息
不會作。

 
 

10.查詢沒學過"張三"老師講授的任一門課程的學生姓名
仍然仍是嵌套,三層嵌套, 或者多表聯合查詢

select * from student where student.sid not in( select sc.sid from sc where sc.cid in( select course.cid from course where course.tid in( select teacher.tid from teacher where tname = "張三" ) ) ); 
select * from student where student.sid not in( select sc.sid from sc,course,teacher where sc.cid = course.cid and course.tid = teacher.tid and teacher.tname= "張三" ); 

11.查詢兩門及其以上不及格課程的同窗的學號,姓名及其平均成績
從SC表中選取score小於60的,並group by sid,having count 大於1

select student.sid, student.sname, AVG(sc.score) from student,sc where student.sid = sc.sid and sc.score<60 group by sc.sid having count(*)>1; 
  1. 檢索" 01 "課程分數小於 60,按分數降序排列的學生信息
    雙表聯合查詢,在查詢最後能夠設置排序方式,語法爲ORDER BY ***** DESC\ASC;
select student.*, sc.score from student, sc where student.sid = sc.sid and sc.score < 60 and cid = "01" ORDER BY sc.score DESC; 
  1. 按平均成績從高到低顯示全部學生的全部課程的成績以及平均成績
select *  from sc left join ( select sid,avg(score) as avscore from sc group by sid )r on sc.sid = r.sid order by avscore desc; 
  1. 查詢各科成績最高分、最低分和平均分:

以以下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率

及格爲>=60,中等爲:70-80,優良爲:80-90,優秀爲:>=90

要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列

select 
sc.CId ,
max(sc.score)as 最高分,
min(sc.score)as 最低分,
AVG(sc.score)as 平均分,
count(*)as 選修人數,
sum(case when sc.score>=60 then 1 else 0 end )/count(*)as 及格率, sum(case when sc.score>=70 and sc.score<80 then 1 else 0 end )/count(*)as 中等率, sum(case when sc.score>=80 and sc.score<90 then 1 else 0 end )/count(*)as 優良率, sum(case when sc.score>=90 then 1 else 0 end )/count(*)as 優秀率 from sc GROUP BY sc.CId ORDER BY count(*)DESC, sc.CId ASC 
  1. 按各科成績進行排序,並顯示排名, Score 重複時保留名次空缺
    這一道題有點tricky,能夠用變量,但也有更爲簡單的方法,即自交(左交)
    用sc中的score和本身進行對比,來計算「比當前分數高的分數有幾個」。
select a.cid, a.sid, a.score, count(b.score)+1 as rank from sc as a left join sc as b on a.score<b.score and a.cid = b.cid group by a.cid, a.sid,a.score order by a.cid, rank ASC; 
  1. 查詢學生的總成績,並進行排名,總分重複時不保留名次空缺
    這裏主要學習一下使用變量。在SQL裏面變量用@來標識。
set @crank=0; select q.sid, total, @crank := @crank +1 as rank from( select sc.sid, sum(sc.score) as total from sc group by sc.sid order by total desc)q; 
  1. 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所佔百分比
    有時候以爲本身真是死腦筋。group by之後的查詢結果沒法使用別名,因此不要想着先單表group by計算出結果再從第二張表裏添上課程信息,而應該先將兩張表join在一塊兒獲得全部想要的屬性再對這張總表進行統計計算。這裏就不算百分比了,道理相同。
    注意一下,用case when 返回1 之後的統計不是用count而是sum
select course.cname, course.cid,
sum(case when sc.score<=100 and sc.score>85 then 1 else 0 end) as "[100-85]", sum(case when sc.score<=85 and sc.score>70 then 1 else 0 end) as "[85-70]", sum(case when sc.score<=70 and sc.score>60 then 1 else 0 end) as "[70-60]", sum(case when sc.score<=60 and sc.score>0 then 1 else 0 end) as "[60-0]" from sc left join course on sc.cid = course.cid group by sc.cid; 
  1. 查詢各科成績前三名的記錄
    大坑比。mysql不能group by 了之後取limit,因此不要想着討巧了,我快被這一題氣死了。思路有兩種,第一種比較暴力,計算比本身分數大的記錄有幾條,若是小於3 就select,由於對前三名來講不會有3個及以上的分數比本身大了,最後再對全部select到的結果按照分數和課程編號排名便可。
select * from sc where ( select count(*) from sc as a where sc.cid = a.cid and sc.score<a.score )< 3 order by cid asc, sc.score desc; 

第二種比較靈巧一些,用自身左交,可是有點難以理解。
先用本身交本身,條件爲a.cid = b.cid and a.score<b.score,其實就是列出同一門課內全部分數比較的狀況。
想要查看完整的表能夠

select * from sc a left join sc b on a.cid = b.cid and a.score<b.score order by a.cid,a.score; 
 
結果

查看,發現結果是47行的一個表,列出了相似 01號課裏「30分小於50,也小於70,也小於80,也小於90」「50分小於70,小於80,小於90」.....
因此理論上,對任何一門課來講,分數最高的那三個記錄,在這張大表裏,經過a.sid和a.cid能夠聯合肯定這個同窗的這門課的這個分數究竟比多少個其餘記錄高/低,
若是這個特定的a.sid和a.cid組合出如今這張表裏的次數少於3個,那就意味着這個組合(學號+課號+分數)是這門課裏排名前三的。
因此下面這個計算中having count 部分其實count()或者任意其餘列均可以,這裏制定了一個列只是由於比count()運行速度上更快。

select a.sid,a.cid,a.score from sc a left join sc b on a.cid = b.cid and a.score<b.score group by a.cid, a.sid having count(b.cid)<3 order by a.cid; 
  1. 查詢每門課程被選修的學生數
select cid, count(sid) from sc group by cid; 
  1. 查詢出只選修兩門課程的學生學號和姓名
    嵌套查詢
select student.sid, student.sname from student where student.sid in (select sc.sid from sc group by sc.sid having count(sc.cid)=2 ); 

聯合查詢

select student.SId,student.Sname
from sc,student
where student.SId=sc.SId GROUP BY sc.SId HAVING count(*)=2; 

21.查詢男生、女生人數

select ssex, count(*) from student group by ssex; 
  1. 查詢名字中含有「風」字的學生信息
select *
from student 
where student.Sname like '%風%' 

23.查詢同名學生名單,並統計同名人數
找到同名的名字並統計個數

select sname, count(*) from student group by sname having count(*)>1; 

嵌套查詢列出同名的所有學生的信息

select * from student where sname in ( select sname from student group by sname having count(*)>1 ); 

24.查詢 1990 年出生的學生名單

select *
from student
where YEAR(student.Sage)=1990; 

25.查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列

select sc.cid, course.cname, AVG(SC.SCORE) as average from sc, course where sc.cid = course.cid group by sc.cid order by average desc,cid asc; 

26.查詢平均成績大於等於 85 的全部學生的學號、姓名和平均成績
having也能夠用來截取結果表,在這裏就先獲得平均成績總表,再截取AVG大於85的便可.

select student.sid, student.sname, AVG(sc.score) as aver from student, sc where student.sid = sc.sid group by sc.sid having aver > 85; 
  1. 查詢課程名稱爲「數學」,且分數低於 60 的學生姓名和分數
select student.sname, sc.score from student, sc, course where student.sid = sc.sid and course.cid = sc.cid and course.cname = "數學" and sc.score < 60; 
  1. 查詢全部學生的課程及分數狀況(存在學生沒成績,沒選課的狀況)
select student.sname, cid, score from student left join sc on student.sid = sc.sid; 
  1. 查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數
select student.sname, course.cname,sc.score from student,course,sc where sc.score>70 and student.sid = sc.sid and sc.cid = course.cid; 

30.查詢存在不及格的課程
能夠用group by 來取惟一,也能夠用distinct

select cid from sc
where score< 60 group by cid; 
select DISTINCT sc.CId from sc where sc.score <60; 

31.查詢課程編號爲 01 且課程成績在 80 分及以上的學生的學號和姓名

select student.sid,student.sname 
from student,sc where cid="01" and score>=80 and student.sid = sc.sid; 
  1. 求每門課程的學生人數
select sc.CId,count(*) as 學生人數 from sc GROUP BY sc.CId; 
  1. 成績不重複,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
    用having max()理論上也是對的,可是下面那種按分數排序而後取limit 1的更直觀可靠
select student.*, sc.score, sc.cid from student, teacher, course,sc where teacher.tid = course.tid and sc.sid = student.sid and sc.cid = course.cid and teacher.tname = "張三" having max(sc.score); 
select student.*, sc.score, sc.cid from student, teacher, course,sc where teacher.tid = course.tid and sc.sid = student.sid and sc.cid = course.cid and teacher.tname = "張三" order by score desc limit 1; 
  1. 成績有重複的狀況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
    爲了驗證這一題,先修改原始數據
UPDATE sc SET score=90
where sid = "07" and cid ="02"; 

這樣張三老師教的02號課就有兩個學生同時得到90的最高分了。
這道題的思路繼續上一題,咱們已經查詢到了符合限定條件的最高分了,這個時候只用比較這張表,找到所有score等於這個最高分的記錄就可,看起來有點繁複。

select student.*, sc.score, sc.cid from student, teacher, course,sc where teacher.tid = course.tid and sc.sid = student.sid and sc.cid = course.cid and teacher.tname = "張三" and sc.score = ( select Max(sc.score) from sc,student, teacher, course where teacher.tid = course.tid and sc.sid = student.sid and sc.cid = course.cid and teacher.tname = "張三" ); 
  1. 查詢不一樣課程成績相同的學生的學生編號、課程編號、學生成績
    同上,在這裏用了inner join後會有概念是重複的記錄:「01 課與 03課」=「03 課與 01 課」,因此這裏取惟一能夠直接用group by
select  a.cid, a.sid,  a.score from sc as a inner join sc as b on a.sid = b.sid and a.cid != b.cid and a.score = b.score group by cid, sid; 

36.查詢每門功成績最好的前兩名
同上19題

select a.sid,a.cid,a.score from sc as a left join sc as b on a.cid = b.cid and a.score<b.score group by a.cid, a.sid having count(b.cid)<2 order by a.cid; 

37.統計每門課程的學生選修人數(超過 5 人的課程才統計)

select sc.cid, count(sid) as cc from sc group by cid having cc >5; 

38.檢索至少選修兩門課程的學生學號

select sid, count(cid) as cc from sc group by sid having cc>=2; 
  1. 查詢選修了所有課程的學生信息
select student.*
from sc ,student where sc.SId=student.SId GROUP BY sc.SId HAVING count(*) = (select DISTINCT count(*) from course ) 

40.查詢各學生的年齡,只按年份來算
不想作,通常都用41題的方法精確到天

 
 
  1. 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
select student.SId as 學生編號,student.Sname as 學生姓名, TIMESTAMPDIFF(YEAR,student.Sage,CURDATE()) as 學生年齡 from student 

42.查詢本週過生日的學生

select *
from student 
where WEEKOFYEAR(student.Sage)=WEEKOFYEAR(CURDATE()); 
  1. 查詢下週過生日的學生
select *
from student 
where WEEKOFYEAR(student.Sage)=WEEKOFYEAR(CURDATE())+1; 

44.查詢本月過生日的學生

select *
from student 
where MONTH(student.Sage)=MONTH(CURDATE()); 

45.查詢下月過生日的學生

select *
from student 
where MONTH(student.Sage)=MONTH(CURDATE())+1;

做者:LSD_Monkey連接:https://www.jianshu.com/p/476b52ee4f1b來源:簡書簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索