数据库数据查询汇总
前言
數(shù)據(jù)查詢
單表查詢
連接查詢
自身連接
內(nèi)連接
外連接
多表連接
嵌套查詢
集合查詢
數(shù)據(jù)更新
插入數(shù)據(jù)
修改數(shù)據(jù)
刪除數(shù)據(jù)
項目需求
前言
本篇博文主要是數(shù)據(jù)庫SQL語句的總結,其中會有一些經(jīng)常會忽略的小知識點。這里總結了數(shù)據(jù)查詢和數(shù)據(jù)更新,其中比較重要且有難度的是連接查詢和嵌套查詢。最后列出了我在項目中所遇到的問題,但是SQL語句并沒有做多少優(yōu)化。主要是想拿出來做個筆記,同時供大家學習和交流,若是有優(yōu)化的更好的SQL語句,可以在評論區(qū)給出。
?
數(shù)據(jù)查詢
數(shù)據(jù)查詢是數(shù)據(jù)庫的核心操作。SQL提供了SELECT語句進行數(shù)據(jù)查詢,該語句具有靈活的使用方式和豐富的功能。其一般格式為:
SELECT [ALL|DISTINCT] <目標列表達式>[,<目標列表達式>]... FROM <表名或視圖名> [,<表名或視圖名>...]|(<SELECT語句>)[AS]<別名> [WHERE <條件表達式>] [GROUP BY <列名1> [HAVING <條件表達式>]] [ORDER BY <列名2> [ASC|DESC]];整個SELECT語句的含義是,根據(jù)WHERE子句的條件表達式從FROM子句指定的基本表、視圖或派生表中找出滿足條件的元組,再按SELECT子句中的目標列表達式選出元組中的屬性值形成結果表。如果有GROUP BY子句,則將結果按<列名1>的均值進行分組,該屬性列值相等的元組為一個組。通常會在每組中作用聚集函數(shù)。如果GROUP BY子句帶HAVING短語,則只有滿足指定條件的組才予以輸出。如果有GROUP BY子句,則結果表還要按<列名2>的值的升序或降序排序。
?
單表查詢
選擇表中的若干列
選擇表中的全部或部分列即關系代數(shù)的投影運算。
(1)查詢指定列
在很多情況下,用戶只對表中的一部分屬性列感興趣,這時可以通過在SELECT子句的<目標列表達式>中指定要查詢的屬性列。
(2)查詢?nèi)苛?/span>
將表中的所有屬性列都列出來有兩種方法,一種方法就是在SELECT關鍵字后列出所有列名;如果列的顯示順序與其在表中的順序相同,也可以簡單的使用*。
(3)查詢經(jīng)過計算的值
SELECT子句不僅可以是表中的屬性列,也可以是表達式。
SELECT"采集時間:",em_air_temperature.DateTime,"數(shù)據(jù):",em_air_temperature.AirTemperatureData+1 FROMem_air_temperature WHEREem_air_temperature.DateTime >= '2019-07-01'AND em_air_temperature.DateTime <= '2019-07-17'?
選擇表中的若干元組
(1)消除取值重復的行
兩個本來并不完全相同的元組在投影到指定的某些列上后,可能會變成相同的行。可以用DISTINCT消除它們。如果沒有DISTINCT關鍵字,則默認為ALL,即保留結果表中取值重復的行。
SELECT DISTINCT"采集時間:",em_air_temperature.DateTime,"數(shù)據(jù):",em_air_temperature.AirTemperatureData FROMem_air_temperature WHEREem_air_temperature.DateTime >= '2019-07-01'AND em_air_temperature.DateTime <= '2019-07-17'(2)查詢滿足條件的元組
①查詢滿足指定條件的元組可以通過WHERE子句實現(xiàn)。
查詢條件? ? ? ? ? ? ? ? ? ? ? 謂詞 比較? ? ? ? ? ? ? ? ? ? ? =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符 確定范圍? ? ? ? ? ? ? ? ? BETWEEN AND,NOT BETWEEN AND 確定集合? ? ? ? ? ? ? ? ? IN,NOT IN 字符串匹配? ? ? ? ? ? ? ? ?LIKE,NOT LIKE 空值? ? ? ? ? ? ? ? ? ? ? IS NULL,IS NOT NULL 多重條件? ? ? ? ? ? ? ? ? ?AND,OR,NOT?
②確定范圍
BETWEEN AND,NOT BETWEEN AND可以用來查找屬性值是否在指定范圍內(nèi),其中BETWEEN后是范圍的下限,AND后是范圍的上限。
SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;?
③確定集合
謂詞IN可以用來查找屬性值屬于指定集合的元組。
SELECT Sname,Ssex FROM Student WHERE Sdept IN('CS','MA','IS');?
④字符匹配
謂詞LIKE可以用來進行字符串的匹配。其一般格式如下:
[NOT] LIKE '<匹配串>'?[ESCAPE'<換碼字符>']其含義是查找指定的屬性列值與<匹配串>相匹配的元組。<匹配串>可以是一個完整的字符串,也可以含有通配符%和_。其中:
% ( 百分號 ) 代表任意長度的字符串。例如a%b表示以a開頭,以b結尾的任意長度的字符串。如acb、addgb、ab等都滿足該匹配串。
_ ( 下橫線 ) 代表任意單個字符。例如a_b表示以a開頭,以b結尾的長度為3的任意字符串。如acb、afb等都滿足該匹配串。
ESCAPE '?\ '表示"?\ "為換碼符。這樣匹配串中緊跟在"?\ "后面的字符"?_ "不是在具有通配符的含義,轉義為普通的"?_ "字符。
?
ORDER BY子句
用戶可以使用ORDER BY子句對查詢結果按照一個或多個屬性列的升序(ASC)或降序(DESC)排列,默認值為升序。
SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC;?
聚集函數(shù)
為了進一步方便用戶,增強檢索功能,SQL提供了許多聚集函數(shù),主要有:
COUNT(*)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 統(tǒng)計元組個數(shù) COUNT ( [DISTINCT|ALL] <列名> )? ? ? ? ? 統(tǒng)計一列中值的個數(shù) SUM ( [DISTINCT|ALL] <列名> )? ? ? ? ? ? 計算一列值的總和(此列必須是數(shù)值型) AVG ( [DISTINCT|ALL] <列名> )? ? ? ? ? ? 計算一列值的平均值(此列必須是數(shù)值型) MAX ( [DISTINCT|ALL] <列名> )? ? ? ? ? ? 求一列值中的最大值 MIN ( [DISTINCT|ALL] <列名> )? ? ? ? ? ? 求一列值中的最小值如果指定DISTINCT短語,則表示在計算時要取消指定列中的重復值。當聚集函數(shù)遇到空值時,除COUNT(*)外,都跳過空值而只處理非空值。注意:WHERE子句中是不能用聚集函數(shù)作為條件表達式的。聚集函數(shù)只能用于SELECT子句和GROUP BY中的HAVING子句。
?
GROUP BY子句
GROUP BY子句將查詢結果按某一列或多列的值分組,值相等的為一組。對查詢結果分組的目的是為了細化聚集函數(shù)的作用對象。如果未對查詢結果分組,聚集函數(shù)將作用于整個查詢結果。分組后聚集函數(shù)將作用于每一個組,即每一組都有一個函數(shù)值。
SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;WHERE子句和HAVING短語的區(qū)別在于作用對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組。HAVING短語作用于組,從中選擇滿足條件的組。
?
連接查詢
前面的查詢都是針對一個表進行的。若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢是關系數(shù)據(jù)庫中最主要的查詢,包括等值連接查詢、自然連接查詢、非等值連接查詢、自身連接查詢、外連接查詢和復合條件連接查詢等。
?
等值于非等值連接查詢
連接查詢的WHERE子句中用來連接兩個表的條件稱為連接條件或連接謂詞,其中比較運算符主要有=,>,<,>=,<=,!=,<>,!>,!<等。當連接運算符為=時,稱為等值連接。使用其他運算符稱為非等值連接。連接謂詞中的列名稱為連接字段。連接條件中的各連接字段類型必須是可比的,但名字不必相同。
一條SQL語句可以同時完成選擇和連接查詢,這時WHERE子句是由連接謂詞和選擇謂詞組成的復合條件。
SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno='2'?AND SC.Grade>90;該查詢的一種優(yōu)化的執(zhí)行過程是,先從SC中挑選出Cno = ‘2’?并且Grade > 90的元組形成一個中間關系,再和Student中滿足連接條件的元組進行連接得到最終的結果。
?
自身連接
該操作不僅可以在兩個表之間進行,也可以是一個表與其自己進行連接,稱為表的自身連接。
例:查詢每一門課的間接先選修課(即先修課的先修課)。
在Course表中只有每門課的直接先修課信息,而沒有先修課的先修課。要得到這個信息,必須先對一門課找到其先修課,再按此先修課的課程號查找它的先修課程。這就要將Course表與其自身連接。為此要為Course表取兩個別名,一個是FRIST,另一個是SECOND。
該SQL語句為:
SELECT?FIRST.Cno,SECOND.Cpno FROM?Course FIRST,Course SECOND WHERE FIRST.Cpno=SECOND.Cno;?
內(nèi)連接
內(nèi)連接就是表間的主鍵與外鍵相連,只取得鍵值一致的,可以獲取雙方表中的數(shù)據(jù)連接方式。語法如下:
SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外鍵=表2.主鍵 WHERE 條件語句; SELECTStudent.Name,College.CollegeName FROMStudent INNER JOIN College ON Student.CollegeId = College.CollegeId;?
外連接
outer join則會返回每個滿足第一個(頂端)輸入與第二個(底端)輸入的聯(lián)接的行。它還返回任何在第二個輸入中沒有匹配行的第一個輸入中的行。外連接分為三種:左外連接,右外連接,全外連接。這里只介紹左外連接和右外連接。
?
左外連接
左外連接是以左表為標準,只查詢在左邊表中存在的數(shù)據(jù),當然需要兩個表中的鍵值一致。語法如下:
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WHERE 條件語句; SELECTStudent.Name,College.CollegeName FROMStudent LEFT OUTER JOIN College ON Student.CollegeId = College.CollegeId;?
右外連接
右連接將會以右邊作為基準,進行檢索。語法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WHERE 條件語句; SELECTStudent.Name,College.CollegeName FROMStudent RIGHT OUTER JOIN College ON Student.CollegeId = College.CollegeId;?
多表連接
連接操作除了可以是兩表連接、一個表與其自身連接外,還可以是兩個以上的表進行連接,后者通常稱為多表連接。
例:查詢每個學生的學號、姓名、選修的課程名及成績。
SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;關系數(shù)據(jù)庫管理系統(tǒng)在執(zhí)行多表連接時,通常是先進行兩個表的連接操作,再將其連接結果與第三個表進行連接。
?
?
嵌套查詢
在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中查詢稱為嵌套查詢。例如:
SELECT Sname FROM Student WHERE Sno IN(SELECT SnoFROM SCWHERE Cno='2');本例中,下層查詢塊SELECT Sno FROM SC WHERE Cno='2'是嵌套在上層查詢塊SELECT Sname FROM Student WHERE Sno IN的WHERE條件中的。上層查詢或父查詢,下層查詢塊稱為內(nèi)層查詢或子查詢。
SQL語言語序多層嵌套查詢,即一個子查詢中還可以嵌套其他子查詢。需要特別指出的是,子查詢的SELECT語句中不能使用ORDER BY子句,ORDER BY子句只能對最終查詢結果排序。
嵌套查詢使用戶可以用多個簡單查詢構成復雜的查詢,從而增強SQL的查詢能力。以層層嵌套的方式來構造程序正是SQL中"結構化"的含義所在。
?
帶有IN謂詞的子查詢
在嵌套查詢中,子查詢的結果往往是一個集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。
例:查詢與劉晨在同一個系學習的學生。
先分步來完成此查詢,然后再構造嵌套查詢。
(1)確定劉晨所在系名
SELECT Sdept FROM Student WHERE Sname='劉晨';(2)查詢所有在CS系學習的學生
SELECT Sno,Sname,Sdept FROM Student WHERE Sdept='CS';構造嵌套查詢?nèi)缦?#xff1a;
SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN(SELECT SdeptFROM StudentWHERE Sname='劉晨');本例中,子查詢的查詢條件不依賴于父查詢,稱為不相關子查詢。本例還可以使用自身連接來完成:
SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept=S2.Sdept AND S2.Sname='劉晨';可見,實現(xiàn)同一個查詢請求可以有多種方法,不同的方法其執(zhí)行效率可能會有差別,所以數(shù)據(jù)庫編程人員應該掌握查詢語句的調優(yōu)技術。
?
例:查詢選修了課程名為"信息系統(tǒng)"的學生學號和姓名。
本查詢涉及學號、姓名和課程名三個屬性。學號和姓名存放在Student表中,課程名存放在Course表中,但Student與Course兩個表之間沒有直接聯(lián)系,必須通過SC表建立它們二者之間的聯(lián)系。所以本查詢涉及三個關系。
SELECT Sno,Sname FROM Student WHERE Sdept IN(SELECT SnoFROM SCWHERE Cno IN(SELECT CnoFROM CourseWHERE Cname='信息系統(tǒng)'));?
本查詢同樣可以用連接查詢實現(xiàn):
SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Student.Sno=SC.Sno ANDSC.Cno=Course.Cno ANDCourse.Cname='信息系統(tǒng)';有些嵌套查詢可以用連接運算替代,有些是不能替代的。上述例子中子查詢的查詢條件不依賴于父查詢,這類子查詢稱為不相關子查詢。不相關子查詢是較簡單的一類子查詢。如果查詢的查詢條件依賴于父查詢,這類子查詢稱為相關子查詢,整個查詢語句稱為相關嵌套查詢語句。
?
帶有比較運算符的子查詢
例:找出每個學生超過他自己選修課程平均成績的課程號
SELECT Sno,Cno FROM SC x WHERE Grade >= (SELECT AVG(Grade)FROM SC yWHERE y.Sno=x.Sno);x是表SC的別名,有稱為元組變量,可以用來表示SC的一個元組。內(nèi)層查詢是求一個學生所有選修課程平均成績的,至于是哪個學生的平均成績要看參數(shù)x.Sno的值,而該值是與父查詢相關的,因此這類查詢稱為相關子查詢。
?
這個語句的一種可能的執(zhí)行過程采用以下三個步驟:
(1)從外層查詢中取出SC的一個元組x,將元組x的Sno值傳送給內(nèi)層查詢。
SELECT AVG(Grade) FROM SC y WHERE y.Sno='';(2)執(zhí)行內(nèi)層查詢,得到值,用該值代替內(nèi)層查詢,得到外層查詢:
SELECT Sno,Cno FROM SC x WHERE Grade >= 88;(3)執(zhí)行這個查詢,得到相應的結果
然后外層查詢?nèi)〕鱿乱粋€元組重復做上述(1)至(3)步驟的處理,直到外層的SC元組全部處理完畢。求解相關子查詢不能像求解不相關子查詢那樣一次將子查詢求解出來,然后求解父查詢。內(nèi)層查詢由于與外層查詢有關,因此必須反復求值。
?
帶有ANY(SOME)或ALL謂詞的子查詢
子查詢返回單值時可以用比較運算符,但返回多值時要用ANY(有的系統(tǒng)用SOME)或ALL謂詞修飾符。而使用ANY或ALL謂詞時則必須同時使用比較運算符。其語義如下所示:
>ANY? ? ? ? ? ? ? ? ? ? ? ? 大于子查詢結果中的某個值 >ALL? ? ? ? ? ? ? ? ? ? ? ??大于子查詢結果中的所有值 <ANY? ? ? ? ? ? ? ? ? ? ? ? 小于子查詢結果中的某個值 <ALL? ? ? ? ? ? ? ? ? ? ? ? 大于子查詢結果中的所有值 >=ANY? ? ? ? ? ? ? ? ? ? ?大于等于子查詢結果中的某個值 >=ALL? ? ? ? ? ? ? ? ? ? ? ?大于等于子查詢結果中的所有值 <=ANY? ? ? ? ? ? ? ? ? ? ?小于等于子查詢結果中的某個值 <=ALL? ? ? ? ? ? ? ? ? ? ? 小于等于子查詢結果中的所有值 =ANY? ? ? ? ? ? ? ? ? ? ? ?等于子查詢結果中的某個值 =ALL? ? ? ? ? ? ? ? ? ? ? ? 等于子查詢結果中的所有值 !=(或<>)ANY ??????? ??不等于子查詢結果中的某個值 !=(或<>)ALL ????????? ?不等于子查詢結果中的任何一個值?
例:查詢非計算機科學系中比計算機科學系任意一個學生年齡小的學生姓名和年齡。
SELECT Sname,Sage FROM Student WHERE Sage<ANY(SELECT SageFROM StudentWHERE Sdept='CS') AND Sdept <>'CS';?
集合查詢
SELECT語句的查詢結果是元組的集合,所以多個SELECT語句的結果可進行集合操作。集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。注意:參加集合操作的各查詢結果的列數(shù)必須相同;對應項的數(shù)據(jù)類型也必須相同。
例:查詢計算機科學系的學生及年齡不大于19歲的學生。
SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19;本查詢實際上是求計算機科學系的所有學生與年齡不大于19歲的學生的并集。使用UNION將多個查詢結果合并起來時,系統(tǒng)會自動去掉重復元組。如果要保留重復元組則用UNION ALL操作符。
?
例:查詢計算機科學系的學生與年齡不大于19歲的學生的交集。
SELECT * FROM Student WHERE Sdept='CS' INTERSECT SELECT * FROM Student WHERE Sage<=19;?
例:查詢計算機科學系的學生與年齡不大于19歲的學生的差集(查詢計算機科學系中年齡大于19歲的學生)。
SELECT * FROM Student WHERE Sdept='CS' EXCEPT SELECT * FROM Student WHERE Sage<=19;?
基于派生表的查詢
子查詢不僅可以出現(xiàn)在WHERE子句中,還可以出現(xiàn)在FROM子句中,這時子查詢生成的臨時派生表成為主查詢的查詢對象。
例:找出每個學生超過他自己選修課程平均成績的課程號。
SELECT Sno,Cno FROM SC,(SELECT Sno,Avg(Grade) FROM SC GROUP BY Sno)AS Avg_sc(avg_sno,avg_grade) WHERE SC.Sno=Avg_sc.avg_sno and SC.Grade>=Avg_sc.avg_grade這里FROM子句中的子查詢將生成一個派生表Avg_sc。該表由avg_sno和avg_grade兩個屬性組成,記錄了每個學生的學號及平均成績。主查詢將SC表與Avg_sc按學號相等進行連接,選出選修課成績大于其平均成績的課程號。
?
數(shù)據(jù)更新
數(shù)據(jù)更新操作有三種:向表中添加若干行數(shù)據(jù)、修改表中的數(shù)據(jù)和刪除表中的若干行數(shù)據(jù)。
?
插入數(shù)據(jù)
SQL的數(shù)據(jù)插入語句INSERT通常有兩種形式,一種是插入元組,另一種是插入子查詢結果。后者可以一次插入多個元組。
插入元組的INSERT語句的格式為
INSERT INTO <表名>([屬性列1,屬性列2...]) VALUES(常量1,常量2...)例:將一個新學生元組插入到Student表中。
INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES('201215128','陳晨','男','IS',18);在INTO子句中指出了表名Student,并指出了新增加的元組在哪些屬性上要賦值,屬性的順序可以與CREATE TABLE中的順序不一樣。VALUES子句對新元組的各屬性賦值,字符串常數(shù)要用單引號括起來。注意:指明屬性列,則插入的信息要和屬性一致。不指明屬性列,插入信息要包括所有屬性。
?
插入子查詢結果
子查詢不僅可以嵌套在SELECT語句中用以構造父查詢的條件,也可以嵌套在INSERT語句中用以生成要插入的批量數(shù)據(jù)。
INSERT INTO <表名>([屬性列1,屬性列2...]) 子查詢;例:對每一個系,求學生的平均年齡,并把結果存入數(shù)據(jù)庫。
INSERT INTO Dept_age(Sdept,Avg_age) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;?
修改數(shù)據(jù)
修改操作又稱為更新操作,其語句的一般格式為:
UPDATE <表名> SET <列名>=<表達式> [,<列名>=<表達式>]... WHERE <條件>;其功能是修改指定表中滿足WHERE子句條件的元組。其中SET子句給出<表達式>的值用于取代相應的屬性列值。如果省略WHERE子句,則表示要修改表中的所有元組。
例: UPDATE Student SET Sage=22 WHERE Sno='201215121'UPDATE Student SET Sage=Sage+1;?
帶子查詢的修改語句
子查詢也可以嵌套在UPDATE語句中,用以構造修改的條件。
例:將計算機科學系全體學生的成績置為0。
UPDATE SC SET Grade=0 WHERE Sno IN(SELECT SnoFROM StudentWHERE Sdept='CS');?
刪除數(shù)據(jù)
刪除語句的一般格式為:
DELETE FROM <表名> WHERE <條件>;DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。如果省略WHERE子句則表示刪除表中全部元組,但表的定義仍在字典中。也就是說,DELETE語句刪除的是表中的數(shù)據(jù),而不是關于表的定義。
例: DELETE FROM Student WHERE Sno='201215128';DELETE FROM SC;?
帶子查詢的刪除語句
子查詢同樣也可以嵌套在DELETE語句中,用以構造執(zhí)行刪除操作的條件。
例:刪除計算機科學系所有學生的選課記錄。
DELETE FROM SC WHERE Sno IN(SELETE SnoFROM StudentWHERE Sdept='CS');?
項目需求
只查詢一條數(shù)據(jù)
SELECTem_air_temperature.AirTemperatureData,em_air_temperature.DateTime FROMem_air_temperature WHEREChannalNumber = '1' ORDER BYem_air_temperature.DateTime DESC LIMIT 0,1;?
查詢一整天的數(shù)據(jù)
SELECT* FROMem_air_temperature WHEREChannalNumber = '1' AND em_air_temperature.DateTime >='2019-12-12' AND em_air_temperature.DateTime <= date_add('2019-12-12', INTERVAL 1 DAY);?
模糊查詢近幾天的數(shù)據(jù)
SELECT* FROM(SELECTem_air_temperature.DateTime,em_air_temperature.AirTemperatureData,(@rowNum :=@rowNum + 1) AS rowNoFROMem_air_temperature,(SELECT(@rowNum := 0)) bWHEREChannalNumber = '1'AND em_air_temperature.DateTime >= date_add('2019-12-12', INTERVAL 1 DAY)AND em_air_temperature.DateTime <= date_add('2019-12-13', INTERVAL 1 DAY)ORDER BYem_air_temperature.Id ASC) AS a WHEREMOD (a.rowNo, 20) = 1;?
取每張表的一條數(shù)據(jù)
SELECTem_air_temperature.AirTemperatureData,em_soil_temperature.SoilTemperatureData,em_light_intensity.LightIntensityData,em_air_humidity.AirHumidityData,em_soil_moisture.SoilMoistureData,em_co2_concentration.Co2ConcentrationData FROMem_air_temperature,em_soil_temperature,em_light_intensity,em_air_humidity,em_soil_moisture,em_co2_concentration LIMIT 0,1;或者也行: SELECTem_air_temperature.AirTemperatureData,em_soil_temperature.SoilTemperatureData,em_light_intensity.LightIntensityData,em_air_humidity.AirHumidityData,em_soil_moisture.SoilMoistureData,em_co2_concentration.Co2ConcentrationData FROMem_air_temperature INNER JOIN em_soil_temperature INNER JOIN em_light_intensity INNER JOIN em_air_humidity INNER JOIN em_soil_moisture INNER JOIN em_co2_concentration LIMIT 0,1;?
查詢每月的數(shù)據(jù)
SELECT* FROM(SELECTem_air_temperature.DateTime,em_air_temperature.AirTemperatureData,(@rowNum :=@rowNum + 1) AS rowNoFROMem_air_temperature,(SELECT(@rowNum := 0)) bWHEREChannalNumber = '1'AND em_air_temperature.DateTime >= '2019-12-01'AND em_air_temperature.DateTime <= date_add('2019-12-31', INTERVAL 2 DAY)ORDER BYem_air_temperature.Id ASC) AS a WHEREMOD (a.rowNo, 60) = 1;?
一年中每月的平均數(shù)據(jù)
SELECTMONTH (em_air_temperature.DateTime) AS MONTH,ROUND(AVG(em_air_temperature.AirTemperatureData),1 ) AS AVG FROMem_air_temperature WHEREYEAR (em_air_temperature.DateTime) = '2019' GROUP BYMONTH (em_air_temperature.DateTime);?
一個月每天的平均值
SELECTDAY (em_air_temperature.DateTime) AS DAY,ROUND(AVG(em_air_temperature.AirTemperatureData), 1) AS AVG FROMem_air_temperature WHEREYEAR (em_air_temperature.DateTime) = '2019' AND MONTH (em_air_temperature.DateTime ) = '12' GROUP BYDAY (em_air_temperature.DateTime);總結
- 上一篇: Google Chubby 论文翻译
- 下一篇: 学会原谅自己