SQL入門教程第18課:DELETE刪除語句

2021-02-15 Excel星球

HI,大家好,我是星光。

聊了十幾期,總算把SQL查詢語句聊完了——打個哈欠先。

……SELECT查詢語句是SQL的核心,聊完了它,剩下的就簡單了……掰掰我的手指頭……關於SQL,我們大概還有3個部分沒講,分別是DELETE刪除、UPDATE更新以及INSERT新增。這3個語句講完,本系列的SQL也就告一段落了。我們今天先來講DELETE語句,顧名思義,也就是如何從資料庫中刪除數據。
WHERE條件不是必須的,但當沒有WHERE子句等刪除條件時,DELETE會刪除表中所有的記錄;因此當DELETE忘記了WHERE,後果通常如下圖所示:有一個文件夾,內有一份Excel工作簿和一份ACCESS文件(點擊文末可以下載該示例文件)我們現在需要通過Excel VBA,按指定條件刪除ACCESS文件中表名為』成績表』的數據行。現在,假設我們需要刪除姓名為』看見星光』的記錄行。SQL語句如下:
DELETE FROM 成績表 WHERE 姓名='看見星光'

本系列第1章的時候我們說過,EXCEL執行SQL的操縱語句,需要通過VBA+ADO的方式;第2章我們也介紹了如何使用VBA引用ADO對象並執行SQL語句。綜上,在VBA中使用DELETE語句完整代碼如下:

代碼看不全可以左右拖動...▼

Sub DoSql1()    Dim cnn As Object    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\資料庫.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL = "DELETE FROM 成績表 WHERE 姓名='看見星光'"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub

而假設我們需要刪除ACCESS文件中,EXCEL當前工作表(表名為』操作表』)A列出現的姓名數據。

Sub DoSql2()    Dim cnn As Object    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\資料庫.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL = "delete from 成績表 where 姓名 in (select * from [Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a])"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub

代碼中SQL語句使用了IN運算符和子查詢,關於子查詢,可以參考本系列教程第13課什麼是子查詢。代碼中ADO創建的連接是ACCESS文件,在此基礎上,SQL語句查詢Excel工作簿工作表的數據時,使用了[Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a]語句。

該知識點可以參考本系列教程第4課SQL中表技巧的總結。

當然,也可以使用關聯語句作為刪除條件執行DELETE,代碼如下:

Sub DoSql3()    Dim cnn As Object, strSQL1 As String    Dim strPath As String, strCnn As String, strSQL As String    Set cnn = CreateObject("adodb.connection")    strPath = ThisWorkbook.Path & "\資料庫.accdb"    strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath    cnn.Open strCnn    strSQL1 = "[Excel 12.0;database=" & ThisWorkbook.FullName & "].[操作表$a:a] b"    strSQL = "delete distinctrow a.* from 成績表 a inner join " & strSQL1 & " on a.姓名=b.姓名"    cnn.Execute (strSQL)    cnn.Close    Set cnn = NothingEnd Sub

DELETE子句指定了需要刪除記錄行的表名(delete distinctrow a.*),並使用內連接inner join的查詢結果作為刪除條件。需要注意的是,DELETE後有個關鍵字DISTINCTROW,這通常是ACCESS DELETE使用關聯查詢方案時必備的;而SQL Server則並不需此用法。ACCESS(JET SQL)與SQL SERVER(T-SQL)有很多不同,這不是我們系列教程的重點,略過,感興趣的朋友可以自行百度。為什麼例子中使用了ACCESS文件,而不是EXCEL呢?為什麼不舉個使用DELETE語句刪除EXCEL某個表的記錄行的例子呢?對於EXCEL文件,SQL可以刪除單元格內的值,但不能使用DELETE語句刪除整條記錄,或者說刪除單元格自身;否則會收到以下錯誤提示:左上角點關注,右下角點個讚,揮手下期再見。

案例文件下載百度網盤..▼https://pan.baidu.com/s/1qors1pZB6MOvfWoTT7Mokw 需要系統學習Excel,卻找不到優質教程?學習Excel的過程中遇到疑難問題,卻找不到人及時作出解答?加入我的付費社群,這一切都不是問題……

右下角↘你懂得~

