




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章MySQL初步1.1數據庫基本概念1.2MySQL數據庫1.3MySQL常用界面工具第1章MySQL初步.pptx第2章MySQL數據庫和表.pptx第3章MySQL查詢和視圖.pptx第4章MySQL索引與完整性約束.pptx第5章MySQL語言.pptx第6章MySQL存儲過程函數觸發器事件.pptx第7章MySQL數據庫備份與恢復.pptx第8章MySQL用戶權限維護.pptx第9章MySQL事務管理.pptx1.1
數據庫基本概念1.數據庫數據庫(DB)是存放數據的倉庫,而且這些數據存在一定的關聯,并按一定的格式存放在計算機上存儲介質上。學生成績管理數據庫:學生基本信息、課程信息、學生成績信息等數據2.數據模型數據模型主要有層次模型、網狀模型和關系模型。關系模型以記錄組或二維數據表的形式組織數據。學生成績管理數據庫:“學生”、“課程”和“成績”三個表中。學生表:學號、姓名、性別、出生時間、專業、總學分、備注;課程表:課程號、課程名、開課學期、學時和學分;成績表:學號、課程號和成績。1.1
數據庫基本概念學
號姓
名性
別出生時間專
業總
學
分備
注081101王林男1990-02-10計算機50
081103王燕女1989-10-06計算機50
081108林一帆男1989-08-05計算機52已提前修完一門課081202王林男1989-01-29通信工程40有一門課不及格,待補考081204馬琳琳女1989-02-10通信工程42
課
程
號課
程
名開課學期學
時學
分0101計算機基礎18050102程序設計與語言26840206離散數學4684學
號課
程
號成
績學
號課
程
號成
績08110110180081108101850811011027808110810264081101206760811082068708110310162081202101650811031027008120410191表1.3“成績”表表1.2“課程”表表1.1“學生”表1.1
數據庫基本概念表格中的一行稱為一個記錄,一列稱為一個字段,每列的標題稱為字段名。關系表的結構:關系表名(字段名1,…,字段名n)學生關系模式:XSB(學號,姓名,性別,出生時間,專業,總學分,備注)。課程關系模式:KCB(課程號,課程名,開課學期,學時,學分)。成績關系模式:CJB(學號,課程號,成績,學分)。1.1
數據庫基本概念3.數據庫管理系統數據庫管理系統(DBMS)是管理數據庫的系統,它按一定的數據模型組織數據。提供如下功能:定義數據庫中的對象對數據庫包含對象進行操作保證輸入的數據滿足相應的約束條件保證只有具有權限的用戶才能訪問數據庫中的數據、使多個應用程序可在同一時刻訪問數據庫的數據、數據庫備份和恢復功能、能夠在網絡環境下訪問數據庫的功能和數據庫信息的接口和工具。數據庫系統管理員(DBA):通過DBMS提供的工具對數據庫進行管理。數據庫應用程序:通過DBMS的數據庫的接口編寫操作數據庫。1.1
數據庫基本概念4.關系型數據庫語言SQL(StructuredQueryLanguage,結構化查詢語言)是用于關系數據庫查詢的結構化語言。SQL的功能:數據查詢、數據操縱、數據定義和數據控制4部分。DBA可通過DBMS發送SQL命令,命令執行結果在DBMS界面上顯示。用戶通過應用程序界面表達如何操作數據庫,應用程序把其轉換為SQL命令發送給DBMS,再將操作結果在應用程序界面顯示出來。1.1
數據庫基本概念5.數據庫系統數據、數據庫、數據庫管理系統與操作數據庫的應用程序,加上支撐它們的硬件平臺、軟件平臺和與數據庫有關的人員一起構成了一個完整的數據庫系統。1.2MySQL數據庫1.2.1概述MySQL是一個小型關系數據庫管理系統,開發者為瑞典MySQLAB公司。網站構架方式是LAMP(Linux+Apache+MySQL+PHP):即使用Linux作為操作系統;Apache作Web服務器;MySQL作為數據庫DBMS;PHP作服務器端腳本解釋器。因這4款軟件都遵循GPL開放源碼授權,故使用這種組合的解決方案不用花一分錢就可以建立起一個穩定、免費的網站系統。1.2.2安裝運行1.MySQL下載安裝(1)雙擊會彈出歡迎窗口,單擊“InstallMySQLProducts”文字鏈接,會彈出“LicenseAgreement”窗口,該窗口列出即用戶許可協議。選中“Iacceptthelicenseterms”復選框,然后單擊“Next”按鈕。(2)進入安裝類型(ChoosingaSetupType)選擇界面。1.2.2安裝運行(3)系統進入“SelectProductsandFeatures”(選擇安裝項目)窗口。1.2.2安裝運行(4)“Installation”窗口列出用戶在上一個窗口選擇的安裝項目,選擇“Back”按鈕可返回上一個窗口重新選擇,按“Next”按鈕進入下一個窗口。(5)系統開始安裝程序并會彈出如圖窗口。1.2.2安裝運行2.MySQL服務器配置(1)進入服務器配置窗口(ProductConfiguration),單擊“Next”按鈕,出現第一個配置窗口(TypeandNetworking-ServerConfigurationType),配置MySQL服務器運行的參數。1.2.2安裝運行其中:ConfigType下拉列表項用來配置當前服務器的類型。可以選擇:DevelopmentMachine(開發者機器):使用最少的系統資源。ServerMachine(服務器):使用適當比例的系統資源。DedicatedMySQLServerMachine(專用MySQL服務器):配置所有可用系統資源。
作為初學者,選擇“DevelopmentMachine”。Connectivity下包含連接MySQL的參數。
啟用TCP/IP網絡;默認端口為3306(該端口號必須沒有被占用);
打開通過網絡存取數據庫防火墻功能。
不選命名管道和共享內存功能。高級配置。選擇“ShowAdvancedOptions”可打開選項。對于初學者默認配置即可。單擊“Next”按鈕進入下一個窗口。1.2.2安裝運行(2)系統顯示“AccountsandRoles”窗口,配置root賬戶和角色root用戶的密碼,在MySQLRootPassword(輸入新密碼)
RepeatPassword(確認密碼)密碼:njnu123456。AddUser:創建新的用戶,設置有關角色。1.2.2安裝運行(3)系統顯示WindowsService窗口,配置作為Windows程序運行參數。1.2.2安裝運行(4)配置插件連接MySQL數據庫參數:包含協議、文檔、端口號和是否打開防火墻。1.2.2安裝運行(5)ApplyServerConfogtion:應用服務配置過程窗口1.2.2安裝運行(6)系統顯示“ProductConfiguration”窗口,其中顯示“MySQLServer”配置已經完成,系統開始配置“SamplesandExmples”。(7)系統顯示“ConnectToServer”連接到MySQL服務器窗口。1.2.2安裝運行3.MySQL數據庫試運行為了驗證上述的安裝和配置是否成功,先來運行MySQL數據庫。(1)啟動MySQL服務安裝配置完成后,打開Windows任務管理器,可以看到MySQL服務進程mysqld.exe已經啟動了。使用MySQL之前,必須確保進程mysqld.exe已經啟動。在Windows管理器中啟動,或者進入MySQL安裝目錄C:\ProgramFiles(x86)\MySQL\MySQLServer5.7\bin(讀者請進入自己安裝MySQL的bin目錄),雙擊mysqld.exe即可。
1.2.2安裝運行(2)登錄MySQL數據庫進入Windows命令行,輸入:C:\...>cdC:\ProgramFiles(x86)\MySQL\MySQLServer5.7\bin進入MySQL可執行程序目錄,再輸入:C:\ProgramFiles\MySQL\MySQLServer5.7\bin>mysql-uroot-p按“Enter”后,輸入密碼(讀者請用之前安裝時自己設置的密碼):Enterpassword:njnu1234561.2.2安裝運行(3)設置MySQL字符集為了讓MySQL數據庫能夠支持中文,必須設置系統字符集編碼。輸入命令:showvariableslike‘char%’;可查看當前聯接系統的參數。1.2.2安裝運行然后輸入:setcharacter_set_database=’gbk’;setcharacter_set_server=‘gbk’;將數據庫和服務器的字符集均設為gbk(中文)。最后輸入命令:status;1.2.2安裝運行(4)定義初學者,為了在操作MySQL由于不同操作系統默認的權限差異不能使用有些功能,建議進行設置操作權限。輸入命令:usemysql;grantallprivilegeson*.*to‘root’@’%’identifiedby‘njnu123456’withgrantoption;flushprivileges;1.2.3命令初步1.創建、查看數據庫(1)查看系統數據庫查看MySQL系統的已有的數據庫,輸入命令:showdatabases;系統會列出已有的數據庫3個。information_schema、mysql和performance_schema,它們都是MySQL安裝時系統自動創建的,MySQL把有關DBMS自身的管理信息都保存在這幾個數據庫中。如果安裝時選擇安裝實例數據庫,則系統還有另外2個實例數據庫sakila和world。1.2.3命令初步(2)創建用戶數據庫在mysql>提示符后輸入“CREATEDATABASE”(大小寫不限)語句:createdatabasemytest;創建了一個用于測試的數據庫mytest;使用showdatabases語句查看一下,執行結果列表中多了一項mytest,就是用戶剛剛創建的數據庫。1.2.3命令初步數據庫創建后,在安裝MySQL時確定的數據庫數據文件制定路徑下就會產生以數據庫名作為目錄名的目錄。在該目錄下生成的一個“db.opt”文件,在該文件中記錄了數據庫的特征信息。1.2.3命令初步2.在數據庫中創建表(1)切換當前數據庫usemytestUSE為少數幾個不需要終結符(;)的語句之一,當然,加上終結符也不會出錯。1.2.3命令初步(2)創建表createtable
user(idintauto_incrementnotnullprimarykey,
usernamevarchar(10)notnull,
passwordvarchar(10)notnull);其中:user表包含id、username和password列。id列標志字段,整型(int),字段數據系統增一(auto_increment),并將其設置為主鍵(primarykey);username和password列分別存放不超過10個字符(varchar(10))用戶名和密碼,記錄中這三個字段不允許空(notnull)。1.2.3命令初步數據庫中創建了一個表,在該數據庫目錄下就會生成主文件名為表名的2個文件。1.2.3命令初步(3)查看表信息現在來檢驗一下mytest數據庫中是否創建了user表。在命令行輸入:showtables;系統顯示數據庫中已經有了一個user表describeuser;還可詳細查看user表的結構、字段類型等信息。1.2.3命令初步3.向表中加入記錄通常,用INSERT語句向表中插入記錄。例如:insertinto
user
values(1,'Tom','19941216');insertintouservalues(2,'周何駿','19960925');VALUES表必須包含表中每一列的值,并且按表中列的存放次序給出。在MySQL中,字符串串值需要用單引號或雙引號括起來。select*fromuser;可使用DROPDATABASE命令刪除用戶自己創建的數據庫:dropdatabasemytest;1.2.3命令初步4.MySQL命令說明(1)在描述命令格式時,用[]表示可選項。(2)MySQL命令不區分大小寫,但本書為了讀者閱讀方便,在本書描述命令格式和命令實例時,命令關鍵字用大寫表示,其他用小寫表示。但在實際對MySQL操作時為了避免大小寫頻繁切換,一般都用小寫。(3)命令關鍵字可以只寫前面4個字符。describeuser;與descruser;效果是一樣的。1.2.3命令初步(4)修改命令結束符號在MySQL中,服務器處理語句的時候是以分號為結束標志的。使用DELIMITER命令將MySQL語句的結束標志修改為其他符號。例如,將MySQL結束符修改為兩個斜杠“/”符號。DELIMITER//說明:執行完這條命令后,程序結束的標志就換為雙斜杠符號“//”了。要想恢復使用分號“;”作為結束符,運行下面命令即可:OPDELIMITER;1.3MySQL常用界面工具1.圖形化客戶端這類工具采用C/S架構,用戶通過安裝在桌面計算機上的客戶端軟件連接并操作后臺的MySQL數據庫,客戶端是圖形化用戶界面(GUI)。
除了MySQL官方提供的管理工具MySQLAdministrator和MySQLWorkbench,還有很多第三方開發的優秀工具,比較著名的有:Navicat、SequelPro、HeidiSQL、SQLMaestroMySQLToolsFamily、SQLWave、dbForgeStudio、DBToolsManager、MyDBStudio、AquaDataStudio、SQLyog、MYSQLFront和SQLBuddy等。1.3MySQL常用界面工具2.基于Web的管理工具這類工具采用B/S架構,用戶計算機上無須再安裝客戶端,管理工具運行于Web服務器上。第2章MySQL數據庫和表2.1MySQL數據庫
2.2MySQL表
2.3表記錄的操作
2.1MySQL數據庫
2.1.1創建數據庫使用CREATEDATABASE或CREATESCHEMA命令可以創建數據庫。語法格式:CREATE[IFNOTEXISTS]數據庫名[DEFAULT]CHARACTERSET字符集|[DEFAULT]COLLATE校對規則名其中:IFNOTEXISTS:在創建數據庫前進行判斷,只有該數據庫目前尚不存在時才執行CREATEDATABASE操作。用此選項可以避免出現數據庫已經存在而再新建的錯誤。CHARACTERSET:指定數據庫字符采用的默認字符集。COLLATE:指定字符集的校對規則。2.1.1創建數據庫【例2.1】創建學生成績數據庫,數據庫名稱xscj。mysql>createdatabasexscj使用IFNOTEXISTS選項從句可不顯示錯誤信息。創建了數據庫之后使用USE命令可指定當前數據庫。USE數據庫名;例如:指定當前數據庫為學生成績數據庫(xscj)。mysql>usexscj注意:在MySQL中,每一條SQL語句都以“;”作為結束標志。2.1.2修改數據庫數據庫創建后,如果需要修改數據庫的參數,可以使用ALTERDATABASE命令。【例2.2】修改學生成績數據庫(xscj)默認字符集和校對規則。2.1.3刪除數據庫已經創建的數據庫需要刪除,使用DROPDATABASE命令。語法格式:DROPDATABASE[IFEXISTS]數據庫名還可以使用IFEXISTS子句,避免刪除不存在的數據庫時出現MySQL錯誤信息。注意:這個命令必須小心使用,因為它將刪除指定的整個數據庫,該數據庫的所有表(包括其中的數據)也將永久刪除。2.2MySQL表
2.2.1創建表1.全新創建從頭創建一個全新的表,使用CREATETABLE命令。語法格式:CREATETABLE[IFNOTEXISTS]表名(
[列定義]...
|[表索引定義])[表選項][select語句];說明:列定義:包括列名、數據類型,可能還有一個空值聲明和一個完整性約束。表索引項定義:主要定義表的索引、主鍵、外鍵等,具體定義將在第5章中討論。select語句:用于在一個已有表的基礎上創建表。2.2.1創建表【例2.3】在學生成績數據庫(xscj)中也創建一個學生情況表,表名xs。(1)輸入以下命令:usexscjcreatetablexs(學號 char(6) notnullprimarykey,姓名 char(8) notnull,專業名 char(10) null,性別 tinyint(1) notnulldefault1,出生日期 date notnull,總學分 tinyint(1)null,照片 blob null,備注 text null);2.2.1創建表其中:“學號”列:字符型,長度6,不能為空,為本表主鍵(主碼)。“姓名”列:字符型,長度8,不能為空。“專業名”列:字符型,長度10,可空。“性別”列:短整型,1個字節,不能為空,默認值為1。“出生日期”列:日期型,不能為空。“總學分”列:短整型,1個字節,可空。“照片”列:二進制型,可空。“備注”列:文本型,可空。2.2.1創建表(2)用showtables命令顯示xscj數據庫中產生了學生(xs)表,用describexs命令可以顯示xs表的結構。2.2.1創建表2.復制現成的表語法格式:CREATETABLE[IFNOTEXISTS]表名[LIKE已有表名]|[AS(復制表記錄)];LIKE關鍵字后面表名應該已經存在。AS后為可以復制表的內容。例如,可以是一條SELECT語句,SELECT語句為查詢表記錄。注意,索引和完整性約束是不會復制的。2.2.1創建表【例2.4】在mytest數據庫中,用復制的方式創建一個名為user_copy1的表,表結構直接取自user表;另再創建一個名為user_copy2的表,其結構和內容(數據)都取自user表。usemytestcreatetableuser_copy1likeuser;createtableuser_copy2as(select*fromuser);2.2.1創建表查詢user_copy1表中沒有記錄,而user_copy2表中包含user表中所有記錄。2.2.2修改表1.修改表結構ALTERTABLE用于更改原有表的結構。例如,可以增加(刪減)列、創建(取消)索引、更改原有列的類型、重新命名列或表,還可以更改表的評注和表的類型。語法格式:ALTERTABLE表名
ADD列定義 [FIRST|AFTER列名]|
MODIFY列定義|
ALTER列名{SETDEFAULT值|DROPDEFAULT}|
CHANGE列名原列名|
DROP列名|
RENAME[TO]新表名2.2.2修改表說明:ADD子句:向表中增加新列。通過FIRST|AFTER列名指定增加列的位置,否則加在最后一列。例如,在表user中增加新的一列“班級號”:usermytestaltertableuseraddcolumn班級號tinyint(1)null;MODIFY子句:修改指定列的數據類型。例如:altertableusermodify班級號bigintnotnull;注意,若表中該列所存數據的數據類型與將要修改的列的類型沖突,則發生錯誤。例如,原來char類型的列要修改成int類型,而原來列值中有字符型數據,則無法修改。
ALTER子句:修改表中指定列的默認值,或者刪除列默認值。CHANGE子句:修改列的名稱。DROP子句:刪除列或約束。2.2.2修改表【例2.5】在xscj數據庫的xs表中,增加“獎學金等級”一列,并將表中的“姓名”列刪除。userxscjaltertablexsadd獎學金等級tinyintnull,dropcolumn班級號;2.2.2修改表2.更改表名語法格式:RENAMETABLE老表名TO新表名...【例2.6】將mytest數據庫user_copy1表重命名為user1,user_copy2表重命名為user2。renametableuser_copy1touser1,user_copy2touser2;altertableuser2renametouserb;2.2.3刪除表需要刪除一個表時可以使用DROPTABLE語句。語法格式:DROPTABLE[IFEXISTS]表名...這個命令將表的描述、表的完整性約束、索引及和表相關的權限等一并刪除。【例2.7】刪除表uesrb。droptableifexistsuserb;2.3表記錄的操作
2.3.1插入記錄1.插入新記錄語法格式:INSERT[INTO]表名[(列名,...)]VALUES({expr|DEFAULT},...)|SET列名={expr|DEFAULT},...說明:列名:需要插入數據的列名。如果要給全部列插入數據,列名可以省略。VALUES子句:包含各列需要插入的數據清單,數據的順序要與列的順序相對應。若沒有給出列名,則在VALUES子句中要給出每一列的值。如果列值為空,則值必須置為NULL,否則會出錯。SET子句:SET子句用于給列指定值。要插入數據的列名在SET子句中指定,等號后面為指定數據。未指定的列,列值為默認值。2.3.1插入記錄【例2.8】向學生成績數據庫(xscj)的表xs(表中列包括學號、姓名、專業名、性別、出生日期、總學分、照片、備注)中插入如下一行:081101,王林,計算機,1,1994-02-10,50,NULL,NULL使用下列語句:usexscjinsertintoxsvalues('081101','王林','計算機',1,'1994-02-10',50,null,null);若表xs中專業的默認值為“計算機”,照片、備注默認值為NULL,插入上例那行數據也可以使用如下命令:insertintoxs(學號,姓名,性別,出生日期,總學分)values('081101','王林',1,'1994-02-10',50);也與下面這個命令的效果相同:insertintoxsvalues('081101','王林',default,1,'1994-02-10',50,null,null);2.3.1插入記錄SET子句來實現:insertintoxsset學號='081101',姓名='王林',專業=default,性別=1,出生日期='1994-02-10',總學分=50;執行結果:2.3.1插入記錄2.從已有表中插入新記錄INSERT[INTO]表名[(列名,...)]SELECT語句SELECT語句中返回的是一個查詢到的結果集,INSERT語句將這個結果集插入到指定表中,但結果集中每行數據的字段數、字段的數據類型要與被操作的表完全一致。2.3.1插入記錄【例2.9】將mytest數據庫user表記錄插入到user1表中。usermytestinsertintouser1select*fromuser;命令執行前后的效果。
2.3.1插入記錄3.插入圖片MySQL還支持圖片的插入,圖片一般可以以路徑的形式來存儲,即插入圖片可以采用插入圖片的存儲路徑的方式。也可以直接插入圖片本身,只要用LOAD_FILE函數即可。【例2.10】向xs表中插入一行記錄:081102,程明,計算機,1,1995-02-01,50,picture.jpg,NULL其中,照片路徑為D:\IMAGE\picture.jpg。使用如下語句:insertintoxsvalues('081102','程明','計算機',1,'1995-02-01',50,'D:\IMAGE\picture.jpg',null);2.3.1插入記錄也可使用這個語句直接存儲圖片本身:insertintoxsvalues('081102','程明','計算機',1,'1995-02-01',50,load_file('D:\IMAGE\picture.jpg'),null);執行結果為:2.3.2修改記錄1.替換舊記錄REPLACE語句可以在插入數據之前將與新記錄沖突的舊記錄刪除,從而使新記錄能夠替換舊記錄,正常插入。REPLACE語句格式與INSERT相同。【例2.11】若上例中的記錄行已經插入,其中學號為主鍵(PRIMARYKEY),現在想再插入下列一行記錄:081101,劉華,通信工程,1,1995-03-08,48,NULL,NULL若直接使用INSERT語句,會產生如下錯誤:使用REPLACE語句,則可以成功插入:2.3.2修改記錄2.修改單個表語法格式:UPDATE[LOW_PRIORITY][IGNORE]表名SET列名1=expr1[,列名2=expr2...][WHERE條件]說明:若語句中不設定WHERE子句,則更新所有行。列名1、列名2…為要修改列,列值為expr,expr可以是常量、變量,列名或表達式。可以同時修改所在數據行的多個列值,中間用逗號隔開。WHERE子句:指定的刪除記錄條件。如果省略WHERE子句則刪除該表的所有行。2.3.2修改記錄【例2.12】將學生成績數據庫(xscj)的學生(xs)表中的所有學生的總學分都增加10。將姓名為“劉華”的同學的備注填寫為“輔修計算機專業”,學號改為“081250”。updatexsset總學分=總學分+10;updatexsset學號='081250',備注='輔修計算機專業'where姓名='劉華';select學號,姓名,總學分,備注fromxs;執行結果為:2.3.2修改記錄3.修改多個表語法格式:UPDATE表名,表名...SET列名1=expr1[,列名2=expr2...][WHERE條件]【例2.13】mytest數據庫表user和表user2中都有兩個字段idint(11),passwordvarchar(10),其中id為主鍵。當表user中id值與user2中id值相同時,將表user中對應的password值修改為“11111111”,將表user2中對應的password值改為“22222222”。usermytestupdateuser,user2setuser.password='11111111',user2.password='22222222'whereuser.id=user2.id;修改后的結果:2.3.3刪除記錄1.刪除滿足條件的行使用DELETE語句刪除表中滿足條件的記錄行。從單個表中刪除,語法格式:DELETEFROM表名[WHERE條件]說明:FROM子句:用于說明從何處刪除數據,表名為要刪除數據的表名。WHERE子句:指定的刪除記錄條件。如果省略WHERE子句則刪除該表的所有行。2.3.3刪除記錄【例2.14】刪除mytest數據庫中user2表“周何駿”記錄刪除。usemytestdeletefrompersonwhereusername='周何駿';或者deletefromxswhereid=2;2.3.3刪除記錄2.從多個表中刪除行語法格式如下:DELETE[LOW_PRIORITY][QUICK][IGNORE]表名[.*][,表名[.*]...]FROMtable_references[WHEREwhere_definition]或:DELETE[LOW_PRIORITY][QUICK][IGNORE] FROM表名[.*][,表名[.*]...] USINGtable_references [WHEREwhere_definition]2.3.3刪除記錄【例2.15】刪除user1中id值等于user的id值的所有行和user2中id值等于user的id值的所有行,使用如下語句:DELETEuser1,user2FROMuser1,user2,userWHEREuser1.id=user.idANDuser2.id=user.id;命令執行結果:2.3.3刪除記錄3.清除表數據使用TRUNCATETABLE語句將刪除指定表中的所有數據,因此也稱其為清除表數據語句,其語法格式如下:TRUNCATETABLE表名說明:由于TRUNCATETABLE語句將刪除表中的所有數據,且無法恢復,因此使用時必須十分小心!第3章MySQL查詢和視圖3.1MySQL數據庫查詢3.2MySQL視圖
3.1MySQL數據庫查詢SELECT語句可以從一個或多個表中選取符合某種條件的特定的行和列,結果通常是生成一個臨時表。下面介紹SELECT語句,它是SQL的核心。語法格式如下:SELECT[ALL|DISTINCT|DISTINCTROW]列...[FROM表...] [WHERE條件] [GROUPBY{列名|表達式|position}[ASC|DESC],...][HAVING條件] [ORDERBY{列名|表達式|position}[ASC|DESC],...][PROCEDURE存儲過程名(參數...)][INTOOUTFILE'文件名'[CHARACTERSET字符集]export_options|INTODUMPFILE'文件名'|INTO變量名...][FORUPDATE|LOCKINSHAREMODE]]3.1.1選擇輸出列1.選擇指定的列使用SELECT語句選擇一個表中的某些列,各列名之間要以逗號分隔,所有列用“*”表示。SELECT*|列名,列名,...from表名【例3.1】查詢xscj數據庫的xs表中各個同學的姓名、專業名和總學分。usexscjselect姓名,專業名,總學分fromxs;3.1.1選擇輸出列2.定義列別名當希望查詢結果中的列顯示時使用自己選擇的列標題,可以在列名之后使用AS子句。SELECT...列名[AS列別名]【例3.2】查詢xs表中計算機專業同學的學號、姓名和總學分,結果中各列的標題分別指定為number、name和mark。select學號asnumber,姓名asname,總學分asmarkfromxswhere專業名='計算機';執行結果:3.1.1選擇輸出列注意:當自定義的列標題中含有空格時,必須使用引號將標題括起來。例如:select學號as'studentnumber',姓名as'studentname',總學分asmarkfromxswhere專業名='計算機';說明:不允許在WHERE子句中使用列別名。這是因為執行WHERE代碼時,可能尚未確定列值。例如,這個查詢是非法的:select性別assexfromxswheresex=0;3.1.1選擇輸出列3.替換查詢結果中的數據要替換查詢結果中的數據,則要使用查詢中的CASE表達式,格式為:CASEWHEN條件1
THEN表達式1WHEN條件2THEN表達式2...ELSE表達式nEND3.1.1選擇輸出列【例3.3】查詢xs表中計算機專業各同學的學號、姓名和總學分,對總學分按如下規則進行替換:若總學分為空值,替換為“尚未選課”;若總學分小于50,替換為“不及格”;若總學分在50~52之間,替換為“合格”;若總學分大于52,替換為“優秀”。總學分列的標題更改為“等級”。select學號,姓名,casewhen總學分isnullthen'尚未選課'when總學分<50then'不及格'when總學分>=50and總學分<=52then'合格'else'優秀'endas等級fromxswhere專業名='計算機';執行結果如右圖所示。
3.1.1選擇輸出列4.計算列值SELECT的輸出列可使用表達式:SELECT表達式...【例3.4】按120分制重新計算成績,顯示xs_kc表中學號為081101的學生成績信息。select學號,課程號,成績*1.20as成績120fromxs_kcwhere學號='081101';執行結果如圖所示。
3.1.1選擇輸出列5.消除結果集中的重復行可以使用DISTINCT或DISTINCTROW關鍵字消除結果集中的重復行。SELECTDISTINCT|DISTINCTROW列名...【例3.5】對xscj數據庫的xs表只選擇專業名和總學分,消除結果集中的重復行。
selectdistinct專業名,總學分fromxs;執行結果如圖所示。3.1.1選擇輸出列6.聚合函數SELECT的輸出列還可以包含所謂的聚合函數。聚合函數常常用于對一組值進行計算,然后返回單個值。除COUNT函數外,聚合函數都會忽略空值。函
數
名說
明COUNT求組中項數,返回int類型整數MAX求最大值MIN求最小值SUM返回表達式中所有值的和AVG求組中值的平均值STD或STDDEV返回給定表達式中所有值的標準差VARIANCE返回給定表達式中所有值的方差GROUP_CONCAT返回由屬于一組的列值連接組合而成的結果BIT_AND邏輯或BIT_OR邏輯與BIT_XOR邏輯異或3.1.1選擇輸出列(1)COUNT函數COUNT函數用于統計組中滿足條件的行數或總行數,返回SELECT語句檢索到的行中非NULL值的數目,若找不到匹配的行,則返回0。語法格式:COUNT({[ALL|DISTINCT]表達式}|*)其中,表達式的數據類型可以是除BLOB或TEXT之外的任何類型。ALL表示對所有值進行運算,DISTINCT表示去除重復值,默認為ALL。使用COUNT(*)時將返回檢索行的總數目,不論其是否包含NULL值。3.1.1選擇輸出列【例3.6】求學生的總人數。
selectcount(*)as'學生總數'fromxs;執行結果如圖所示。【例3.7】統計備注不為空的學生數目。
selectcount(備注)as'備注不為空的學生數目'fromxs;執行結果如圖所示。注意:這里COUNT(備注)計算時備注為NULL的行被忽略,所以這里是7而不是22。3.1.1選擇輸出列【例3.8】統計總學分在50分以上的人數。selectcount(總學分)as'總學分50分以上的人數'
fromxswhere總學分>50;執行結果如圖所示。3.1.1選擇輸出列(2)MAX和MINMAX和MIN分別用于求表達式中所有值項的最大值與最小值,語法格式為:MAX/MIN([ALL|DISTINCT]表達式)【例3.9】求選修101課程的學生的最高分和最低分。selectmax(成績),min(成績)
fromxs_kcwhere課程號='101';執行結果如圖所示。注意:當給定列上只有空值或檢索出的中間結果為空時,MAX和MIN函數的值也為空。3.1.1選擇輸出列(3)SUM函數和AVG函數SUM和AVG分別用于求表達式中所有值項的總和與平均值,語法格式為:SUM/AVG([ALL|DISTINCT]表達式)【例3.10】求學號081101的學生所學課程的總成績。selectsum(成績)as'課程總成績'
fromxs_kcwhere學號='081101';執行結果如圖所示。【例3.11】求選修101課程的學生的平均成績。selectavg(成績)as'課程101平均成績'
fromxs_kcwhere課程號='101';執行結果如圖所示。3.1.1選擇輸出列(4)VARIANCE和STDDEV(STD)函數VARIANCE和STDDEV函數分別用于計算特定的表達式中的所有值的方差和標準差。語法格式:VARIANCE/STDDEV([ALL|DISTINCT]表達式)【例3.12】求選修101課程的成績的方差。selectvariance(成績)
fromxs_kc where課程號='101';執行結果如圖所示。3.1.1選擇輸出列說明:方差的計算按以下幾個步驟進行。①計算相關列的平均值;②求列中的每一個值和平均值的差;③計算差值的平方的總和;④用總和除以(列中的)值的個數得結果。STDDEV函數用于計算標準差。標準差等于方差的平均根。所以,STDDEV(…)和SQRT(VARIANCE(…))這兩個表達式是相等的。3.1.1選擇輸出列【例3.13】求選修101課程的成績的標準差。selectstddev(成績)
fromxs_kc where課程號='101';執行結果如右圖所示。stddev可以縮寫為std,這對結果沒有影響。3.1.1選擇輸出列(5)GROUP_CONCAT函數MySQL支持一個特殊的聚合函數GROUP_CONCAT。該函數返回來自一個組指定列的所有非NULL值,這些值一個接著一個放置,中間用逗號隔開,并表示為一個長長的字符串。這個字符串的長度是有限制的,標準值是1024。語法格式:GROUP_CONCAT({[ALL|DISTINCT]表達式}|*)【例3.14】求選修了206課程的學生的學號。selectgroup_concat(學號) fromxs_kc where課程號='206';執行結果為:3.1.1選擇輸出列(6)BIT_AND、BIT_OR和BIT_XOR與二進制運算符|(或)、&(與)和^(異或)相對應的聚合函數也存在,分別是BIT_OR、BIT_AND、BIT_XOR。語法格式:BIT_AND|BIT_OR|BIT_XOR({[ALL|DISTINCT]表達式}|*)【例3.15】有一個表bits,其中有一列bin_value上有3個INTEGER值:1、3、7,獲取在該列上執行BIT_OR的結果,使用如下語句:selectbin(bit_or(bin_value))frombits;3.1.2數據來源:FROM子句1.引用一個表可以用兩種方式引用表:第一種方式是使用USE語句讓一個數據庫成為當前數據庫,FROM子句中指定表名應該屬于當前數據庫。第二種方式是指定表名前帶上表所屬數據庫的名字。例如,假設當前數據庫是db1,現在要顯示數據庫db2里的表tb的內容,使用如下語句:SELECT*FROMdb2.tb;3.1.2數據來源:FROM子句2.多表連接如果要在不同表中查詢數據,則必須在FROM子句中指定多個表,這時就要使用到連接。將不同列的數據組合到一個表中叫做表的連接。連接的方式有以下兩種。(1)全連接將各個表用逗號分隔,就指定了一個全連接。FROM子句產生的中間結果是一個新表,新表是每個表的每行都與其他表中的每行交叉以產生所有可能的組合。這種連接方式為可能得到的行數為每個表行數之積!使用WHERE子句設定條件將結果集減少為易于管理的大小,即為等值連接。【例3.16】查找xscj數據庫中所有學生選過的課程名和課程號。使用如下語句:selectdistinctkc.課程名,xs_kc.課程號
fromkc,xs_kcwherekc.課程號=xs_kc.課程號;執行結果如圖所示。3.1.2數據來源:FROM子句(2)JOIN連接語法格式:JOIN表ON連接條件。使用JOIN關鍵字的連接主要分為三種:①
內連接。指定了INNER關鍵字的連接是內連接。【例3.17】查找xscj數據庫中所有學生選過的課程名和課程號。可以使用以下語句:selectdistinct課程名,xs_kc.課程號
fromkcinnerjoinxs_kcon(kc.課程號=xs_kc.課程號);它的功能合并兩個表,返回滿足條件的行。內連接是系統默認的,可以省略INNER關鍵字。使用內連接后,FROM子句中ON條件主要用來連接表。【例3.18】查找選修了206課程且成績在80分以上的學生姓名及成績。
select姓名,成績fromxsjoinxs_kconxs.學號=xs_kc.學號
where課程號='206'and成績>=80;執行結果如圖所示。3.1.2數據來源:FROM子句【例3.19】查找選修了“計算機基礎”課程且成績在80分以上的學生學號、姓名、課程名及成績。selectxs.學號,姓名,課程名,成績fromxsjoinxs_kconxs.學號=xs_kc.學號joinkconxs_kc.課程號=kc.課程號where課程名='計算機基礎'and成績>=80;執行結果如下:3.1.2數據來源:FROM子句【例3.20】查找xscj數據庫中課程不同、成績相同的學生的學號、課程號和成績。selecta.學號,a.課程號,b.課程號,a.成績fromxs_kcasajoinxs_kcasbona.成績=b.成績anda.學號=b.學號anda.課程號!=b.課程號;執行結果如右圖所示。
如果要連接的表中有列名相同,并且連接的條件就是列名相等,那么ON條件也可以換成USING子句。USING(兩表中相同的列名)子句用于為一系列的列進行命名。【例3.21】查找kc表中所有學生選過的課程名。select課程名fromkcinnerjoinxs_kcusing(課程號);說明:查詢的結果為xs_kc表中所有出現的課程號對應的課程名。3.1.2數據來源:FROM子句②外連接。指定了OUTER關鍵字的連接為外連接,其中的OUTER關鍵字均可省略。外連接包括:左外連接(LEFTOUTERJOIN):結果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對于這樣的行,從右表被選擇的列設置為NULL。右外連接(RIGHTOUTERJOIN):結果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對于這樣的行,從左表被選擇的列設置為NULL。自然連接(NATURALJOIN):自然連接還有自然左外連接(NATURALLEFTOUTERJOIN)和自然右外連接(NATURALRIGHTOUTERJOIN)。NATURALJOIN的語義定義與使用了ON條件的INNERJOIN相同。3.1.2數據來源:FROM子句【例3.22】查找所有學生情況及他們選修的課程號,若學生未選修任何課,也要包括其情況。selectxs.*,課程號fromxsleftouterjoinxs_kconxs.學號=xs_kc.學號;說明:本例結果中返回的行中有未選任何課程的學生信息,相應行的課程號字段值為NULL。【例3.23】查找被選修了的課程的選修情況和所有開設的課程名。selectxs_kc.*,課程名fromxs_kcrightjoinkconxs_kc.課程號=kc.課程號;結果顯示如下:3.1.2數據來源:FROM子句
【例3.24】使用自然連接查詢xscj數據庫中所有學生選過的課程名和課程號。。select課程名,課程號fromkc where課程號in (selectdistinct課程號fromkcnaturalrightouterjoinxs_kc);說明:SELECT語句中只選取一個用來連接表的列時,可以使用自然連接代替內連接。用這種方法,可以用自然左外連接來替換左外連接,自然右外連接替換右外連接。3.1.2數據來源:FROM子句③交叉連接。指定了CROSSJOIN關鍵字的連接是交叉連接。在不包含連接條件時,交叉連接結果表是由第一個表的每行與第二個表的每一行拼接后形成的表,因此結果表的行數等于兩個表行數之積。在MySQL中,CROSSJOIN語法上與INNERJOIN等同,兩者可以互換。【例3.25】列出學生所有可能的選課情況。select學號,姓名,課程號,課程名fromxscrossjoinkc;另外,STRAIGHT_JOIN連接用法和INNERJOIN連接基本相同。不同的是,STRAIGHT_JOIN后不可以使用USING子句替代ON條件。【例3.26】使用STRAIGHT_JOIN連接查找xscj數據庫中所有學生選過的課程名和課程號。selectdistinct課程名,xs_kc.課程號fromkcstraight_joinxs_kcon(kc.課程號=xs_kc.課程號);3.1.3查詢條件:WHERE子句基本格式為:WHERE條件<條件>=:表達式<比較運算符>表達式 /*比較運算*/|邏輯表達式<邏輯運算符>邏輯表達式|表達式[NOT]LIKE表達式[ESCAPE'esc字符'] /*LIKE運算符*/ |表達式[NOT][REGEXP|RLIKE]表達式 /*REGEXP運算符*/ |表達式[NOT]BETWEEN表達式AND表達式 /*指定范圍*/ |表達式IS[NOT]NULL /*是否空值判斷*/ |表達式[NOT]IN(子查詢|表達式[,…n]) /*IN子句*/ |表達式<比較運算符>{ALL|SOME|ANY}(子查詢) /*比較子查詢*/ |EXIST(子查詢) /*EXIST子查詢*/WHERE子句會根據條件對FROM子句一行一行地進行判斷,當條件為TRUE的時候,一行就被包含到WHERE子句的中間結果中。3.1.3查詢條件:WHERE子句1.比較運算比較運算符用于比較兩個表達式值,當兩個表達式值均不為空值(NULL)時,比較運算返回邏輯值TRUE(真)或FALSE(假);而當兩個表達式值中有一個為空值或都為空值時,將返回UNKNOWN。MySQL支持的比較運算符有:=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)。【例3.27】查詢xscj數據庫xs表中學號為081101的學生的情況。select姓名,學號,總學分
fromxswhere學號='081101';執行結果如圖所示。3.1.3查詢條件:WHERE子句【例3.28】查詢xs表中總學分大于50分的學生的情況。select姓名,學號,出生日期,總學分fromxswhere總學分>50;執行結果如下圖所示。MySQL有一個特殊的等于運算符“<=>”,當兩個表達式彼此相等或都等于空值時,它的值為TRUE,其中有一個空值或都是非空值但不相等,這個條件就是FALSE。沒有UNKNOWN的情況。3.1.3查詢條件:WHERE子句【例3.29】查詢xs表中備注為空的同學的情況。select姓名,學號,出生日期,總學分fromxswhere備注<=>null;可以通過邏輯運算符(AND、OR、XOR和NOT)組成更為復雜的查詢條件。查詢xs表中專業為計算機,性別為女(0)的同學的情況。select姓名,學號,性別,總學分
fromxswhere專業名='計算機'and性別=0;執行結果如圖所示。3.1.3查詢條件:WHERE子句2.模式匹配(1)LIKE運算符LIKE運算符用于指出一個字符串是否與指定的字符串相匹配,其運算對象可以是char、varchar、text、datetime等類型的數據,返回邏輯值TRUE或FALSE。LIKE謂詞表達式的格式為:表達式[NOT]LIKE表達式[ESCAPE'esc字符']使用LIKE進行模式匹配時,常使用特殊符號_和%,可進行模糊查詢。“%”代表0個或多個字符,“_”代表單個字符。由于MySQL默認不區分大小寫,要區分大小寫時需要更換字符集的校對規則。【例3.30】查詢xscj數據庫xs表中姓“王”的學生學號、姓名及性別。select學號,姓名,性別
fromxswhere姓名like'王%';執行結果如圖所示。3.1.3查詢條件:WHERE子句【例3.31】查詢xscj數據庫xs表中,學號倒數第二個數字為0的學生的學號、姓名及專業名。select學號,姓名,專業名
fromxswhere學號like'%0_';執行結果如右圖所示。如果我們想要查找特殊符號中的一個或全部(_和%),必須使用一個轉義字符。【例3.32】查詢xs表中名字包含下畫線的學生學號和姓名。select學號,姓名fromxswhere學號like'%#_%'escape'#';3.1.3查詢條件:WHERE子句(2)REGEXP運算符REGEXP運算符用來執行更復雜的字符串比較運算。REGEXP是正則表達式的縮寫,但它不是SQL標準的一部分。REGEXP運算符的一個同義詞是RLIKE。語法格式:表達式[NOT][REGEXP|RLIKE]表達式REGEXP運算符特殊含義的符號見表3.2。特殊字符含
義特
殊
字
符含
義^匹配字符串的開始部分[abc]匹配方括號里出現的字符串abc$匹配字符串的結束部分[a-z]匹配方括號里出現的a~z之間的1個字符.匹配任何一個字符(包括回車和新行)[^a-z]匹配方括號里出現的不在a~z之間的1個字符*匹配星號之前的0個或多個字符任何序列|匹配符號左邊或右邊出現的字符串+匹配加號之前的1個或多個字符的任何序列[[..]]匹配方括號里出現的符號(如空格、換行、括號、句號、冒號、加號、連字符等)?匹配問號之前0個或多個字符[[:<:]和[[:>:]]匹配一個單詞的開始和結束{n}匹配括號前的內容出現n次的序列[[::]匹配方括號里出現的字符中的任意一個字符()匹配括號里的內容
3.1.3查詢條件:WHERE子句【例3.33】查詢姓李的同學的學號、姓名和專業名。select學號,姓名,專業名
fromxswhere姓名regexp'^李';執行結果如圖所示。【例3.34】查詢學號里包含4、5、6的學生學號、姓名和專業名。
select學號,姓名,專業名fromxswhere學號regexp'[4,5,6]';執行結果如圖所示。3.1.3查詢條件:WHERE子句【例3.35】查詢學號以08開頭,以08結尾的學生學號、姓名和專業名。select學號,姓名,專業名
fromxswhere學號regexp'^08.*08$';執行結果如圖所示。3.1.3查詢條件:WHERE子句3.范圍比較用于范圍比較的關鍵字有兩個:BETWEEN和IN。可以使用BETWEEN關鍵字指出查詢范圍:表達式[NOT]BETWEEN表達式1AND表達式2當不使用NOT時,若表達式的值在表達式1與2之間(包括這兩個值),則返回TRUE,否則返回FALSE;使用NOT時,返回值剛好相反。注意:表達式1的值不能大于表達式2的值。使用IN關鍵字可以指定一個值表,值表中列出所有可能的值。當與值表中的任一個匹配時,即返回TRUE,否則返回FALSE。表達式IN(表達式[,…n])3.1.3查詢條件:WHERE子句【例3.36】查詢xscj數據庫xs表中不在1993年出生的學生情況。select學號,姓名,專業名,出生日期fromxswhere出生日期notbetween'1993-1-1'and'1993-12-31';執行結果如下:3.1.3查詢條件:WHERE子句【例3.37】查詢xs表中專業名為“計算機”、“通信工程”或“無線電”的學生的情況。select*fromxswhere專業名in('計算機','通信工程','無線電');該語句與下句等價:select*fromxswhere專業名='計算機'or專業名='通信工程'or專業名='無線電';說明:IN關鍵字最主要的作用是表達子查詢。3.1.3查詢條件:WHERE子句4.空值比較當需要判定一個表達式的值是否為空值時,使用ISNULL關鍵字,格式為:表達式IS[NOT]NULL當不使用NOT時,若表達式表達式的值為空值,返回TRUE,否則返回FALSE;當使用NOT時,結果剛好相反。【例3.38】查詢xscj數據庫中總學分尚不定的學生情況。select*fromxswhere總學分isnull;本例即查找總學分為空的學生,結果為空。3.1.3查詢條件:WHERE子句5.子查詢在查詢條件中,可以使用另一個查詢的結果作為條件的一部分。例如,判定列值是否與某個查詢的結果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。SQL標準允許SELECT多層嵌套使用,用來表示復雜的查詢。(1)IN子查詢IN子查詢用于進行一個給定值是否在子查詢結果集中的判斷,格式為:表達式[NOT]IN(子查詢)當表達式與子查詢結果表中的某個值相等時,IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反。3.1.3查詢條件:WHERE子句【例3.39】查找在xscj數據庫中選修了課程號為206的課程的學生的姓名、學號。
select姓名,學號 fromxs where學號in (select學號 fromxs_kc where課程號='206' );執行結果如圖所示。3.1.3查詢條件:WHERE子句說明:在執行包含子查詢的SELECT語句時,系統先執行子查詢,產生一個結果表,再執行外查詢。本例中,先執行子查詢:select學號fromxs_kcwhere課程號='206';得到一個只含有學號列的表,xs_kc中的每個課程名列值為206的行在結果表中都有一行。再執行外查詢,若xs表中某行的學號列值等于子查詢結果表中的任一個值,則該行就被選擇。注意:IN子查詢只能返回一列數據。對于較復雜的查詢,可使用嵌套的子查詢。3.1.3查詢條件:WHERE子句【例3.40】查找未選修離散數學的學生的姓名、學號、專業名。select姓名,學號,專業名 fromxs
where學號notin ( select學號 fromxs_kc where課程號in (select課程號 fromkc where課程名='離散數學' ) );執行結果如圖所示。3.1.3查詢條件:WHERE子句(2)比較子查詢這種子查詢可以認為是IN子查詢的擴展,它使表達式的值與子查詢的結果進行比較運算,格式為:表達式{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 202520加盟連鎖店合同協議樣本
- 2024年九月幼兒園駕駛員文明禮儀服務標準聘用協議
- 2025二手設備租賃合同范本
- oem啤酒合同樣本
- 二零二五工地門衛勞動合同范文
- 服裝店鋪轉讓協議范例二零二五年
- 電梯臨時使用協議書范文
- 付款保密協議合同樣本
- 預售商品房抵押合同二零二五年
- 二零二五版公租房承租資格確認
- 數字孿生機場數據融合-全面剖析
- (二模)咸陽市2025年高考模擬檢測(二)語文試卷(含答案)
- 第四單元 第2課時 三位數加三位數2(連續進位加法)(教學設計)-2024-2025學年三年級上冊數學人教版
- 融資部業績考核及獎勵辦法
- 2025-2030中國探地雷達行業發展分析及發展趨勢預測與投資價值研究報告
- 《中央八項規定精神學習教育》專項講座
- 2025年交管12123學法減分考試題庫及答案
- 環境政策協同效應-第1篇-深度研究
- 2024年福建省能源石化集團有限責任公司秋季校園招聘153人筆試參考題庫附帶答案詳解
- 勞務派遣勞務外包項目方案投標文件(技術方案)
- 棚戶區改造項目(EPC)方案投標文件(技術方案)
評論
0/150
提交評論