圖解SQL面試題:經典50題

2020-08-14 21:08:17

@已知有如下4張表:

學生表:student(學號,學生姓名,出生年月,性別)

成績表:score(學號,課程號,成績)

課程表:course(課程號,課程名稱,教師號)

教師表:teacher(教師號,教師姓名)

根據以上資訊按照下面 下麪要求寫出對應的SQL語句。

ps:這些題考察SQL的編寫能力,對於這型別的題目,需要你先把4張表之間的關聯關係搞清楚了,最好的辦法是自己在草稿紙上畫出關聯圖,然後再編寫對應的SQL語句就比較容易了。下圖是我畫的這4張表的關係圖,可以看出它們之間是通過哪些外來鍵關聯起來的:

一、建立數據庫和表

爲了演示題目的執行過程,我們先按下面 下麪語句在用戶端navicat中建立數據庫和表。

(如何你還不懂什麼是數據庫,什麼是用戶端navicat,可以先學習這個:

從零學會SQL:入門)

1.建立表

1)建立學生表(student)

按下圖在用戶端navicat裡建立學生表

學生表的「學號」列設定爲主鍵約束,下圖是每一列設定的數據型別和約束

建立完表,點選「儲存」

2)建立成績表(score)

同樣的步驟,建立"成績表「。「課程表的「學號」和「課程號」一起設定爲主鍵約束(聯合主鍵),「成績」這一列設定爲數值型別(float,浮點數值)

3)建立課程表(course)

課程表的「課程號」設定爲主鍵約束

4)教師表(teacher)

教師表的「教師號」列設定爲主鍵約束,

教師姓名這一列設定約束爲「null」(紅框的地方不勾選),表示這一列允許包含空值(null)

2.向表中新增數據

1)向學生表裏新增數據

新增數據的sql

insert into student(學號,姓名,出生日期,性別)
values(‘0001’ , ‘猴子’ , ‘1989-01-01’ , ‘男’);

insert into student(學號,姓名,出生日期,性別)
values(‘0002’ , ‘猴子’ , ‘1990-12-21’ , ‘女’);

insert into student(學號,姓名,出生日期,性別)
values(‘0003’ , ‘馬雲’ , ‘1991-12-21’ , ‘男’);

insert into student(學號,姓名,出生日期,性別)
values(‘0004’ , ‘王思聰’ , ‘1990-05-20’ , ‘男’);
在用戶端navicat裡的操作

2)成績表(score)

新增數據的sql

insert into score(學號,課程號,成績)
values(‘0001’ , ‘0001’ , 80);

insert into score(學號,課程號,成績)
values(‘0001’ , ‘0002’ , 90);

insert into score(學號,課程號,成績)
values(‘0001’ , ‘0003’ , 99);

insert into score(學號,課程號,成績)
values(‘0002’ , ‘0002’ , 60);

insert into score(學號,課程號,成績)
values(‘0002’ , ‘0003’ , 80);

insert into score(學號,課程號,成績)
values(‘0003’ , ‘0001’ , 80);

insert into score(學號,課程號,成績)
values(‘0003’ , ‘0002’ , 80);

insert into score(學號,課程號,成績)
values(‘0003’ , ‘0003’ , 80);
用戶端navicat裡的操作

3)課程表

新增數據的sql

insert into course(課程號,課程名稱,教師號)
values(‘0001’ , ‘語文’ , ‘0002’);

insert into course(課程號,課程名稱,教師號)
values(‘0002’ , ‘數學’ , ‘0001’);

insert into course(課程號,課程名稱,教師號)
values(‘0003’ , ‘英語’ , ‘0003’);
用戶端navicat裡的操作

4)教師表裡新增數據

新增數據的sql

– 教師表:新增數據
insert into teacher(教師號,教師姓名)
values(‘0001’ , ‘孟扎扎’);

insert into teacher(教師號,教師姓名)
values(‘0002’ , ‘馬化騰’);

– 這裏的教師姓名是空值(null)
insert into teacher(教師號,教師姓名)
values(‘0003’ , null);

– 這裏的教師姓名是空字串(’’)
insert into teacher(教師號,教師姓名)
values(‘0004’ , ‘’);
用戶端navicat裡操作

