搜尋
首頁資料庫mysql教程SQL資料運算基礎(中級)8

SQL資料運算基礎(中級)8

Dec 17, 2016 pm 02:36 PM

更新記錄

要修改表中已經存在的一條或多筆記錄,應使用SQL UPDATE語句。同DELETE語句一樣,UPDATE語句可以使用WHERE子句選擇更新特定的記錄。請看這個範例:

UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’

這個UPDATE 語句更新所有second_column欄位的值為’Update Me!’的記錄。對所有被選取的記錄,欄位first_column的值被置為’Updated!’。

下面是UPDATE語句的完整句法:

UPDATE {table_name|view_name} SET [{table_name|view_name}]

{column_list|variable_list|variable_and_column_list}

[,{column_list2|variable_list2|variable_and_column_list2}>_list2>g ]

[WHERE clause]

注意:

你可以對文字型欄位使用UPDATE語句。但是,如果你需要更新很長的字串,應使用UPDATETEXT語句。這部分內容對本書來說太高級了,因此不加討論。要了解更多的信息,請參考Microsoft SQL Sever 的文檔。

如果你不提供WHERE子句,表中的所有記錄都會被更新。有時這是有用的。例如,如果你想把表titles中的所有書的價格加倍,你可以使用如下的UPDATE 語句:

你也可以同時更新多個欄位。例如,下面的UPDATE語句同時更新first_column,second_column,和third_column這三個欄位:

UPDATE mytable SET first_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHERE first_column=’Update Me1’

技巧:

SQL忽略語句中多餘的空格。你可以把SQL語句寫成任何你最容易讀的格式。

 

用SELECT 創建記錄和表

你也許已經注意到,INSERT 語句與DELETE語句和UPDATE語句有一點不同,它一次只會操作一個記錄。然而,有一個方法可以使INSERT 語句一次新增多個記錄。要作到這一點,你需要把INSERT 語句與SELECT 語句結合起來,像這樣:

INSERT mytable (first_column,second_column)

SELECT another_first,another_second

FROM anothertable

WHERE another_first=’Copy Me!’

這個語句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’Copy Me! ’的記錄才被拷貝。

當為一個表格中的記錄建立備份時,這種形式的INSERT 語句是非常有用的。在刪除一個表格中的記錄之前,你可以先用這個方法把它們拷貝到另一個表格中。

如果你需要拷貝整張表,你可以使用SELECT INTO 語句。例如,下面的語句建立了一個名為new​​table的新表,該表包含表mytable的所有資料:

SELECT * INTO newtable FROM mytable

你也可以指定只有特定的欄位被用來建立這個新表。要做到這一點,只需在欄位清單中指定你想要拷貝的欄位。另外,你可以使用WHERE 子句來限制拷貝到新表中的記錄。下面的範例只拷貝欄位second_columnd的值等於’Copy Me!’的記錄的first_column欄位。

SELECT first_column INTO newtable

FROM mytable

WHERE second_column=’Copy Me!’

使用SQL修改已經建立的表格是很困難的。例如,如果你向一個表中添加了一個字段,沒有容易的辦法來去除它。另外,如果你不小心把一個欄位的資料型別給錯了,你將沒有辦法改變它。但是,使用本節中講述的SQL語句,你可以繞過這兩個問題。

例如,假設你想要從一個表格中刪除一個欄位。使用SELECT INTO 語句,你可以建立該表的一個拷貝,但不包含要刪除的欄位。這使你既刪除了該字段,又保留了不想刪除的資料。

如果你想改變一個欄位的資料類型,你可以建立一個包含正確資料類型欄位的新表。建立好該表後,就可以結合使用UPDATE語句和SELECT 語句,把原來表中的所有資料拷貝到新表中。透過這種方法,你既可以修改表格的結構,又能保存原有的資料。

集合函數

到現在為止,你只學習瞭如何根據特定的條件從表中取出一條或多條記錄。但是,假如你想對一個表格中的記錄進行資料統計。例如,如果你想統計儲存在表中的一次民意測驗的投票結果。或者你想知道一個訪客在你的網站上平均花了多少時間。要對錶中的任何類型的資料進行統計,都需要使用集合函數。