相關焦點

  • SQL入門教程第19課:UPDATE更新語句
    我們上一章留了個小尾巴,說對於EXCEL文件,SQL可以刪除單元格內的值,但不能使用DELETE語句刪除整條記錄,或者說刪除單元格自身;否則會收到錯誤提示——那麼如何刪除單元格內的值呢?請使用UPDATE語句。UPDATE,顧名思義,修改或更新資料庫中的數據之意 ;它的基礎語法如下:舉個例子。
  • IT大叔詳談mysql中update語句和delete語句及應用
    請看sql語句:update student set age = (age+1),語句中「age+1」是一個表達式,並不是一個具體的值,這樣也可以,這個語句沒有where表達式意思就是通表(整張表)更新,來看一下更新的效果把,可以看到所有人age都增加了1。
  • 在mysql中如何刪除記錄?delete關鍵字了解一下
    在上一篇文章中我們學習了如何更新mysql中的數據內容,用到的是update這個關鍵字,今天我們要學習的是如何讓在mysql中刪除記錄,也就是從箱子裡面拿走東西,用到的關鍵字是delete這個關鍵字,下面我們就通過一個例子來了解一下。
  • 資料庫常用的sql語句匯總(2)
    資料庫相關sql語句表相關創建表 create table t1(id int,name varchar(10));表相關sql語句修改表修改表名 rename table t1 to t2;修改表相關sql語句數據相關插入數據 insert into t1 values(5,'xiaoming',null
  • web安全之SQL注入(16)——delete和like注入
    delete from users where id=14 一般情況是網站後臺的sql語句,當我們測試刪除功能是否存在注入時,一定你要是用and測試,不要使用or測試。當使用or進行測試,跟一個布爾假值,這時如果前面的條件為真,你使用or跟一個假值,只會刪除一條數據,這裡問題不大,繼續測試
  • Oracle常用sql語句
    正在看的ORACLE教程是:  oracle常用sql語句。  8、查詢表結構  SQL> desc a  9、插入新記錄  SQL> insert into a values(1);  10、查詢記錄  SQL> select * from a;  11、更改記錄  SQL> update a set a=2;  12、刪除記錄
  • SQL入門教程第01課:認識SQL In Excel
    通過ADO執行SQL語言,VBA可以獲取、分析、管理多種來源的數據,甚至進而對獲取的數據再搭配字典、數組以及各種Excel自帶的功能作進一步自動化、智能化處理……換句話說,VBA運行SQL語句後,可以再整合Excel所有的功能進一步處理數據,除了Power BI,它和Excel其它功能並不是無縫銜接的——從數據的角度講,Power BI是一款數據分析的軟體,包含了M和DAX查詢語言,SQL
  • SQL 資料庫語句
    刪除索引:drop index idxname註:索引是不可更改的,想更改必須刪除重新建。9、說明:創建視圖:create view viewname as select statement刪除視圖:drop view viewname10、說明:幾個簡單的基本的sql語句選擇:select * from table1 where 範圍插入:insert into table1(field1,field2) values(value1
  • SQL語句中where條件為什麼寫上1=1
    不信,往下看: 例如,當我們要刪除博客ID稱為「202102111501」的記錄,我們可以這樣寫: delete from blog結果因為添加了or 1=1的永真條件,會導致整張表裡的記錄都被刪除了。
  • mysql常用sql語句總結
    聯合查詢union查詢語法:sql1 union all sql2;UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
  • 如何學習SQL語言
    為了幫助剛畢業找工作,或者想轉行成為數據分析師工作的朋友,我會用下面內容教會你怎樣用最快速、最容易理解的方式學會資料庫和SQL,並使用SQL進行數據分析:1.入門2.簡單查詢3.匯總分析4.複雜查詢5.多表查詢6.求職面試題7.檢驗SQL的學習效果第1部分:入門學習以下內容:1)了解資料庫的基本概念
  • 最強解讀MyBatis是如何執行SQL語句的?
    MyBatis 如何獲取 sql 語句?MyBatis 如何執行 sql 語句?MyBatis 如何實現不同類型數據之間的轉換?在過去程式設計師使用JDBC連接資料庫,總會帶來諸多不便。MyBatis 如何獲取 sql 語句? 與獲取資料庫源類似,只要解析Mapper配置文件中的對應標籤,就可以獲得對應的sql語句。
  • Python零基礎入門教程,如何操作資料庫?
    try: # 建立資料庫連接 conn = sqlite3.connect('test.db') # 創建遊標對象 cursor = conn.cursor() # 執行sql
  • MySQL 入門教程
    前端開發工程師為什麼寫這個入門教程呢?最近項目強迫我這個前端老司機使用 MySQL,雖然我在項目中已經使用過一段時間,為了寫出高質量的 SQL 語句,能快速定位解決資料庫引發的問題,系統的過一遍基礎,你也可以當做是我的筆記。有幸也認識一些 MySQL 的 DBA,這讓我學習起來比較快,能快速入門,進入實戰開發階段。
  • 15000 字的 SQL 語句大全
    tableA ) except (select a from tableB) except (select a from tableC) 17、說明:隨機取出10條數據select top 10 * from tablename order by newid() 18
  • 新鮮出爐的SQL語句大全
    :10、說明:幾個簡單的基本的sql語句選擇:  set @sql=’select top』+str(@end-@start+1)+』+from T where ridnot in(select top』+str(@str-1)+』Rid from T where Rid>-1)』  exec sp_executesql @sql
  • 經典SQL語句大全
    database-name2、說明:刪除資料庫drop database dbname3、說明:備份sql server--- 創建 備份數據的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat
  • 不懂就問:SQL 語句中 where 條件後 寫上1=1 是什麼意思
    例如,當我們要刪除客戶名稱為「張三」的記錄,我們可以這樣寫:delete from customerswhere name='張三'這個時候如果在where語句後面加上 or 1=1會是什麼後果?即:delete from customerswhere name='張三' or 1=1本來只要刪除張三的記錄,結果因為添加了or 1=1的永真條件,會導致整張表裡的記錄都被刪除了。
  • 不懂就問:SQL 語句中 where 條件後 寫上1=1 是什麼意思
    例如,當我們要刪除客戶名稱為「張三」的記錄,我們可以這樣寫:delete from customers where name='張三'這個時候如果在where語句後面加上 or 1=1會是什麼後果?dele
  • 資料庫sql語句 (提升篇)
    c on a.a=c.c inner join d on a.a=d.d where 12、說明:日程安排提前五分鐘提醒SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>513、說明:一條sql 語句搞定資料庫分頁select top 10