新增結果

三、50道面試題

爲了方便學習,我將50道面試題進行了分類

1.簡單查詢

查詢姓「猴」的學生名單

查詢姓「孟」老師的個數

select count(教姓名)
from teacher
where 教師姓名 like ‘孟%’;
如果上面題目不會做,可以複習這部分涉及到的sql知識:

從零學會SQL:簡單查詢

www.zhihu.com
圖示
2.彙總分析

面試題:查詢課程編號爲「0002」的總成績

分析思路
select 查詢結果 [總成績:彙總函數sum]
from 從哪張表中查詢數據[成績表score]
where 查詢條件 [課程號是0002]
*/
select sum(成績)
from score
where 課程號 = ‘0002’;
查詢選了課程的學生人數

/*
這個題目翻譯成大白話就是:查詢有多少人選了課程
select 學號,成績表裏學號有重複值需要去掉
from 從課程表查詢score;
*/
select count(distinct 學號) as 學生人數
from score;

查詢各科成績最高和最低的分, 以如下的形式顯示:課程號,最高分,最低分

/*
分析思路
select 查詢結果 [課程ID:是課程號的別名,最高分:max(成績) ,最低分:min(成績)]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [沒有]
group by 分組 [各科成績:也就是每門課程的成績,需要按課程號分組];
*/
select 課程號,max(成績) as 最高分,min(成績) as 最低分
from score
group by 課程號;
查詢每門課程被選修的學生數

/*
分析思路
select 查詢結果 [課程號,選修該課程的學生數:彙總函數count]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [沒有]
group by 分組 [每門課程:按課程號分組];
*/
select 課程號, count(學號)
from score
group by 課程號;
查詢男生、女生人數

/*
分析思路
select 查詢結果 [性別,對應性別的人數:彙總函數count]
from 從哪張表中查詢數據 [性別在學生表中,所以查詢的是學生表student]
where 查詢條件 [沒有]
group by 分組 [男生、女生人數:按性別分組]
having 對分組結果指定條件 [沒有]
order by 對查詢結果排序[沒有];
/
select 性別,count(
)
from student
group by 性別;

查詢平均成績大於60分學生的學號和平均成績

/*
題目翻譯成大白話:
平均成績:展開來說就是計算每個學生的平均成績
這裏涉及到「每個」就是要分組了
平均成績大於60分,就是對分組結果指定條件

分析思路
select 查詢結果 [學號,平均成績:彙總函數avg(成績)]
from 從哪張表中查詢數據 [成績在成績表中,所以查詢的是成績表score]
where 查詢條件 [沒有]
group by 分組 [平均成績:先按學號分組,再計算平均成績]
having 對分組結果指定條件 [平均成績大於60分]
*/
select 學號, avg(成績)
from score
group by 學號
having avg(成績)>60;
查詢至少選修兩門課程的學生學號

/*
翻譯成大白話:
第1步,需要先計算出每個學生選修的課程數據,需要按學號分組
第2步,至少選修兩門課程:也就是每個學生選修課程數目>=2,對分組結果指定條件

分析思路
select 查詢結果 [學號,每個學生選修課程數目:彙總函數count]
from 從哪張表中查詢數據 [課程的學生學號:課程表score]
where 查詢條件 [至少選修兩門課程:需要先計算出每個學生選修了多少門課,需要用分組,所以這裏沒有where子句]
group by 分組 [每個學生選修課程數目:按課程號分組,然後用匯總函數count計算出選修了多少門課]
having 對分組結果指定條件 [至少選修兩門課程:每個學生選修課程數目>=2]
*/
select 學號, count(課程號) as 選修課程數目
from score
group by 學號
having count(課程號)>=2;
查詢同名同姓學生名單並統計同名人數

/*
翻譯成大白話,問題解析:
1)查詢出姓名相同的學生有誰,每個姓名相同學生的人數
查詢結果:姓名,人數
條件:怎麼算姓名相同?按姓名分組後人數大於等於2,因爲同名的人數大於等於2
分析思路
select 查詢結果 [姓名,人數:彙總函數count()]
from 從哪張表中查詢數據 [學生表student]
where 查詢條件 [沒有]
group by 分組 [姓名相同:按姓名分組]
having 對分組結果指定條件 [姓名相同:count(
)>=2]
order by 對查詢結果排序[沒有];
*/

