

摘""要:本文介紹了SQL語言的主要含義,給出了SQL語言在數據庫實踐課程中的一些應用,如查詢單表的某公司職員綜合信息表、多表的某高校十一人制男子組足球比賽賽事數據分析表,依托這些實例從基礎的單表查詢操作到能夠進行多表之間的數據查詢分析,掌握SQL語言的SELECT功能及其有關查詢關鍵字的用法。
關鍵詞:SQL語言;"數據庫實踐課程;"數據庫操作
中圖分類號:TP311.1"""""文獻標識碼:A
Application"of"SQL"Language"in"Database"Practice"Course
Li"Zhang1""""Chen"Long1""""Chen"YiFan1"""Cheng"Xiang1"""Gao"QiYuan2
Abstract:"This"article"introduces"the"main"meaning"of"SQL"language,"provides"some""applications"of"SQL"language"in"databasenbsp;practice"courses,"such"as"the"comprehensive"information"table"of"a"company's"employees"in"a"single"query"table,"and"the"multi"table"data"analysis"table"of"a"university's"eleven"player"men's"football"match."Based"on"these"examples,"from"basic"single"table"query"operations"to"the"ability"to"query"and"analyze"data"between"multiple"tables,"Master"the"SELECT"function"implemented"by"SQL"language"and"its"usage"related"to"query"keywords.
Keywords:"Structured"Query"Language;"Database"Practice"Course;"Database"Operation
如今計算機應用系統得到了很大發展,其中數據庫是每個應用不可或缺的部分。因為對該方面的技術需求日益增多,故各個高等教育院校都已將數據庫系統概論課程增加到其計算機相關專業的培養計劃中且為必修課。并且在數據庫系統概論課程中,SQL語句實踐處于首要的部位,由于它可以實現數據庫系統的增、刪、改、查的重要功能[1]。想要滿足相應的查詢、修改等需求,就應該正確理解和實踐SQL語言,這是每個計算機就業者所必須的基礎技能。
本文首先說明SQL語言“是什么”,隨后將給出兩個貼合實際的SQL語言使用的場景實例,通過“問”與“答”的方式來使學生能夠深入自主的思考所需的答案邏輯,從而寫出相應的語句腳本,著重加強對語句含義的理解與使用,尤其是一些常用查詢操作的關鍵字用法及涵義。在經過獨立完成這些實踐課程的具體應用后,使學生對SQL語言的具體使用有一定的理解并能學會基礎的腳本設計。
1"SQL語言介紹
結構化查詢語言SQL(Structured"Query"Language)是并非過程化的高級編程語言,它讓使用者凌駕于數據結構上進行有關操作。其既不要求使用人設定對數據的存放途徑,也不需要操作人知曉詳細的數據儲存渠道,故帶有幾乎不同底層構造的不同數據庫系統,允許利用一樣的SQL語言作為數據添加與管理的接口。SQL語句可以嵌套,這帶來有巨大的靈活性和功能性[2]。
SQL是一種集數據庫查詢和程序設計的語言,專門作用于關系型數據庫,它允許用戶與數據庫之間相互作用,具有定義數據、查找數據、更新數據、訪問控制﹑數據共享、數據統一、管理關系數據庫系統等功能。此處只著重介紹它的數據查詢功能,也就是SELECT語句[3]。SELECT語句包括8個子句,其中SELECT和FROM子句是必須存在的,剩下的6個子句僅在特定需求時使用。
2"單表的某公司職員綜合信息表
所謂查詢即為檢索,數據本身并不會因為檢索而會發生任何改變,而是從已經存在的數據表或者視圖中提取所符合要求的數據,最后得到的結果仍然是一個數據表[4]。本文首先從單表的某公司職員綜合信息表開始介紹SELECT語句的查詢功能及所需邏輯,由于單表的查詢會比較簡單,故在本實際應用中會對其中部分問題進行分析。某公司部分職員綜合信息表如下:
Q1.找出工資高于李四的職員,并按照工資從多到少進行排名。
SELECT"Name,Wages"FROM"clerk
WHERE"Wages"gt;"(SELECT"Wages"FROM"clerk"WHERE"Name"="'李四')"ORDER"BY"Wages"DESC;
Q2.找出工齡多于10年且工資高于兩萬的職員,找出該員工所在省份、部門和計算出其年終獎與單月工資的比重(以元為單位,小數點保留兩位)。
SELECT"Name,"Province,"ROUND((`Bonus`*10000)/(Wages),2)"AS"Proportion,Department""FROM"clerk
WHERE"Seniority"gt;"10"AND"Wages"gt;"2;
思路:由于年終獎與單月工資的比重為年終獎除以工資,再加上最后要求以元為單位,故需要進行變換單位即(`Bonus`*10000)/(Wages)。
Q3.顯示出同在桂八和王五所在的部門中的職工,列出這些員工的名字及所屬部門,并按照工作年限Seniority升序排名。
SELECT"Name,Department,Seniority
FROM"clerk
WHERE"Department"IN"(SELECT"DISTINCT"Department"FROM"clerk"WHERE"Name"="'桂八'"OR"Name"="'王五')
ORDER"BY"Seniority"ASC;
思路:SQL語句中,DISTINCT表示去掉重復的行,作用是針對包含重復值的數據表,用于返回唯一不同的值。語法是SELECT"DISTINCT列名稱FROM表名稱。如果指定了SELECT"DISTINCT,那么ORDER"BY子句中的項就必須出現在選擇列表中,否則會出現錯誤。對于DISTINCT關鍵字,如果后面有多個字段,則代表著是多條件去重,只有當這幾個條件都相同時才算是重復記錄。
Q4.找出clerk表中工資最高的職員。
SELECT"Name,Wages"FROM"clerk
①WHERE"Wages"gt;="ALL(SELECT"Wages"FROM"clerk"WHERE"Wages"gt;"0);
②WHERE"Wages"gt;="ANY(SELECT"Wages"FROM"clerk"WHERE"Wages"gt;"0);
思路:all表示所有,any表示任意一個,即
any表示有任何一個結果滿足條件就返回true,all表示全部結果都滿足條件才返回true,在本題中兩種表述條件都符合答案;使用Wages"gt;"0的原因為避免有些職員的工資沒有數據為1,而報錯。
Q5.趙六的工資為82402元,是clerk表中工資最多的員工,李九的月薪為5146元,占趙六工資的6%。要求找出年終獎Bonus大于2萬元的員工姓名和每個員工的月薪。以趙六的工資百分比作工資占比展示(保留一位小數)。
SELECT"Name,CONCAT(ROUND(Wages/(SELECT"Wages"FROM"clerk"WHERE"Name"="'趙六')*100,1),'%')"AS"percentage
FROM"clerk"WHERE"`Bonus`"gt;"2;
思路:CONCAT()函數用于將多個字符串拼接成一個字符串,ROUND()函數用于把數值字段舍入為指定的小數位數,如ROUND(X,d),X指將要處理的數,d為指需要保留幾位小數,其中d可以為負數,當d為-3時表示保留整數到千位。
3"多表的某高校十一人制男子組足球比賽賽事數據分析表
多表聯合查詢是針對兩個及以上表的查詢,把存儲在不同表中的數據根據不同查詢需求進行有關操作。關系型數據庫中最主要且在實際中最常用的查詢就是多表聯合查詢,該查詢的實現方式可分為連接查詢和嵌套查詢來實現。以下通過一個具體多表查詢的應用來介紹連接查詢和嵌套查詢的作用及其特點。某高校部分賽事、球員進球和球隊信息表2。
Q1.找出名字有“朱”的球員全部進球數據。
SELECT"*"FROM"goal
WHERE"Scorer"LIKE"'%朱%';
思路:SQL語言中使用關鍵詞LIKE+%/_來進行模糊查找,“%”(代表0到任意個字符),而“_”(代表一個字符)。
Q2.由Q1可知,小朱在比賽編號為3的比賽取得進球,請找出是哪個球隊與其比賽,并顯示這場比賽具體信息。
SELECT"GameID,Data,Venue,HomeTeam,"AwayTeam,score"FROM"course"WHERE"GameID"="'3';
思路:goal表中的MatchID字段對應course表中的GameID字段。
Q3.結合Q1、Q2,找出姓名中有“奧”的球員全部進球數據,并顯示出這些比賽的具體信息。
解法1:SELECT"Scorer,TeamAbbreviation,"Gtime,GameID,Data,Venue,HomeTeam,AwayTeam,score"FROM"course"JOIN"goal"ON"(GameID"="MatchID)"WHERE"Scorer"LIKE"'%奧%';
思路:通過結合以上兩個問題的結果,我們可以使用聯表查詢Join...ON來解決Q3。
解法2:SELECT"Scorer,"TeamAbbreviation,"Gtime,GameID,Data,Venue,HomeTeam,AwayTeam,score"FROM"(SELECT"MatchID,"Scorer,"TeamAbbreviation,Gtime"FROM"goal"WHERE"Scorer"LIKE"'%奧%')"AS"g"LEFT"JOIN
(SELECT"GameID,Data,"Venue,HomeTeam,"AwayTeam,score"FROM"course)"AS"c"ON"GameID"="MatchID
思路:根據子查詢,先在goal表中找出名字中有“奧”的球員全部進球數據,然后左連接到course表的查詢,由GameID"="MatchID條件,篩選出最佳解。
Q4.通過Q3,列出每一位在物理與電子科學學院進球(不包括點球大戰)的球員名稱,進球的主客隊,及比賽具體信息。
解法1:
SELECT"Scorer,TeamAbbreviation,Gtime,"GameID,Data,Venue,HomeTeam,AwayTeam,score
FROM"course"JOIN"goal"ON"(GameID"="MatchID)
WHERE"TeamAbbreviation"="'PES'"AND"IsPenalty"IS"NULL;
解法2:
SELECT"Scorer,TeamAbbreviation,Gtime,"GameID,Data,Venue,HomeTeam,AwayTeam,score
FROM(SELECT"MatchID,"Scorer,"TeamAbbreviation,"Gtime,IsPenalty"FROM"goal"WHERE"TeamAbbreviation"="'PES')"AS"g"LEFT"JOIN(SELECT"GameID,Data,Venue,"HomeTeam,AwayTeam,score"FROM"course)"AS"c"ON"GameID"="MatchID
WHERE"IsPenalty"IS"NULL;
思路:根據子查詢即嵌套查詢來進行查詢,先分別從goal表和course表中得到所需要的字段,再將結果進行左連接(LEFT"JOIN),最后根據條件得出答案。
Q5.找出在前10分鐘取得進球的球員,并顯示出球員名字、所在隊伍、主教練以及得分時間。
SELECT"Scorer,TeamAbbreviation,Gtime,"TeamName,Manager"FROM"goal"JOIN"team
ON"(TeamAbbreviation"="TeamCode)
WHERE"Gtime"lt;="10;
思路:同Q3,由于team表中包含球隊的名字、主教練的需要的關鍵字段,所以可以用"goal"JOIN"team"ON"(TeamAbbreviation"="TeamCode),將goal表與team表進行聯系,最后用Gtime"lt;="10"篩出結果。
Q6."找出全部比賽中攻入計算機學院球門的球員。
SELECT"DISTINCT"MatchID,"TeamAbbreviation,"Scorer,Gtime"FROM"goal"JOIN"course"ON"MatchID"="GameID"WHERE"TeamAbbreviation"!="'MOR'"AND"(HomeTeam"="'計算機學院'OR"AwayTeam"="'計算機學院');
思路:首先在goal表中排除計算機學院隊自己的球員(自己不能踢進自己的球門),然后在course表中找到與計算機學院進行比賽的比賽編號,再由定位到對方進球球員。
結語
本文通過兩個具體場景的應用介紹了SQL語言最關鍵的查詢功能,同時將其使用方法和特點進行了詳細說明。該語言是一種專用于關系型數據庫查詢與程序設計語言,適用于存取、查詢、更新數據和管理有關數據庫系統;而且也是數據庫腳本文件的擴展名。SQL語言不管是種類還是數量都是較為繁多的,大多數語句經常要被用到,SELECT語句就是一個典型的工具,無論是高級查詢還是低級查詢,它的運用需求是最頻繁的,熟練掌握數據庫查詢功能及技巧是學好SQL語言的基礎。
參考文獻:
[1]吳軍,張琳.數據庫SQL語言中的難點討論[J].信息與電腦(理論版),2021,33(18):53-55.
[2]趙光亮,舒小松."Navicat"for"MySQL平臺中的SQL語言分析與應用[J].無線互聯科技,2017(19):74-75.
[3]李力,程嚴,王麗霞."SQL語言在醫院信息查詢和統計中的應用[J].中國藥房,2002(12):23-24.
[4]陳長海.Visual"Foxpro"SQL查詢語句探討[J].中國人民公安大學學報(自然科學版),2008(02):89-91.
基金項目:教育部產學合作協同育人項目(編號:220503612183643)“電子信息工程實踐創新實驗室建設的研究”;湖北大學2022年度教學改革研究項目(編號:2022078)“電子信息類專業課程思政教學設計”資助
作者簡介:李璋(1976-""),男,博士,教授,主要研究方向:信息與通信系統;陳龍(1995-),男,碩士研究生,主要研究方向:數據處理。