目錄
目錄
引言:
一粪摘、 初始化4張基礎表
1瀑晒、數(shù)據(jù)表介紹
2、初始化(創(chuàng)建表并插入測試數(shù)據(jù))
二徘意、 SQL習題
1苔悦、查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數(shù)
2、查詢同時存在" 01 "課程和" 02 "課程的情況
3椎咧、查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
4玖详、查詢不存在" 01 "課程但存在" 02 "課程的情況
5、查詢平均成績大于等于 60 分的同學的學生編號和學生姓名和平均成績
6、查詢在 SC 表存在成績的學生信息
7蟋座、查詢所有同學的學生編號拗踢、學生姓名、選課總數(shù)巢墅、所有課程的成績總和
8、查有成績的學生信息(同問題6)
9飒硅、查詢「李」姓老師的數(shù)量
10砂缩、查詢學過「張老師」授課的同學的信息
11三娩、查詢沒有學全所有課程的同學的信息
12庵芭、查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息
13、查詢和" 01 "號的同學學習的課程完全相同的其他同學的信息
14雀监、查詢沒學過"張老師"講授的任一門課程的學生姓名
15、查詢兩門及其以上不及格(小于60分)課程的同學的學號会前,姓名及其平均成績
16好乐、檢索" 01 "課程分數(shù)小于 60,按分數(shù)降序排列的學生信息 13
17蔚万、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
18、查詢各科成績最高分临庇、最低分和平均分
19反璃、按各科成績進行排序,并顯示排名淮蜈, Score 重復時保留名次空缺
20、查詢學生的總成績已卷,并進行排名梧田,總分重復時不保留名次空缺
三侧蘸、 實驗小結(jié)(FAQ):
1裁眯、關(guān)鍵字“Tid”
2、數(shù)據(jù)(日期)類型“datetime”
3讳癌、round() 函數(shù)使用
4、group by 子句
5析桥、HAVING子句
6、EXISTS 、 NOT EXISTS
7泡仗、IN 、NOT IN
8娩怎、比較操作符
9搔课、分支語句
10、窗口函數(shù)rank(expression)和row_number(expression)
引言:
SQL 對于現(xiàn)在的互聯(lián)網(wǎng)公司生產(chǎn)研發(fā)等崗位幾乎是一個必備技能爬泥,你可以把 SQL 當做是一個工具,利用它可以幫助你完成相應的工作崩瓤,創(chuàng)造價值袍啡。當然啦却桶, 學習sql 也是有規(guī)可循的
openGauss數(shù)據(jù)庫是國產(chǎn)數(shù)據(jù)庫的佼佼者之一境输,其支持的SQL標準默認包含SQL2、SQL3和SQL4的主要特性颖系。如何在openGauss數(shù)據(jù)庫中使用SQL語句? 接下來嘁扼,我們將準備一些SQL經(jīng)典練習題進行實踐與測試信粮。
本次練習題將分為上下兩部分。
openGauss基礎涉及到的常用“數(shù)據(jù)類型”和“基礎SQL語法”趁啸,可參見前面的文章《openGauss數(shù)據(jù)庫之SQL介紹》 或者官方文檔《開發(fā)者指南》 。
初始化4張基礎表
1莲绰、數(shù)據(jù)表介紹
--學生表:Student(SId,Sname,Sage,Ssex)
--SId 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
--課程表:Course(CId,Cname,TeId)
--CId 課程編號,Cname 課程名稱,TId 教師編號
--教師表Teacher(TeId,Tname)
--TId 教師編號,Tname 教師姓名
--成績表:SC(SId,CId,score)
--SId 學生編號,CId 課程編號,score 分數(shù)
2欺旧、初始化(創(chuàng)建表并插入測試數(shù)據(jù))
學生表Student
create table Student(SId varchar(10),Sname varchar(10),Sbirthday date,Ssex varchar(10));
insert into Student values('01' , '趙雷' , date '1990-01-01' , '男');
insert into Student values('02' , '錢電' , date '1990-12-21' , '男');
insert into Student values('03' , '孫風' , date '1990-12-20' , '男');
insert into Student values('04' , '李云' , date '1990-12-06' , '男');
insert into Student values('05' , '周梅' , date '1991-12-01' , '女');
insert into Student values('06' , '吳蘭' , date '1992-01-01' , '女');
insert into Student values('07' , '鄭竹' , date '1989-01-01' , '女');
insert into Student values('09' , '張三' , date '2017-12-20' , '女');
insert into Student values('10' , '李四' , date '2017-12-25' , '女');
insert into Student values('11' , '李四' , date '2012-06-06' , '女');
insert into Student values('12' , '趙六' , date '2013-06-13' , '女');
insert into Student values('13' , '孫七' , date '2014-06-01' , '女');
課程表 Course
create table Course(CId varchar(10),Cname varchar(10),TeId varchar(10));
insert into Course values('01' , '語文' , '02');
insert into Course values('02' , '數(shù)學' , '01');
insert into Course values('03' , '英語' , '03');
教師表 Teacher
create table Teacher(Teid 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);
全表顯示:
學生表Student
課程表 Course
教師表 Teacher
成績表 SC
SQL習題
1蛤签、查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數(shù)
以學生id為主鍵辞友,查找課程01 比02分數(shù)高的結(jié)果信息作為主表震肮,然后與學生表關(guān)聯(lián)称龙。
2、查詢同時存在" 01 "課程和" 02 "課程的情況
以學生id為主鍵
3戳晌、查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
以01課程為主表
4、查詢不存在" 01 "課程但存在" 02 "課程的情況
5沦偎、查詢平均成績大于等于 60 分的同學的學生編號和學生姓名和平均成績
根據(jù)學生ID把成績分組疫向,對分組中的score求平均值咳蔚,最后在選取結(jié)果中AVG大于60的即可搔驼。然后關(guān)聯(lián)學生信息表
6谈火、查詢在 SC 表存在成績的學生信息
7、查詢所有同學的學生編號糯耍、學生姓名、選課總數(shù)囊嘉、所有課程的成績總和
8温技、查有成績的學生信息(同問題6)
EXISTS的參數(shù)是一個任意的SELECT語句扭粱,或者說子查詢舵鳞。系統(tǒng)對子查詢進行運算以判斷它是否返回行。如果它至少返回一行焊刹,則EXISTS結(jié)果就為”真”系任;如果子查詢沒有返回任何行虐块, EXISTS的結(jié)果是”假”俩滥。這個子查詢通常只是運行到能判斷它是否可以生成至少一行為止,而不是等到全部結(jié)束贺奠。
9、查詢「李」姓老師的數(shù)量
10儡率、查詢學過「張老師」授課的同學的信息
11挂据、查詢沒有學全所有課程的同學的信息
12儿普、查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息
13崎逃、查詢和" 01 "號的同學學習的課程完全相同的其他同學的信息
查詢所選課程數(shù)量和01學生一樣的學生,去掉所選課程中選了01學生未選課程的人
14眉孩、查詢沒學過"張老師"講授的任一門課程的學生姓名
另一種解法也可以將教師表、課程表浪汪、成績表先關(guān)聯(lián)巴柿,然后再學生表中找到對應的學生信息
15、查詢兩門及其以上不及格(小于60分)課程的同學的學號死遭,姓名及其平均成績
16、檢索" 01 "課程分數(shù)小于 60呀潭,按分數(shù)降序排列的學生信息
17钉迷、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
18至非、查詢各科成績最高分糠聪、最低分和平均分
/*以如下形式顯示:課程 ID睡蟋,課程 name,最高分枷颊,最低分,平均分夭苗,及格率,中等率隔缀,優(yōu)良率题造,優(yōu)秀率
及格為>=60,中等為:70-80界赔,優(yōu)良為:80-90,優(yōu)秀為:>=90
要求輸出課程號和選修人數(shù)牵触,查詢結(jié)果按人數(shù)降序排列淮悼,若人數(shù)相同,按課程號升序排列*/
openGauss數(shù)據(jù)庫支持中文名稱(字段名袜腥、表名), 但不建議钉汗,當然了根據(jù)具體場景決定羹令。