select 姓名,count() as 人數
from student
group by 姓名
having count(
)>=2;
查詢不及格的課程並按課程號從大到小排列

/*
分析思路
select 查詢結果 [課程號]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [不及格:成績 <60]
group by 分組 [沒有]
having 對分組結果指定條件 [沒有]
order by 對查詢結果排序[課程號從大到小排列:降序desc];
*/
select 課程號
from score
where 成績<60
order by 課程號 desc;
查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列

/*
分析思路
select 查詢結果 [課程號,平均成績:彙總函數avg(成績)]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [沒有]
group by 分組 [每門課程:按課程號分組]
having 對分組結果指定條件 [沒有]
order by 對查詢結果排序[按平均成績升序排序:asc,平均成績相同時,按課程號降序排列:desc];
*/
select 課程號, avg(成績) as 平均成績
from score
group by 課程號
order by 平均成績 asc,課程號 desc;
檢索課程編號爲「0004」且分數小於60的學生學號,結果按按分數降序排列

/*
分析思路
select 查詢結果 []
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [課程編號爲「04」且分數小於60]
group by 分組 [沒有]
having 對分組結果指定條件 []
order by 對查詢結果排序[查詢結果按按分數降序排列];
*/
select 學號
from score
where 課程號=‘04’ and 成績 <60
order by 成績 desc;
統計每門課程的學生選修人數(超過2人的課程才統計)

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

/*
分析思路
select 查詢結果 [要求輸出課程號和選修人數]
from 從哪張表中查詢數據 []
where 查詢條件 []
group by 分組 [每門課程:按課程號分組]
having 對分組結果指定條件 [學生選修人數(超過2人的課程才統計):每門課程學生人數>2]
order by 對查詢結果排序[查詢結果按人數降序排序,若人數相同,按課程號升序排序];
*/
select 課程號, count(學號) as ‘選修人數’
from score
group by 課程號
having count(學號)>2
order by count(學號) desc,課程號 asc;
查詢兩門以上不及格課程的同學的學號及其平均成績

/*
分析思路
先分解題目:
1)[兩門以上][不及格課程]限制條件
2)[同學的學號及其平均成績],也就是每個學生的平均成績,顯示學號,平均成績
分析過程:
第1步:得到每個學生的平均成績,顯示學號,平均成績
第2步:再加上限制條件:
1)不及格課程
2)兩門以上[不及格課程]:課程數目>2

/*
第1步:得到每個學生的平均成績,顯示學號,平均成績
select 查詢結果 [學號,平均成績:彙總函數avg(成績)]
from 從哪張表中查詢數據 [涉及到成績:成績表score]
where 查詢條件 [沒有]
group by 分組 [每個學生的平均:按學號分組]
having 對分組結果指定條件 [沒有]
order by 對查詢結果排序[沒有];
*/
select 學號, avg(成績) as 平均成績
from score
group by 學號;

/*
第2步:再加上限制條件:
1)不及格課程
2)兩門以上[不及格課程]
select 查詢結果 [學號,平均成績:彙總函數avg(成績)]
from 從哪張表中查詢數據 [涉及到成績:成績表score]
where 查詢條件 [限制條件:不及格課程,平均成績<60]
group by 分組 [每個學生的平均:按學號分組]
having 對分組結果指定條件 [限制條件:課程數目>2,彙總函數count(課程號)>2]
order by 對查詢結果排序[沒有];
*/
select 學號, avg(成績) as 平均成績
from score
where 成績 <60
group by 學號
having count(課程號)>2;

查詢學生的總成績並進行排名