Microsoft SQL 支援五種類型的集合函數。你可以統計記錄數目,平均值,最小值,最大值,或求和。當你使用一個集合函數時,它只會傳回一個數,該數值代表這幾個統計值之一。

注意:

要在你的asp網頁中使用集合函數的回傳值,你需要為該值取一個名字。要作到這一點,你可以在SELECT語句中,在集合函數後面緊跟著一個字段名,如下例所示:

SELECT AVG(vote) ‘the_average’ FROM opinion

在這個例子中,vote的平均值被命名為 the_average。現在你可以在你的ASP網頁的資料庫方法中使用這個名字。

統計欄位值的數目

函數COUNT()也許是最有用的集合函數。你可以用這個函數來統計一個表格中有多少筆記錄。這裡有一個例子:

SELECT COUNT(au_lname) FROM authors

這個例子計算表authors中名字(last name)的數目。如果相同的名字出現了不只一次,該名字將會被計算多次。如果你想知道名字為某個特定值的作者有多少個,你可以使用WHERE子句,如下例所示:

SELECT COUNT(au_lname) FROM authors WHERE au_lname=’Ringer’

這個範例回傳名字為’Ringer’的作者的數目。如果這個名字在表authors中出現了兩次,則次函數的回傳值是2。

假如你想知道有不同名字的作者的數目。你可以透過使用關鍵字DISTINCT來得到該數目。如下例所示:

SELECT COUNT(DISTINCT au_lname) FROM authors

如果名字’Ringer’出現了不只一次,它將只被計算一次。關鍵字DISTINCT 決定了只有互不相同的值才被計算出來。

通常,當你使用COUNT()時,欄位中的空值將被忽略。一般來說,這正是你所希望的。但是,如果你只是想知道表中記錄的數目,那麼你需要計算表中所有的記錄─不管它是否包含空值。以下是如何做到這一點的例子:

SELECT COUNT(*) FROM authors

注意函數COUNT()沒有指定任何欄位。這個語句計算表中所有記錄所數目,包括有空值的記錄。因此,你不需要指定要被計算的特定欄位。

函數COUNT()在許多不同情況下是有用的。例如,假設有一個表格保存了對你網站的品質進行民意調查的結果。這個表有一個名為vote的字段,該字段的值要么是0,要么是1。0表示反對票,1表示贊成​​票。要確定贊成票的數量,你可以所有下面的SELECT 語句:

SELECT COUNT(vote) FROM opinion_table WHERE vote=1

計算欄位的平均值

使用函數COUNT(),你可以統計一個欄位中有多少個值。但有時你需要計算這些數值的平均值。使用函數AVG(),你可以傳回一個欄位中所有值的平均值。

假如你對你的站點進行一次較為複雜的民意調查。訪客可以在1到10之間投票,表示他們喜歡你網站的程度。你把投票結果保存在名為vote的INT型欄位中。要計算你的使用者投票的平均值,你需要使用函數AVG():

SELECT AVG(vote) FROM opinion

這個SELECT語句的回傳值代表使用者對你網站的平均喜歡程度。函數AVG()只能對數值型欄位使用。這個函數在計算平均值時也忽略空值。

計算字段值的和

假設你的站點被用來出售卡片,已經運行了兩個月,是該計算賺了多少錢的時候了。假設有一個名為orders的表格用來記錄所有訪客的訂購資訊。要計算所有訂購量的總和,你可以使用函數SUM():

SELECT SUM(purchase_amount) FROM orders

函數SUM()的回傳值代表欄位purchase_amount中所有值的平均值。字段purchase_amount的資料類型也許是MONEY型,但你也可以對其它數值型字段使用函數SUM()。

回傳最大值或最小值

再一次假設你有一個表用來保存對你的站點進行民意調查的結果。訪客可以選擇從1到10 的值來表示他們對你網站的評價。如果你想知道訪客對你網站的最高評價,你可以使用以下的語句:

SELECT MAX(vote) FROM opinion

你也許希望有人對你的站點給予了很高的評價。透過函數MAX(),你可以知道一個數值型欄位的所有值中的最大值。如果有人對你的網站投了數字10,函數MAX()將會回傳該值。

另一方面,假如你想知道訪客對你網站的最低評價,你可以使用函數MIN(),如下例所示:

SELECT MIN(vote) FROM opinion

函數MIN()傳回一個欄位的所有值中的最小值。如果欄位是空的,函數MIN()會傳回空值。

其它常用的SQL表達式,函數,和過程

這一節將介紹一些其它的SQL技術。你將學習如何從表中取出數據,其某個字段的值處在一定的範圍,你還將學習如何把字段值從一種類型轉換成另一種類型,如何操作字符串和日期時間數據。最後,你將學會一個發送郵件的簡單方法。

透過匹配一定範圍的值來取出資料

假設你有一個表用來保存對你的站點進行民意調查的結果。現在你想向所有對你的網站的評價在7到10之間的訪客發送書面的感謝信。要得到這些人的名字,你可以使用如下的SELECT 語句:

SELECT username FROM opinion WHERE vote>6 and vote
這個SELECT 語句會實現你的要求。你使用下面的SELECT 語句也可以得到相同的結果:

SELECT username FROM opinion WHERE vote BETWEEN 7 AND 10

這個SELECT 語句與上一個語句是等價的。使用哪一種語句是程式設計風格的問題,但你會發現使用表達式BETWEEN 的語句更易讀。

現在假設你只想取出對你的站點投了1或10的訪客的名字。要從表opinion中取出這些名字,你可以使用以下的SELECT 語句:

SELECT username FROM opinion WHERE vote=1 or vote

這個SELECT語句會回傳正確的結果,沒有理由不使用它。但是,存在一種等價的方式。使用以下的SELECT可以得到相同的結果:

SELECT username FROM opinion WHERE vote IN (1,10)

注意表達式IN 的使用。這個SELECT 語句只取出vote的值等於括號中的值之一的記錄。

你也可以使用IN來匹配字元資料。例如,假設你只想取出Bill Gates或PResident Clinton的投票值。你可以使用如下的SELECT 語句:

SELECT vote FROM opinion WHERE username IN (‘Bill Gates’,’President Clinton’)

最後,你可以在使用BETWEEN或IN的同時使用表達式NOT。例如,要取出那些投票值不在7到10之間的人的名字,你可以使用以下的SELECT 語句:

SELECT username FROM opinion WHERE vote NOT BETWEEN 7 and 10

要選取那些某個欄位的值不在一列值之中的記錄,你可以同時使用NOT 和IN,如下例所示:

SELECT vote FROM opinion

WHERE username NOT IN (‘Bill Gates’,’President Clinton’)

你不是必須在SQL語句中使用BETWEEN或IN,但是,要讓你的查詢更接近自然語言,這兩個表達式是有幫助的。


 以上就是SQL資料操作基礎(中級)8的內容,更多相關文章請關注PHP中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL中的存儲過程是什麼?MySQL中的存儲過程是什麼?May 01, 2025 am 12:27 AM

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

查詢緩存如何在MySQL中工作?查詢緩存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

與其他關係數據庫相比,使用MySQL的優點是什麼?與其他關係數據庫相比,使用MySQL的優點是什麼?May 01, 2025 am 12:18 AM

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

您如何處理MySQL中的數據庫升級?您如何處理MySQL中的數據庫升級?Apr 30, 2025 am 12:28 AM

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

您可以使用MySQL的不同備份策略是什麼?您可以使用MySQL的不同備份策略是什麼?Apr 30, 2025 am 12:28 AM

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

什麼是mySQL聚類?什麼是mySQL聚類?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何優化數據庫架構設計以在MySQL中的性能?如何優化數據庫架構設計以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

您如何優化MySQL性能?您如何優化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器