小引
首先說明,這個(gè)筆者2年前學(xué)習(xí)SQL的遺漏下來的筆記,由于參加完騰訊的筆試,內(nèi)容比較偏向數(shù)據(jù)機(jī)構(gòu)和編譯以及數(shù)據(jù)庫,剛好要換臺本本,心里不想把它弄死在硬盤里,覺得蠻好的,所以把它都分享了,主要第一部分簡單介紹SQL語言,第二部分簡單實(shí)踐,純屬于簡單類似的記錄,通俗易懂,希望對學(xué)習(xí)數(shù)據(jù)庫原理的同學(xué)有一定的幫助!
主要內(nèi)容:
綜述
簡單實(shí)踐
綜述
大家都知道SQL是結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,是一個(gè)綜合的,功能極強(qiáng)的同時(shí)又簡潔易學(xué)的,它集級數(shù)據(jù)查詢(Data Quest),數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)定義(Data Definition),數(shù)據(jù)控制(Data Control)于一體 即:
SQL語言包含4個(gè)部分:
※ 數(shù)據(jù)定義語言(DDL),例如:CREATE、DROP、ALTER等語句
※ 數(shù)據(jù)操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句
※ 數(shù)據(jù)查詢語言(DQL),例如:SELECT語句
※ 數(shù)據(jù)控制語言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句
SQL語言包括三種主要程序設(shè)計(jì)語言類別的語句:數(shù)據(jù)定義語言(DDL),數(shù)據(jù)操作語言(DML)及數(shù)據(jù)控制語言(DCL)
現(xiàn)在說說SQL的幾個(gè)基本概念:
基本表:本身獨(dú)立存在的一個(gè)表,一個(gè)關(guān)系就是對應(yīng)一個(gè)基本表
內(nèi)模式:存儲文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式
視圖:從一個(gè)或幾個(gè)基本表導(dǎo)出的表,他是一個(gè)虛表
簡單實(shí)踐
建一個(gè)數(shù)據(jù)庫,包含“學(xué)生表”,“教員表”,“任課表”,“專業(yè)表”,“課程表”,“學(xué)生個(gè)人情況表”,“成績表”七張表
下面幾個(gè)表是我們這次實(shí)踐要用到的表: 用SQL語句建表:
建立一個(gè)數(shù)據(jù)庫cc
復(fù)制代碼 代碼如下:
create database cc;
use cc;
創(chuàng)建一個(gè)名為tb_student的學(xué)生表
復(fù)制代碼 代碼如下:
tb_student的學(xué)生表
create table tb_student(
stunum char(7) primary key, --學(xué)號
stuname char(8) not null, --姓名
stusex char(2) check(stusex in('女','男')), --性別
stubirthday smalldatetime not null, --學(xué)生出生日期
stuspec char(6)not null, --專業(yè)
stuscore numeric(4,1), --入學(xué)成績
stuloan char(2) check(stuloan in ('是','否'))not null, --是否貸款
)
創(chuàng)建一個(gè)名為tb_teacher的教師表
tb_teacher的教師表
復(fù)制代碼 代碼如下:
create table tb_teacher(
教師代號 char(7) primary key, --教師代號
姓名 char(8) not null, --教師名字
性別char(2) check(teasex in('女','男')), --教師性別
出生年月 datetime not null, --教師出生日期
職稱 char(6), --職稱
)
創(chuàng)建一個(gè)名為tb_renke的任課表
tb_renke的任課表
復(fù)制代碼 代碼如下:
create table tb_renke(
課程代號 char(5), --課程代號
教師代號 char(7), -- 教師代號
)
創(chuàng)建一個(gè)名為tb_major的專業(yè)表
復(fù)制代碼 代碼如下:
tb_major的專業(yè)表
create tabletb_major(
專業(yè)名稱 char(8) primary key, --專業(yè)名稱
負(fù)責(zé)人 char(8) not null, --負(fù)責(zé)人
)
創(chuàng)建一個(gè)名為tb_course的課程表
復(fù)制代碼 代碼如下:
tb_course的課程表
create table course(
課程代號 char(5)primary key, --課程代號
課程名 char(14) not null, --課程名
周學(xué)時(shí) int, --周學(xué)時(shí)
學(xué)分 int, --學(xué)分
)
創(chuàng)建一個(gè)名為tb_studentinfo的學(xué)生個(gè)人情況表
tb_studentinfo的學(xué)生個(gè)人情況表
復(fù)制代碼 代碼如下:
create table tb_studentinfo(
學(xué)號 char(7), --學(xué)號
身份證 char(15) unique, --身份證號碼
籍貫 char(8), --籍貫
家庭住址 text, --家庭住址
電話 char(30), --電話
特長 text, --特長
獎(jiǎng)勵(lì) text, --獎(jiǎng)勵(lì)
處分 char(100), --處分
)
創(chuàng)建一個(gè)名為tb_grade的成績表
tb_grade的成績表
復(fù)制代碼 代碼如下:
create table tb_grade(
學(xué)號 char(7), --學(xué)號
課程代號 char(5), --課程代號
平時(shí) numeric(3,1), --平時(shí)
期中 numeric(3,1), --期中
期末 numeric(3,1), --期末
)
現(xiàn)在向每一張表插入記錄
給學(xué)生表tb_student插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_student
insert into tb_student values('9607039','鄧盈瑩','女','1978-6-6','外貿(mào)',666.6,'是');
insert into tb_student values('9907002','倪雯嫻','女','1981-4-1','外貿(mào)',641.4,'是');
insert into tb_student values('9801055','趙東','男','1979-11-9','中文',450,'否');
insert into tb_student values('9902006','和音','女','1982-6-19','數(shù)學(xué)',487.1,'否');
insert into tb_student values('9704001','克敏敏','女','1978-7-22','物理',463,'否');
insert into tb_student values('9603001','申強(qiáng)','男','1978-1-15','新聞',512,'是');
insert into tb_student values('9606005','遲大為','男','1976-9-3','化學(xué)',491.3,'否');
insert into tb_studentvalues('9803011','歐陽小娟','女','1981-8-11','新聞',526.5,'否');
insert into tb_student values('9908088','毛杰','男','1982-1-1','計(jì)算機(jī)',622.2,'否');
insert into tb_student values('9608066','康紅','女','1979-9-7','計(jì)算機(jī)',596.8,'是');
insert into tb_student values('9805026','夏天','男','1980-5-7','歷史',426.7,'否');
insert into tb_student values('9702033','李力','男','1979-7-7','數(shù)學(xué)',463.9,'否');
給教師表tb_teacher插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_teacher
insert into tb_teacher values('20222','于朵','女','1962-6-19','副教授');
insert into tb_teacher values('20406','張建','女','1946-7-16','教授');
insert into tb_teacher values('10429','蔣成功','男','1959-3-12','副教授');
insert into tb_teacher values('10616','萬年','男','1945-9-1','教授');
insert into tb_teacher values('20626','孫樂','女','1971-12-15','講師');
insert into tb_teacher values('10803','李鐵','男','1958-9-22','副教授');
insert into tb_teacher values('10812','米粟','男','1960-1-3','副教授');
insert into tb_teacher values('11015','柴淮','男','1973-8-26','講師');
insert into tb_teacher values('11107','方華','女','197**-6','講師');
insert into tb_teacher values('20836','張靜','女','1974-11-15','講師');
insert into tb_teacher values('10101','高樹聲','男','1940-12-5','教授');
insert into tb_teacher values('10312','鞏文','男','1959-3-17','副教授');
insert into tb_teacher values('20506','吳燕','女','1947-10-6','教授');
insert into tb_teacher values('20701','沈菲菲','女','1960-6-18','副教授');
insert into tb_teacher values('10202','梁龍林','男','1948-6-18','教授');
insert into tb_teacher values('10428','李陽','男','1955-8-12','教授');
insert into tb_teacher values('10621','魯師','男','1943-11-18','教授');
insert into tb_teachervalues('10809','鄧為民','男','1957-1-26','副教授');
insert into tb_teacher values('20106','姜曉紅','女','1961-6-5','副教授');
insert into tb_teacher values('10131','付林','男','1968-9-11','講師');
insert into tb_teacher values('10802','楊亮紅','男','1941-5-23','教授');
insert into tb_teacher values('10223','周毅','男','1970-3-8','講師');
insert into tb_teacher values('20255','孫莉莉','女','1975-9-12','講師');
insert into tb_teacher values('20705','夏雪','女','1969-10-28','講師');
insert into tb_teacher values('10712','南方','男','1975-9-13','講師');
insert into tb_teacher values('10201','代順達(dá)','男','1940-12-17','講師');
insert into tb_teacher values('20301','高珊','女','1965-6-19','副教授');
insert into tb_teacher values('20319','林妮','女','1973-4-1','講師');
insert into tb_teacher values('21025','張旗','女','1972-6-6','講師');
insert into tb_teacher values('11117','韓明','男','1976-2-14','助教');
insert into tb_teacher values('10503','孫建國','男','1949-10-1','教授');
insert into tb_teacher values('10509','黃寧','男','1956-12-23','副教授');
給任課表tb_renke插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_renke
insert into tb_renke values('21003','21025');
insert into tb_renke values('30211','20255');
insert into tb_renke values('30232','10201');
insert into tb_renke values('40711','10712');
insert into tb_renke values('40722','20701');
insert into tb_renke values('10101','20106');
insert into tb_renke values('11101','11107');
insert into tb_renke values('20511','10509');
insert into tb_renke values('10101','10131');
insert intotb_renke values('20534','10503');
insert into tb_renke values('10712','20705');
insert into tb_renke values('20115','20106');
insert into tb_renke values('10222','10223');
insert into tb_renke values('30412','10429');
insert into tb_renke values('40316','20319');
insert into tb_renke values('40612','20626');
insert into tb_renke values('20328','20301');
insert into tb_renke values('10812','10429');
insert into tb_renke values('20801','10803');
insert into tb_renke values('30802','10812');
insert into tb_renke values('11001','11015');
insert into tb_renke values('20113','10131');
insert into tb_renke values('30416','10428');
insert into tb_renke values('20327','10312');
insert into tb_renke values('20521','20506');
insert into tb_renke values('30213','10201');
insert into tb_renke values('11101','11117');
insert into tb_renke values('10715','20222');
insert intotb_renke values('20111','10101');
insert into tb_renke values('10218','10202');
insert intotb_renke values('30423','20406');
insert into tb_renke values('40331','20319');
insert intotb_renke values('40625','10616');
insert into tb_renke values('20314','20301');
insert into tb_renke values('10811','20836');
insert into tb_renke values('30819','10802');
給專業(yè)表tb_major插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_major
insert into tb_major values('化學(xué)','魯師');
insert into tb_major values('計(jì)算機(jī)','鄧為民');
insert into tb_major values('軟件','李明');
insert into tb_major values('外貿(mào)','沈菲菲');
insert into tb_major values('數(shù)學(xué)','梁龍林');
insert into tb_major values('物理','李陽');
insert intotb_major values('物理學(xué)','王國玉');
insert into tb_major values('歷史','吳燕');
insert into tb_major values('中文','高樹聲');
insert into tb_major values('新聞','鞏文');
給課程表tb_course插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_course
insert into tb_course values('20511','世界近代史',4,4);
insert into tb_course values('10101','大學(xué)語文',2,2);
insert into tb_course values('20801','計(jì)算機(jī)基礎(chǔ)(一)',4,3);
insert into tb_course values('10218','高等代數(shù)',4,4);
insert into tb_course values('11001','英語(一)',6,6);
insert into tb_course values('20113','外國文學(xué)',4,4);
insert into tb_course values('30416','接口技術(shù)',4,3);
insert into tb_course values('20327','報(bào)刊編輯學(xué)',2,2);
insert into tb_course values('20521','中國民族史',3,2);
insert into tb_course values('30213','數(shù)論',4,4);
insert into tb_course values('11101','體育',2,2);
insert into tb_course values('21003','英語(二)',4,4);
insert into tb_course values('10715','高等數(shù)學(xué)',4,4);
insert into tb_course values('20111','古代漢語',3,3);
insert into tb_course values('30802','計(jì)算機(jī)基礎(chǔ)(二)',3,3);
insert into tb_course values('30423','電磁場理論',3,3);
insert into tb_course values('40331','傳播心理學(xué)',2,2);
insert into tb_course values('40625','色譜學(xué)',2,2);
insert into tb_course values('20314','新聞學(xué)概論',2,2);
insert into tb_course values('10811','離散數(shù)學(xué)',2,2);
insert into tb_course values('30819','編譯技術(shù)',4,4);
insert into tb_course values('20534','中國近代史',4,4);
insert into tb_course values('10712','政治經(jīng)濟(jì)學(xué)',3,3);
insert into tb_course values('20115','近代漢語',4,4);
insert into tb_course values('30211','概論統(tǒng)計(jì)',3,3);
insert into tb_course values('30232','數(shù)學(xué)分析',2,2);
insert into tb_course values('40711','國際投資學(xué)',2,2);
insert into tb_course values('40722','國際商法',2,2);
insert into tb_course values('30832','算法設(shè)計(jì)',4,4);
insert into tb_course values('10812','數(shù)字電路',4,4);
insert into tb_course values('10222','解析幾何',2,2);
insert into tb_course values('30412','近代物理實(shí)驗(yàn)',3,2);
insert into tb_course values('40316','當(dāng)代新聞史',2,2);
insert into tb_course values('40612','配位化學(xué)',3,3);
insert into tb_course values('20328','現(xiàn)代新聞報(bào)道',4,4);
給學(xué)生個(gè)人情況表tb_studentinfo插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_studentinfo
insert into tb_studentinfo values('9607039','530120169021101','安徽','江岸小區(qū)棟單元','5033228','唱歌,摔跤','被評為三好學(xué)生','');
insert into tb_studentinfo values('9907002','530120170060701','云南','江岸小區(qū)棟單元','5033226','跳舞,籃球','被評為三好學(xué)生','');
insert into tb_studentinfo values('9801055','530120171072501','湖北','白馬小區(qū)棟單元','4133224','圍棋','','');
insert into tb_studentinfo values('9902006','530120170122901','湖南','金星小區(qū)棟單元','3133218','象棋','被評為三好學(xué)生','');
insert into tb_studentinfo values('9704001','530120168121101','云南','靜園小區(qū)棟單元','2133227','排球,足球','','');
insert into tb_studentinfo values('9603001','530120174050101','云南','江岸小區(qū)棟單元','5033219','唱歌,跳舞','被評為紅花少年','');
insert into tb_studentinfo values('9606005','530120175040702','江蘇','江岸小區(qū)棟單元','5033123','演講','','');
insert into tb_studentinfo values('9803011','530120173021201','四川','白馬小區(qū)棟單元','4133124','集郵','獲集郵展三等獎(jiǎng)','');
insert into tb_studentinfo values('9908088','530120172092801','四川','陽光小區(qū)棟單元','3133177','長跑足球','獲省長跑第二名','作弊受處分');
insert into tb_studentinfo values('9608066','530120174092201','云南','陽光小區(qū)棟單元','3133222','攝影','獲優(yōu)秀作文獎(jiǎng)','');
insert into tb_studentinfo values('9805026','530120174110901','貴州','陽光小區(qū)棟單元','3133189','圍棋','獲數(shù)學(xué)競賽一等獎(jiǎng)','');
insert into tb_studentinfo values('9702033','530120170080401','黑龍江','陽光小區(qū)棟單元','3148212','圍棋','獲數(shù)學(xué)競賽三等獎(jiǎng)','');
給成績表tb_grade插入數(shù)據(jù)
復(fù)制代碼 代碼如下:
tb_grade
insert into tb_grade values('9805026','20801',75,87,82);
insert into tb_grade values('9702033','30802',80,89,91);
insert into tb_grade values('9907002','11001',91,83,85);
insert into tb_grade values('9801055','20113',70,65,55);
insert into tb_grade values('9607039','40711',85,80,88);
insert into tb_grade values('9907002','10715',83,90,86);
insert into tb_grade values('9801055','20111',78,60,65);
insert into tb_grade values('9902006','10218',75,63,52);
insert into tb_grade values('9902006','11001',78,86,81);
insert into tb_grade values('9704001','30416',80,90,90);
insert into tb_grade values('9803011','20327',95,93,90);
insert into tb_grade values('9908088','11001',90,91,87);
insert into tb_grade values('9805026','20521',90,97,96);
insert into tb_grade values('9702033','30213',88,69,76);
insert into tb_grade values('9907002','11101',88,65,72);
insert into tb_grade values('9801055','21003',70,90,84);
insert into tb_grade values('9902006','11101',80,70,70);
insert into tb_grade values('9803011','21003',78,84,82);
insert into tb_grade values('9908088','11101',82,75,78);
insert into tb_grade values('9805026','21003',83,85,84);
insert into tb_grade values('9805026','20511',90,82,86);
insert into tb_grade values('9702033','30232',80,84,83);
insert into tb_grade values('9907002','10101',84,96,92);
insert into tb_grade values('9801055','20801',76,78,60);
insert into tb_grade values('9902006','10101',85,88,81);
insert into tb_grade values('9704001','30802',90,87,82);
insert into tb_grade values('9803011','20801',60,50,51);
insert into tb_grade values('9704001','30423',80,81,85);
insert into tb_grade values('9603001','40331',67,72,70);
insert into tb_grade values('9606005','40625',83,85,84);
insert into tb_grade values('9803011','20314',76,76,76);
insert into tb_grade values('9908088','10811',82,92,89);
insert into tb_grade values('9608066','30819',78,84,82);
insert into tb_grade values('9805026','20534',70,90,84);
insert into tb_grade values('9702033','30211',93,89,90);
insert into tb_grade values('9607039','40722',90,87,82);
insert into tb_grade values('9907002','10712',90,96,97);
insert into tb_grade values('9801055','20115',80,82,87);
insert into tb_grade values('9902006','10222',85,91,79);
insert into tb_grade values('9704001','30412',78,87,90);
insert into tb_grade values('9603001','30316',66,71,73);
insert into tb_grade values('9606005','40612',70,78,60);
insert into tb_grade values('9803011','20328',90,88,87);
insert into tb_grade values('9908088','10812',80,67,83);
insert into tb_grade values('9608066','30832',95,92,93);
insert into tb_grade values('9908088','10101',80,82,87);
下面進(jìn)行數(shù)據(jù)查詢:
(1)查詢在78年12月31日之后出生的學(xué)生的學(xué)號和姓名
思考一下在展開
select學(xué)號,姓名from tb_student where 出生年月>'1979';
或是:
select學(xué)號,姓名from tb_student where 出生年月>cast('1978-12-31' as datetime);
(2)查詢?nèi)雽W(xué)成績大于500分的女同學(xué)和入學(xué)成績大于600分的男同學(xué)的姓名
思考一下在展開
select姓名from tb_student where (入學(xué)成績>500 and 性別='女')or(入學(xué)成績>600 and 性別='男') ;
(3)查詢家在江岸小區(qū)住的學(xué)生的姓名和家庭住址
思考一下在展開
select家庭住址,姓名from tb_studentinfo,tb_student where( 家庭住址like'江岸小區(qū)%')and (tb_studentinfo.學(xué)號=tb_student.學(xué)號) ;
(4)查詢沒有選修姜曉紅老師所授課程的學(xué)生的學(xué)號
思考一下在展開
select學(xué)號from tb_student where 學(xué)號not in(select 學(xué)號from tb_grade,tb_teacher,tb_renke where tb_grade.課程代號=tb_renke.課程代號and tb_renke.教師代號=tb_teacher.教師代號and姓名='姜曉紅' );
(5)查詢各學(xué)生所選課的期末平均成績,學(xué)生學(xué)號,姓名
思考一下在展開
select tb_student.姓名,tb_grade.學(xué)號,avg(期末) from tb_student,tb_grade where tb_student.學(xué)號=tb_grade.學(xué)號group by tb_student.姓名,tb_grade.學(xué)號;
(6)查詢趙東所選修的課程的課程名及其學(xué)號、姓名
思考一下在展開
select tb_student.姓名,tb_grade.學(xué)號,課程名from tb_student,tb_grade ,tb_course where tb_grade.學(xué)號=tb_student.學(xué)號and tb_grade.課程代號=tb_Course.課程代號and姓名='趙東';
(7)查詢由教授所任課的課程名
思考一下在展開
select課程名from tb_course,tb_teacher ,tb_renke where tb_course.課程代號=tb_renke.課程代號and tb_teacher.教師代號=tb_renke.教師代號and職稱='教授'
或是:
select課程名from tb_course where 課程代號in (select 課程代號from tb_renke where 教師代號in(select教師代號from tb_teacher where 職稱='教授'));
(8)統(tǒng)計(jì)沒有貸款的學(xué)生的人數(shù)
思考一下在展開
select count(*)沒貸款的人數(shù)from tb_student where 是否貨款='false';
(9)查詢每個(gè)科目平時(shí)、期中及期末三個(gè)成績的平均成績在80分以上的學(xué)生的學(xué)號
思考一下在展開
select學(xué)號成績平均在分以上的學(xué)號from tb_grade group by 學(xué)號having avg(平時(shí)+期中+期末)>80;
(10)查詢和毛杰同學(xué)所學(xué)專業(yè)一樣的人的學(xué)號和姓名
思考一下在展開
select學(xué)號,姓名from tb_student where 專業(yè)in (select 專業(yè)from tb_student where 姓名='毛杰');
(11)查詢期末成績大于任何一個(gè)老師所教學(xué)生的期末成績的學(xué)生姓名、選修課程號、成績
思考一下在展開
select 姓名,課程代號,期末,tb_grade.學(xué)號from tb_grade,tb_student where tb_student.學(xué)號=tb_grade.學(xué)號and 期末>=all(select 期末from tb_grade);
(12)來了一位新同學(xué),學(xué)號為9607001,省份證號為530120169021100
思考一下在展開
insert into tb_studentinfo (學(xué)號,身份證)values('9607001','530120169021100');
insert into tb_student(學(xué)號)values('9607001');
(13)將期末成績在所有人的期末平均成績以上的同學(xué)加10分
思考一下在展開
update tb_grade set 期末=期末+10 where 期末>(select avg(期末) from tb_grade);
(14)查詢至少選修了付林老師所授所有課程的學(xué)生學(xué)號
思考一下在展開
Select學(xué)號from tb_grade x Where not exists (select * from tb_grade y Where 教師代號in( Select 教師代號from tb_teacher,tb_renke Where 姓名='付林'and tb_teacher.教師代號=tb_renke.教師代號) And not exists(select *from tb_grade z Where z.課程代號=y.課程代號and z.學(xué)號=x.學(xué)號))
(15)統(tǒng)計(jì)每個(gè)老師授課的種數(shù)
思考一下在展開
select教師代號,count(*)課程種數(shù)from tb_renke group by tb_renke.教師代號;
(16)查詢選修2門以上課程的學(xué)生學(xué)號及平均成績(指各課程的期末成績的平均成績,只統(tǒng)計(jì)及格的課程),并按其平均成績降序排列輸出
思考一下在展開
select 學(xué)號,avg(期末)平均分from tb_grade where 期末> 60 group by 學(xué)號having count(*)>2 order by avg( 期末)desc;
(17)查詢沒有貸款的學(xué)生的學(xué)號
思考一下在展開
select學(xué)號沒貸款的學(xué)號from tb_student where 是否貨款='false';
(18)查詢年齡最大的學(xué)生的學(xué)號和姓名
思考一下在展開
select學(xué)號,姓名from tb_student where 出生年月in ( select min(出生年月) from tb_student );
希望這些資料,能夠?qū)δ阌兴鶐椭?
您可能感興趣的文章:- 數(shù)據(jù)庫SQL語句優(yōu)化總結(jié)(收藏)
- 一些有用的sql語句整理 推薦收藏
- sqlserver 統(tǒng)計(jì)sql語句大全收藏
- 程序員最實(shí)用的 SQL 語句收藏,看完這篇就夠了