【知識點】分組查詢
/*
分析思路
select 查詢結果 [總成績:sum(成績), 學號]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [沒有]
group by 分組 [學生的總成績:按照每個學生學號進行分組]
order by 排序 [按照總成績進行排序:sum(成績)];
/*
select 學號 ,sum(成績) from score
group by 學號
order by sum(成績);
查詢平均成績大於60分的學生的學號和平均成績

【知識點】分組+條件
/*
分析思路
select 查詢結果 [學號, 平均成績: avg(成績)]
from 從哪張表中查詢數據 [成績表score]
where 查詢條件 [沒有]
group by 分組 [學號]
having 分組條件 [平均成績大於60分:avg(成績 ) >60]
order by 排序 [沒有];
/*
select 學號 ,avg(成績) from score
group by 學號
having avg(成績 ) >60;
如果上面題目不會做,可以複習這部分涉及到的sql知識:

從零學會SQL:彙總分析

www.zhihu.com
圖示
3.複雜查詢

查詢所有課程成績小於60分學生的學號、姓名

【知識點】子查詢

1.翻譯成大白話
1)查詢結果:學生學號,姓名
2)查詢條件:所有課程成績 < 60 的學生,需要從成績表裏查詢,用到子查詢

第1步,寫子查詢(所有課程成績 < 60 的學生)
select 查詢結果[學號]
from 從哪張表中查詢數據[成績表:score]
where 查詢條件[成績 < 60]
group by 分組[沒有]
having 對分組結果指定條件[沒有]
order by 對查詢結果排序[沒有]
limit 從查詢結果中取出指定行[沒有];

select 學號
from student
where 成績 < 60;

第2步,查詢結果:學生學號,姓名,條件是前面1步查到的學號

select 查詢結果[學號,姓名]
from 從哪張表中查詢數據[學生表:student]
where 查詢條件[用到運算子in]
group by 分組[沒有]
having 對分組結果指定條件[沒有]
order by 對查詢結果排序[沒有]
limit 從查詢結果中取出指定行[沒有];
*/
select 學號,姓名
from student
where 學號 in (
select 學號
from student
where 成績 < 60
);
查詢沒有學全所有課的學生的學號、姓名|

/*
查詢出學號,條件:沒有學全所有課,也就是該學生選修的課程數 < 總的課程數
【考察知識點】in,子查詢
*/
select 學號,姓名
from student
where 學號 in(
select 學號
from score
group by 學號
having count(課程號) < (select count(課程號) from course)
);
查詢出只選修了兩門課程的全部學生的學號和姓名|

select 學號,姓名
from student
where 學號 in(
select 學號
from score
group by 學號
having count(課程號)=2
);
1990年出生的學生名單

/*
查詢1990年出生的學生名單
學生表中出生日期列的型別是datetime
*/
select 學號,姓名
from student
where year(出生日期)=1990;
查詢各科成績前兩名的記錄

這類問題其實就是常見的:分組取每組最大值、最小值,每組最大的N條(top N)記錄。我專門寫了一篇文章來回答這類問題:

sql面試題:topN問題

mp.weixin.qq.com
圖示

查詢各學生的年齡(精確到月份)

/*
【知識點】時間格式轉化​
*/
select 學號 ,timestampdiff(month ,出生日期 ,now())/12
from student ;
-查詢本月過生日的學生

select *
from student
where month (出生日期 ) = month(now())+2;​
如果上面題目不會做,可以複習這部分涉及到的sql知識:

從零學會SQL:複雜查詢

www.zhihu.com
圖示
4.多表查詢

查詢所有學生的學號、姓名、選課數、總成績

selecta.學號,a.姓名,count(b.課程號) as 選課數,sum(b.成績) as 總成績
from student as a left join score as b
on a.學號 = b.學號
group by a.學號;
查詢平均成績大於85的所有學生的學號、姓名和平均成績

select a.學號,a.姓名, avg(b.成績) as 平均成績
from student as a left join score as b
on a.學號 = b.學號
group by a.學號
having avg(b.成績)>85;
查詢學生的選課情況:學號,姓名,課程號,課程名稱

select a.學號, a.姓名, c.課程號,c.課程名稱
from student a inner join score b on a.學號=b.學號
inner join course c on b.課程號=c.課程號;
查詢出每門課程的及格人數和不及格人數

– 考察case表達式
select 課程號,
sum(case when 成績>=60 then 1
else 0
end) as 及格人數,
sum(case when 成績 < 60 then 1
else 0
end) as 不及格人數
from score
group by 課程號;
使用分段[100-85],[85-70],[70-60],[<60]來統計各科成績,分別統計:各分數段人數,課程號和課程名稱

– 考察case表達式
select a.課程號,b.課程名稱,
sum(case when 成績 between 85 and 100
then 1 else 0 end) as ‘[100-85]’,
sum(case when 成績 >=70 and 成績<85
then 1 else 0 end) as ‘[85-70]’,
sum(case when 成績>=60 and 成績<70
then 1 else 0 end) as ‘[70-60]’,
sum(case when 成績<60 then 1 else 0 end) as ‘[<60]’
from score as a right join course as b
on a.課程號=b.課程號
group by a.課程號,b.課程名稱;
查詢課程編號爲0003且課程成績在80分以上的學生的學號和姓名|

select a.學號,a.姓名
from student as a inner join score as b on a.學號=b.學號
where b.課程號=‘0003’ and b.成績>80;
下面 下麪是學生的成績表(表名score,列名:學號、課程號、成績)

使用sql實現將該錶行轉列爲下面 下麪的表結構

【面試題型別總結】這類題目屬於行列如何互換,解題思路如下:

sql面試題:行列如何互換?

mp.weixin.qq.com
圖示

-檢索"0001"課程分數小於60,按分數降序排列的學生資訊

思路如圖:

select a.*,b.成績
from student as a
inner join score as b
on a.學號 =b.學號
where b.成績 <60 and b.課程號 =01
order by b.成績 desc;
-查詢不同老師所教不同課程平均分從高到低顯示

【知識點】分組+條件+排序+多表連線,思路如圖

select a.教師號,a.教師姓名,avg(c.成績)
from teacher as a
inner join course as b
​​on a.教師號= b.教師號
inner join score c on b.課程號= c.課程號
group by a.教師姓名
order by avg(c.成績) desc;
-查詢課程名稱爲"數學",且分數低於60的學生姓名和分數

【知識點】多表連線,思路如圖

select a.姓名,b.成績
from student as a
inner join score as b
on a.學號 =b.學號
inner join course c on b.課程號 =c.課程號
where b.成績 <60 and c.課程名稱 =‘數學’;
-查詢任何一門課程成績在70分以上的姓名、課程名稱和分數(與上題類似)

select a.姓名,c.課程名稱 ,b.成績
from student as ​a
inner join score as b
​​on a.學號=b.學號
inner join course c on b.課程號 =c.課程號
where b.成績 >70;
-查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績

【知識點】分組+條件+多表連線

翻譯成大白話:計算每個學號不及格分數個數,篩選出大於2個的學號並找出姓名,平均成績,思路如圖:

select b.姓名,avg(a.成績),a.學號
from score as​ a
inner join student as b
​​on a.學號 =b.學號
where a.成績 <60
group by a.學號
having count(a.學號 ) >=2;
-查詢不同課程成績相同的學生的學生編號、課程編號、學生成績

select distinct ​a.學號 ,a.成績 ,a.課程號
from score as​ a
inner join score as b
​​on a.學號 =b.學號
where a.成績 =b.成績 and a.課程號 != b.課程號 ;
-查詢課程編號爲「0001」的課程比「0002」的課程成績高的所有學生的學號

【知識點】多表連線+條件,思路如圖

select a.學號
​from
(select 學號 ,成績 from score where 課程號=01) as a
inner join
(select 學號 ,成績 from score where 課程號=02) as b
on a.學號 =b.學號
inner join student c on c.學號 =a.學號
where a.成績 >b.成績 ;
-查詢學過編號爲「0001」的課程並且也學過編號爲「0002」的課程的學生的學號、姓名

思路如圖

select a.學號
​​from
(select 學號 ,成績 from score where 課程號=01) as a
inner join
(select 學號 ,成績 from score where 課程號=02) as b
on a.學號 =b.學號
inner join student c on c.學號 =a.學號
where a.成績 >b.成績 ;
-查詢學過「孟扎扎」老師所教的所有課的同學的學號、姓名

思路如圖

select s.學號 ,s.姓名,a.學號 ,b.課程號,c.教師號 ,c.教師姓名
from student as s
inner join score as a
​​on s.學號 =a.學號
inner join course b on a.課程號 =b.課程號
inner join teacher c on b.教師號 = c.教師號
where c.教師姓名 =‘孟扎扎’;
-查詢沒學過"孟扎扎"老師講授的任一門課程的學生姓名(與上題類似,"沒學過"用not in來實現)

select 姓名 ,學號
from student
​where 學號 not in (
select a.學號
from student as a
inner join score as​ b
on a.學號 =b.學號
inner join course as​ c on b.課程號 =c.課程號
inner join teacher as​ d on c.教師號 =d.教師號
where d.教師姓名 =‘孟扎扎’);
-查詢沒學過「孟扎扎」老師課的學生的學號、姓名(與上題類似)

select 學號, 姓名
from student
where ​學號 not in
(select 學號 from score where 課程號=
(select 課程號 from course where 教師號 =
(select 教師號 from teacher where 教師姓名 =‘孟扎扎’)
)
​​);
-查詢選修「孟扎扎」老師所授課程的學生中成績最高的學生姓名及其成績(與上題類似,用成績排名,用 limit 1得出最高一個)

select a.姓名,b.成績
from student as​ a
inner join score as​ b on a.學號=b.學號
inner join course as​ c on b.課程號 =c.課程號
inner join teacher as​ d on c.教師號 = d.教師號
where d.教師姓名 = ‘孟扎扎’
order by b.成績 desc limit 1;
-查詢至少有一門課與學號爲「0001」的學生所學課程相同的學生的學號和姓名

select 學號 ,姓名
from student
​​where 學號 in
(select distinct(學號) from score where 課程號 in
(select 課程號 from score where 學號=0001))
and 學號 !=0001;
-按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績

【知識點】多表連線 新建欄位 ,思路如圖

select a.學號,avg(a.成績 ),
max(case when b.課程名稱 = ‘數學’ then a.成績 else null end ) as ‘數學’,
max(case when b.課程名稱 = ‘語文’ then a.成績 else null end ) as ‘語文’,
max(case when b.課程名稱 = ‘英語’ then a.成績 else null end ) as ‘英語’
from score as​ a
inner join course as b
​​on a.課程號 =b.課程號
group by a.學號 ;
如果上面題目不會做,可以複習這部分涉及到的sql知識:

從零學會SQL:多表查詢

www.zhihu.com
圖示

5.SQL高階功能:視窗函數

-查詢學生平均成績及其名次

【知識點】視窗函數排名,思路如圖

select 學號 ,avg(成績),
row_number () over( order by avg(成績) desc)
from score
group by 學號 ;
-按各科成績進行排序,並顯示排名

select 課程號 ,
row_number () over(partition by 課程號 order by 成績 )
from score ;
-查詢每門功成績最好的前兩名學生姓名

【知識點】視窗函數排名+多表連線+條件

select a.課程號 ,b.姓名 ,a.成績,a.ranking​ from (
select 課程號 ,學號 ,成績 ,
row_number () over(partition by 課程號 order by 成績 desc) as ranking​
from score) as a
inner join student b on a.學號 =b.學號
where a.ranking​ ❤️ ;
-查詢所有課程的成績第2名到第3名的學生資訊及該課程成績(與上一題相似)

select b.姓名 ,a.課程號 ,a.成績
​​from (
select 課程號 ,學號 ,成績 ,
row_number () over( partition by 課程號 order by 成績 desc) as ranking
from score ) as a
inner join student as b
on a.學號 =b.學號
where a.ranking in( 2,3) ;
-查詢各科成績前三名的記錄(不考慮成績並列情況)(與上一題相似)

select b.姓名 ,a.課程號 ,a.成績
​from (
select 課程號 ,學號 ,成績 ,
row_number () over( partition by 課程號 order by 成績 desc) as ‘ranking’
from score ) as​ a
inner join student as b
​​on a.學號 =b.學號
where a.ranking <4 ;
這些題要融會貫通,以後碰到類似的面試題都可以找到對應場景的使用案例。

如何學習 SQL 語言?

www.zhihu.com
圖示
我還寫了一個免費的教學《《圖解SQL面試題》

猴子:免費教學《圖解SQL面試題》

zhuanlan.zhihu.com
圖示TOC

歡迎使用Markdown編輯器

你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。

新的改變

我們對Markdown編輯器進行了一些功能拓展與語法支援,除了標準的Markdown編輯器功能,我們增加瞭如下幾點新功能,幫助你用它寫部落格:

  1. 全新的介面設計 ,將會帶來全新的寫作體驗;
  2. 在創作中心設定你喜愛的程式碼高亮樣式,Markdown 將程式碼片顯示選擇的高亮樣式 進行展示;
  3. 增加了 圖片拖拽 功能,你可以將原生的圖片直接拖拽到編輯區域直接展示;
  4. 全新的 KaTeX數學公式 語法;
  5. 增加了支援甘特圖的mermaid語法1 功能;
  6. 增加了 多螢幕編輯 Markdown文章功能;
  7. 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定 等功能,功能按鈕位於編輯區域與預覽區域中間;
  8. 增加了 檢查列表 功能。

功能快捷鍵

復原:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
標題:Ctrl/Command + Shift + H
無序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
檢查列表:Ctrl/Command + Shift + C
插入程式碼:Ctrl/Command + Shift + K
插入鏈接:Ctrl/Command + Shift + L
插入圖片:Ctrl/Command + Shift + G
查詢:Ctrl/Command + F
替換:Ctrl/Command + G

合理的建立標題,有助於目錄的生成

直接輸入1次#,並按下space後,將生成1級標題。
輸入2次#,並按下space後,將生成2級標題。
以此類推,我們支援6級標題。有助於使用TOC語法後生成一個完美的目錄。

如何改變文字的樣式

強調文字 強調文字

加粗文字 加粗文字

標記文字

刪除文字

參照文字

H2O is是液體。

210 運算結果是 1024.

插入鏈接與圖片

鏈接: link.

圖片: Alt

帶尺寸的圖片: Alt

居中的圖片: Alt

居中並且帶尺寸的圖片: Alt

當然,我們爲了讓使用者更加便捷,我們增加了圖片拖拽功能。

如何插入一段漂亮的程式碼片

部落格設定頁面,選擇一款你喜歡的程式碼片高亮樣式,下面 下麪展示同樣高亮的 程式碼片.

// An highlighted block
var foo = 'bar';

生成一個適合你的列表

  • 專案
    • 專案
      • 專案
  1. 專案1
  2. 專案2
  3. 專案3
  • 計劃任務
  • 完成任務

建立一個表格

一個簡單的表格是這麼建立的:

專案 Value
電腦 $1600
手機 $12
導管 $1

設定內容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文字居中 第二列文字居右 第三列文字居左

SmartyPants

SmartyPants將ASCII標點字元轉換爲「智慧」印刷標點HTML實體。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" 「Isn’t this fun?」
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

建立一個自定義列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何建立一個註腳

一個具有註腳的文字。2

註釋也是必不可少的

Markdown將文字轉換爲 HTML

KaTeX數學公式

您可以使用渲染LaTeX數學表達式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通過歐拉積分

Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多關於的資訊 LaTeX 數學表達式here.

新的甘特圖功能,豐富你的文章

Mon 06Mon 13Mon 20已完成 進行中 計劃一 計劃二 現有任務Adding GANTT diagram functionality to mermaid
  • 關於 甘特圖 語法,參考 這兒,

UML 圖表

可以使用UML圖表進行渲染。 Mermaid. 例如下面 下麪產生的一個序列圖:

張三李四王五你好!李四, 最近怎麼樣?你最近怎麼樣,王五?我很好,謝謝!我很好,謝謝!李四想了很長時間, 文字太長了不適合放在一行.打量着王五...很好... 王五, 你怎麼樣?張三李四王五

這將產生一個流程圖。:

鏈接
長方形
圓角長方形
菱形
  • 關於 Mermaid 語法,參考 這兒,

FLowchart流程圖

我們依舊會支援flowchart的流程圖:

Created with Raphaël 2.2.0開始我的操作確認?結束yesno
  • 關於 Flowchart流程圖 語法,參考 這兒.

導出與匯入

導出

如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具列找到 文章導出 ,生成一個.md檔案或者.html檔案進行本地儲存。

匯入

如果你想載入一篇你寫過的.md檔案,在上方工具列可以選擇匯入功能進行對應擴充套件名的檔案匯入,
繼續你的創作。


  1. mermaid語法說明 ↩︎

  2. 註腳的解釋 ↩︎