ACCESS數據庫的SQL語句教學
引子:如何找到ACCESS數據庫的SQL視圖:
1) 單擊下圖左側的:
2)單擊上圖頂部的,彈出如下圖對話框:
3) 單擊“關閉”,此時在菜單中的文件菜單下面出現一個SQL的下拉框;
4) 在“SQL”下拉框中選擇如下圖所示中的“SQL視圖即可”。
1、查詢所有記錄:Select *通常用於快速查瞧表中的記錄。當對表的結構無法確切記憶時,或要快速查瞧表中的記錄時,使用Select *就是很方便的。
Select * from 職工
2、投影查詢:很多時候並不需要將所有列的數據都顯示出來。投影查詢就就是允許用戶顯示所需要的列。假設顯示職工表中職工號、姓名、工資信息,具體操作方法如下。
Select 職工號,姓名,工資from 職工
在Select查詢中,還可以按照實際的需要或自己的喜好安排顯示列的順序,如果要把姓名放到第一列,則代碼如下:
Select姓名, 職工號,工資from 職工
3、條件查詢:顯示wh1或wh2倉庫、性別不為女、工資在1300~2100之間的職工信息。具體操作如下:
Select * from職工號where(倉庫號=’wh1’ or倉庫號=’wh2’) And not 性別=’女’ and 工資>=1300 and 工資工資<=2100
在這里一定要注意,(倉庫號=’wh1’ or倉庫號=’wh2’)一定要加括號,否則就不就是原題的意思。
4、謂詞In查詢:在查找特定條件的數據時,如果條件較多,就需要用到多個Or運算符,以查找滿足其中任一條的記錄。但使用多個Or運算符,將使Where子句變得過於冗長,這時使用In就非常清楚。另外,在后面講解的嵌套查詢中,也必須使用In查詢。下面以顯示zg1、zg2、zg11、zg15的訂購單信息為例具體講解一下。使用Or運算符
Select * from訂購單 where 職工號=’zg1’ or 職工號=’zg2’’) Or 職工號=’zg11’ Or 職工號=’zg15’
使用謂詞 In
Select * from 訂購單 where 職工號 in('zgl','zg2','zgl1','zg15')
在Select 語句中,還支持In與 Not 結合使用。假設顯示職工號不為zg1,zg2,zg11,zg15的訂購單信息,具體代碼如下∶使用 Or 運算符
Select * from 訂購單 where 職工號!='zgl'or 職工號!='zg2')Or 職工號!='zgl1' or 職工號!='zg15'
使用謂詞 In
Select * from訂購單 where 職工號 not in('zgl','zg2','zgll','zg15')
5、模糊Like 查詢∶有的時候,我們不清楚所要查詢的信息.如顯示職工信息,但不能確定該職工的姓名,只知道她姓名中含有"王"字,那該如何查找呢?SQL中提供了Like 關鍵字,使用Like進行了查詢時,還要指定通配符。
通 配 符 及 其 含 義
通配符 |
含 義 |
% |
包含0個或多個字符 |
_(下畫線) |
包含一個字符 |
[] |
指定范圍(如 【a-z】 |
[^] |
不屬於指定范圍(【^a-z】) |
在SQL語句中,還支持Like與Not結合使用。假設顯示姓名中不含有“王”字的職工信息,具體代碼如下:
Select * from職工 where 姓名 not like ’王%’
在該例中,如果您知道姓名中含有“王”字,並且姓名只有兩個字,那么可以進一步縮小查找范圍,具體代碼如下:
Select * from職工where 姓名not like’王_’
這樣就可以查找到姓名中只有兩個字,並且姓為“王”的職工信息。
6、空值NULL查詢:在SQL語句中使用IS NULL來進行就是否為空的判斷。下面以顯示性別為空的職工信息為例具體講解一下。
Select * from職工where 性別is null
假設顯示性別不為空的職工信息,具體代碼如下:
Select * from職工where 性別is not null
7、限制范圍Betwee n…And查詢:在數據醫療隊引擎查詢中,限制范圍也就是經常使用的一個條件。當然可以使用大於等於號、小於等於號與And運算符三者來完成范圍的限制,但使用Betwee n…And結構,會使SQL更清楚。下面以顯示工資在1300~1900之間的職工信息為例具體講解一下。
Betwee n…And語句
Select * from職工where 工資Betwee n 1300 And 1900
大於等於號、小於等於號與And運算符
Select * from職工where 工資>=1300 And 工資<=1900
在SQL語句中,還支持Betwee n…And與Not結合使用。假設顯示工資不在1 300~1900之間的職工信息,具體代碼如下:
Betwee n…And語句
Select * from職工where 工資not Betwee n 1300 And 1900
大於等於號、小於等於號與And運算符
Select * from職工where 工資<=1300 And 工資>=1900
8、消除重復字段數據Distinct查詢:在SQL投影查詢中,可能會有許多重復的數據,使用關鍵字Distinct就可以從結果集中除去重復的數據。下面以顯示職工的工資信息為例具體講解一下:
顯示有重復的數據
Select 工資from職工
顯示無重復的數據
Select Distinct工資from職工
9、單表嵌套查詢:就就是外層Select語句與內層Select語句都來源於同一張表。下面以顯示倉庫面積大於wh1倉庫面積的倉庫信息為例來講解一下。
首先利用Select語句求出wh1倉庫的倉庫面積,然后再顯示面積大於該值的倉庫信息。
Select * from倉庫where 面積>(select 面積from 倉庫where 倉庫號=’wh 1’)
嵌套查詢中也可以帶有邏輯運算符、謂詞In、Like、Betwee n…And結構。假設顯示wh1或wh2倉庫的工資不大於職工zg16工資的職工信息,並要求職工姓名不含有“平”字。
首先利用Select語句求出職工zg16的工資,然后再對姓名進行模糊查詢。
Select * from職工where 工資<=(select 工資from 職工where 職工號=’z g16’) and 姓名not like ‘%平%’ and 倉庫號in(‘wh1’, ‘wh2’)
10、多表嵌套查詢:多表嵌套查詢就就是外層Select語句與內層Select語句來源於不同的表,但表之間要存在關系。這也就是SQL語句中最重要的查詢。下面以顯示北京地區的職工信息為例來講解一下。
首先利用Select語句求出北京地區的倉庫號,然后利用倉庫號再顯示職工信息。
use 企業銷售管理系統
Select * from 職工where 倉庫號in(select 倉庫號from where 城市=’北京’)
不僅可以實現兩個表的嵌套,還可以實現多個表的嵌套,假設顯示北京地區的職工的訂購單信息。
首先利用Select語句得到北京地區的倉庫號,然后利用得到的倉庫號得到該倉庫中的職工號,再利用得到的職工號得到職工的訂購單信息。
Select * from 訂購單where 職工號in(Select 職工號from 職工where
倉庫號in (select 倉庫號from 倉庫where 城市=’北京’))
多表嵌套查詢中也可以帶有邏輯運算符、謂詞In、Like、Between、And結構。假設顯示北京地區的職工的訂購單信息,並且職工的工資大於1200,訂購日期為2003年9月3日~2006年1月1日。
Select * from 訂購單where 職工號in(Select 職工號from 職工where
工資>1200 and倉庫號in(select 倉庫號from 倉庫where 城市=’北京’))and 訂購日期between ‘2003-09-03’ and ‘2006-01-01’
11、單級排序查詢:排序的關鍵字是Order by,默認狀態下是升序,關鍵字是Asc。降序排列的關鍵字是Desc。排序字段可以是數值型,也可以是字符型、日期時間型。下面以按工資從高到低顯示職工信息為例來講解一下。
Select * from 職工Order by 工資desc
在排序查詢中還可以帶有邏輯運算符、謂詞In、Like、Between、And結構。假設顯示wh1或wh2倉庫的,工資不大於職工zg16工資的職工信息,並要求職工姓名不含有“平”字,按工資從低到高顯示。
首先利用Select語句求出職工zg16的工資,然后再對姓名進行模糊查詢,最后再排序。
Select * from 職工where 工資<=(Select 工資from 職工where 職工號=’zg16’) and 姓名not like ‘%平%’ and倉庫號in (‘wh1’,’wh2’) Order by工資
12、多級排序查詢∶按照一列進行排序后,如果該列有重復的記錄值,則重復記錄值這部分就沒有進行有效的排序,這就需要再附加一個字段,作為第二次排序的標准,對沒有排開的記錄進行再排列。下面以按工資從高到低顯示職工信息為例來講解一下。單級排序,按工資降序。
Select * from 職工 Order by 工資 desc 多級排序,先按工資降序,再按職工ID 升序。Select * from 職工 Order by 工資 desc,職工 ID asc
13、與別名一起使用的統計函數∶在實際編程中,有時候需要知道所有記錄某項值的總和、平均值、最大值等,這時就要用到統計函數查詢。常用的統計函數共有6個。
統 計 函 數 及 其 意 義
統計函數 |
含義 |
COUNT(*) |
統計選擇的記錄的個數 |
COUNT() |
統計特定列中值的個數 |
SUM() |
計算總和(必須是數值型字段) |
AVG() |
計算平均值(必須是數值型字段) |
MAX () |
確定最大值 |
NIN() |
確定最小值 |
在使用統計函數時,還要注意COUNT()、SUM()、AVG()可以使用DISTIN CT關鍵字,以在計算機中不包含重復的行。而對於MAX()、MIN()、COUNT(*),由於不會改變其結果,因此沒有必要使用DISTINCT。
利用SELECT語句顯示統計值是沒有列名的,下面以顯示職工的最大值、最小值、工資總和、平均工資、職工人數為例來講解一下。
Select max(工資),min(工資), SUM(工資),avg(工資),count(*) from 職工
這時會發現統計值沒有列名,現在來給統計字段添加列名。
Select max(工資)as 最大工資,min(工資) as最小工資, SUM(工資)as 工資總和,avg(工資)as 平均工資,count(*) as 職工人數from 職工
在統計函數中還可以加條件,假設顯示工資大於1500的職工的最大值、最小值、工資總和、平均工資、職工人數信息。
Select max(工資)as 最大工資,min(工資) as最小工資, SUM(工資)as 工資總和,avg(工資)as 平均工資,count(*) as 職工人數from 職工where 工資>1500
14、帶有統計函數的嵌套查詢:還可以利用統計函數得到的數據作為Select 查詢語句的條件進行查詢。下面以顯示工資大於所有職工平均值的職工信息為例來講解一下。
Select * from 職工where 工資>(select avg(工資) from 職工)
在統計函數查詢中可以帶有比較運算符、邏輯運算符、In、Betwee n…And等。假設顯示工資大於wh1或wh2倉庫中職工平均工資,並且職工姓名不含有“亮”字的職工信息。
Select * from 職工where 工資>(select avg(工資) from 職工where 倉庫號==’wh1’ or倉庫號==’wh2’) and 姓名not like ‘%亮%’
15、統計函數字段顯示在表字段中及運算字段:如果在職工表中添加一個職工平均工資值字段,這就對實際編程有很大的意義,即可以利用平均字段進行運算,大大提高編程速度。下面以在職工表中添加平均工資為例為講解一下。
Select 職工.*,(select avg(工資) from 職工) as 平均工資from 職工
在職工表中添加了一個平均工資字段,即在SELECT查詢字段中添加了一個SELECT子查詢。
在SELECT查詢中,還可以計算出每名職工的工資與所有職工平均工資之差,具體操作如下:
Select 職工.*,(select avg(工資) from 職工) as 平均工資,工資-(select avg (工資) from 職工) as 平均工資的差from 職工
16、分組查詢:使用GROUPBY分組查詢,要注意分組的標准一定要有意義,如顯示不同倉庫的平均工資,顯示不同職工的最大訂單金額等。如果顯示不同職工的平均工資那就沒有意義了。下面顯示不同倉庫的平均工資、工資和、最大工資、最小工資、工資人數信息為例來講解一下。
Select 倉庫號,max(工資)as 最大工資, min(工資)as 最小工資, sum(工資)as 工資總和, avg(工資)as 平均工資, count(*)as 職工人數from 職工group by 倉庫號
在分組查詢中還可以帶有邏輯運算符、謂詞In、Like、Betwee n…And結構。假設顯示工資大於zg1職工工資的不同倉庫的平均工資、工資和、最大工資、最小工資、工資人數信息。
首先利用SELECT語句求出職工zg1的工資,然后再分組顯示統計信息。
Select 倉庫號,max(工資)as 最大工資, min(工資)as 最小工資, sum(工資)as 工資總和, avg(工資)as 平均工資, count(*)as 職工人數from 職工where 工資>(Select 工資from 職工where 職工號=’zg1’) group by 倉庫號
17、帶有Having的分組查詢:分組以前的條件,要用Where關鍵字,而分組之后的條件則要使用Having關鍵字。下面以顯示不同倉庫的平均工資、工資和、最大工資、最小工資、工資人數信息,但要求該倉庫平均工資大於1760為例來講解一下。
Select 倉庫號,max(工資)as 最大工資, min(工資)as 最小工資, sum(工資)as 工資總和, avg(工資)as 平均工資, count(*)as 職工人數from 職工group by 倉庫號having avg(工資)>1760
在分組查詢的Having條件中還可以帶有邏輯運算符、謂詞In、Like、Betwe e n…And結構。假設顯示不同倉庫的平均工資、工資和、最大工資、最小工資、工資人數信息,但要求該倉庫的平均工資大於1760,最大工資與最小工資之差在380~800之間。
Select 倉庫號,max(工資)as 最大工資, min(工資)as 最小工資, sum(工資)as 工資總和, avg(工資)as 平均工資, count(*)as 職工人數from 職工group by 倉庫號having avg(工資)>1760 and max(工資)-min(工資) between 380 and 800
18、帶有分組的嵌套查詢:還可以利用分組得到的數據作為SELECT查詢語句的條件進行查詢。下面以顯示職工所在倉庫的最大工資與最小工資之差在3 80~800之間的職工所在倉庫信息為例為講解一下。
先求出職工所在倉庫的最大工資與最小工資之差在380~800之間的職工所在的倉庫號,再利用這個倉庫號顯示倉庫信息。
Select * from 倉庫,where 倉庫號in(Select 倉庫號from職工group by 倉庫號having d max(工資)-min(工資) between 380 and 800
19、內外層嵌套實現分組功能:利用group by分組顯示統計字段信息,有很多字段不能顯示。如顯示不同倉庫的平均工資信息,在這個查詢中只能顯示倉庫號,不能顯示職工號及職工的工資。因為不同倉庫的平均工資,有幾個倉庫就顯示幾條平均工資,而每個倉庫中的職工則有很多。
下面以顯示不同職工經手訂購單金額最大的訂單信息為例來講解一下。
在這里應該邊求出每名職工訂購單金額的最大值,邊顯示該職工所對應的這條訂購單信息。具體代碼如下:
Select a.* from 訂購單a where 金額=( select max(金額) from 訂購單whe re 職工號=a.職工號)
注意:上面語句中的訂購單a是給這個訂購單起的一個別名,大家可以把它看成就其實就是訂購單的一張復制的表,在這里運用它只是為了使內外層的嵌套更清晰、更容易理解。
20、分組查詢字段顯示在表字段中及運算字段:如果在職工表中添加職工所在倉庫的平均工資值字段,這就對實際編程有很大的意義,即可以利用平均字段進行運算,大大提高編程速度。下面以在職工表中添加職工所在的倉庫的平均工資字段為例來講解一下。
Select a.* ,(Select avg(工資) from 職工where 倉庫號=a.倉庫號) as 所在
倉庫的平均工資from 職工 a
在Select查詢中,還可以計算出每名職工的工資與職工所在倉庫的平均工資之差,具體操作如下:
Select a.* ,(Select avg(工資) from 職工where 倉庫號=a.倉庫號) as 所在
倉庫的平均工資,工資-(Select avg(工資) from 職工where 倉庫號=a.倉庫號) a s 所在倉庫的平均工資之差from 職工a
21、Exists謂詞查詢:其實In就是謂詞查詢,還有謂詞Exists與Exists,這兩個謂詞實現的功能是相同的,只是寫法不同。In多用於嵌套子查詢語句中,而Exists多用於判斷Select語句是否返回查詢結果。常用量詞有Any、All和Some 是同義詞。在進行比較運算時,只要子查詢中有一行能使結果為真,結果就為真。而All則要求子查詢中所有行都使結果為真時,結果才為真。下面以顯示那些倉庫中還沒有職工的倉庫信息為例,講解一下In謂詞與Exists謂詞在代碼上的不同。
用Exists謂詞實現:
Select * from 倉庫where not Exists(Select * from職工where倉庫號=倉庫.倉庫號)
用In謂詞實現:
Select * from 倉庫where 倉庫號not in(Select倉庫號from職工)
22、Any量詞查詢:Any量詞查詢,在進行比較運算時,只要子查詢中有一行能使結果為真,則結果即為真。下面就以顯示工資大於等於wh2倉庫中任一名職工工資的職工信息為例,講解一下Any量詞的應用。
用Any量詞實現:
Select * from 職工where 工資>=any(Select 工資from職工where倉庫號=’wh2’)
使用統計函數實現:
Select * from 職工where 工資>=(Select min(工資)from職工where倉庫號=’wh2’)
23、All量詞查詢:All量詞查詢,要求子查詢中所有行都使結果為真時,結果才為真。下面就以顯示工資大於等於wh1倉庫中所有職工工資的職工信息為例,講解一下All量詞的應用。
用Any量詞實現:
Select * from 職工where 工資>=All(Select 工資from職工where倉庫號=’wh1’)
使用統計函數實現:
Select * from 職工where 工資>=(Select MAX(工資)from職工where倉庫號=’wh1’)
前面講解的量詞查詢都可以用統計函數代替,但有些查詢是不能用統計函數代替的。下面以顯示工資大於所有不同倉庫的平均工資的職工信息為例為講解一下。
Select * from 職工where 工資>all(Select avg(工資)from職工group by
倉庫號)
該題用統計函數就無法解決。
24、顯示部分記錄的Top查詢:在編程中,有時只需顯示滿足條件的前幾條記錄,這時就可以使用Top關鍵字。可以直接使用Top數字,顯示指定條數記錄;也可以使用Top數字Percent,顯示所有滿足條件記錄的前百分之幾條記錄。
下面以顯示工資最高的前三條職工信息為例來講解一下。
Select top3 * from 職工order by工資desc
25、保存查詢:利用Into語句可以把查詢的結果保存成一張新表。下面就以備份“職工”表為例講解一下保存查詢。
Use 企業銷售管理系統
Select * into 職工備份from職工
這樣就生成一張新表,表名為“職工備份”。
26、集合的並運算:SQL支持集合的並運算(Union),即可以將兩個Sele c語句的查詢結果通過並運算合並成一個查詢結果。為了進行並運算,要求這樣的兩個查詢結果具有相同的字段個數,並且對應的字段的值要出自同一個值域,即具有相同的數據類型和取值范圍。
Select * from 倉庫where 城市=’北京’
Union
Select * from 倉庫where 城市=’上海’
27、集合的交運算:SQL支持集合的交運算(Intersect),即可以將兩個Se lec語句的查詢結果通過交運算合並成一個查詢結果。為了進行交運算,要求這樣的兩個查詢結果具有相同的字段個數,並且對應的字段的值要出自同一個值域,即具有相同的數據類型和取值范圍。
Select 倉庫號from 倉庫
Intersect
Select 倉庫號from 職工
注意它們對集合的差運算不支持。
28、多表連接查詢:多表連接查詢就是將多個表中的數據結合到一起的查詢,即連接操作可以在一個Select語句中完成從我個表中查找和處理數據。使用連接的列必須是可連接的,即它們具有相同的數據類型、相同的意義。使用連接的列,列名可以相同,也可以不同。
29、笛卡兒積:有的時候,如果連接條件沒有設置好,或者沒有設置連接條件,則結果將包含太多的行,這就是由笛卡兒積造成的。從原理上來講,連接首先將形成表的笛卡兒積,即形成用於連接的表中所有的行的組合。下面以倉庫表與職工表連接為例為講解一下。
Select * from 職工, 倉庫
這是從兩張表中顯示所有字段,所以字段有重復,並且產生了90條記錄,原因是倉庫表中有5條記錄,職工表有18條記錄,所以連接的結果是18×5=90條記錄。用於連接的表越多,則笛卡兒積的結果將越大。
30、多表連接:在進行多表連接時,一定要注意連接條件,下面以倉庫表與職工表連接為例來講解一下多表連接。
Select * from 職工,倉庫 where 職工.倉庫號=倉庫.倉庫號
這時顯示的記錄就沒有那么多了,只顯示18條記錄,並且發現兩張表的倉庫號是相對應的。
假設顯示工資大於1500,面積大於600的城市與姓名信息。
Select 城市,姓名 * from 職工,倉庫 where 職工.倉庫號=倉庫.倉庫號 a nd 工資工資>1500 and 面積>600
31、超連接查詢:超連接查詢也是連接查詢,所以必須有兩張或兩張以上的表。超連接查詢共有4種:內連接查詢、左連接查詢、右連接查詢、全連接查詢。
使用超連接查詢不僅可以把滿足條件的記錄顯示出來,還可以把一部分不滿足條件的記錄以NULL顯示出來。
1)內連接查詢:只有滿足連接條件的記錄才出現在查詢結果集中。下面以顯示面積大於600的倉庫號、職工號、城市、面積、工資信息為例為講解一下內連接:
超連接:
Select 倉庫.倉庫號,職工號,城市,面積,工資 from 倉庫 inner join 職
工 on 職工.倉庫號=倉庫.倉庫號 and 面積>600
普通連接:
Select 倉庫.倉庫號,職工號,城市,面積,工資 from 職工,倉庫 where 職工.倉庫號=倉庫.倉庫號 and 面積>600
2)左連接查詢:除滿足連接條件的記錄顯示外,第一張表中不滿足條件的記錄也出現在查詢結果集中。下面以顯示面積大於600的倉庫號、職工號、城市、面積、工資信息為例為講解一下左連接。
Select 倉庫.倉庫號,職工號,城市,面積,工資 from 倉庫 left join 職工 on 職工.倉庫號=倉庫.倉庫號 and 面積>600
3)右連接查詢:除滿足連接條件的記錄顯示外,第二張表中不滿足條件的記錄也出現
在查詢結果集中。下面以顯示面積大於600的倉庫號、職工號、城市、面積、工資信息為例為講解一下右連接。
Select 倉庫.倉庫號,職工號,城市,面積,工資 from 倉庫 right join 職
工 on 職工.倉庫號=倉庫.倉庫號 and 面積>600
4)全連接查詢:除滿足連接條件的記錄顯示外,兩張表中不滿足條件的記錄也出現
在查詢結果集中。下面以顯示面積大於600的倉庫號、職工號、城市、面積、工資信息為例為講解一下全連接。
Select 倉庫.倉庫號,職工號,城市,面積,工資 from 倉庫 full join 職工 on 職工.倉庫號=倉庫.倉庫號 and 面積>600
5)多表超連接查詢:前面講解了兩個表的超連接,那么如果是3張表或更多張表該如何實現超鏈接呢?下面以顯示面積大於600的倉庫號、職工號、城市、面積、工資、金額信息為例為講解一下多表超連接。要顯示的字段信息來源於3張表,倉庫表、職工表、訂購單表,這里實現倉庫表與職工表的左連接,職工表與訂購單表的右連接。
Select 倉庫.倉庫號,職工號,城市,面積,工資,金額 from 倉庫left join 職工 on 職工.倉庫號=倉庫.倉庫號right join 訂購單 on 職工.職工號=訂購單.職工號 and 面積>600
32、Insert插入語句:向數據庫表中插入數據是最常用的功能:
1)指定所有列:
Insert into 倉庫(倉庫號,城市,面積,創建時間) values (‘wh6’,’鄭州’,’800’,’2005-12-01’)
按下鍵盤上的F5鍵,會顯示(1行受影響),這表示已成功地插入一條記錄。再在數據庫引擎查詢文檔中輸入“Select * from 倉庫”,然后按下鍵盤上的F 5鍵,就可以執行該SQL語句,這樣就可以在查詢結果上看到你插入的記錄。在這里要注意,倉庫ID是自動編號,所以不能插入。其實上面的代碼還可以省略表后面的字段,這樣也可以成功地插入記錄。
Insert into 倉庫values (‘wh6’,’鄭州’,’800’,’2005-12-01’) 2)指定部分列:
下面以向倉庫表中添加一條記錄為例來講解一下指定部分列。
Insert into 倉庫(倉庫號,面積) values (‘wh7’,800)
上述代碼也可以這樣來寫:
Insert into 倉庫values (‘wh7’,null,800,null)
或
Insert into 倉庫(倉庫號,城市,面積,創建時間) values (‘wh7’,null,8 00,nul)
3)帶有子查詢的插入語句:使用帶有子查詢的插入語句,首先要注意兩個表的結構相同。下面還是用一個實例來講解一下。
首先創建一張與倉庫表結構相同的空表,然后在數據庫引擎查詢文檔中輸入如下代碼:
Select * into 倉庫 blank from 倉庫 where 面積<0
按下鍵盤上的F5鍵,會顯示(0行受影響),這表示已成功地插入一條記錄。再在數據庫引擎查詢文檔中輸入“Select * from 倉庫 blank”,然后按下鍵盤上的F5鍵,就可以執行該SQL語句,這樣就產生了一張與倉庫表結構相同的空表。
下面就可以利用帶有子查詢的插入語句向倉庫blank中插入記錄了。
Insert into 倉庫 blank(倉庫號,城市,面積,創建時間) select 倉庫號,城市,面積,創建時間from 倉庫where 面積>600
按下鍵盤上的F5鍵,會顯示(6行受影響),這表示已成功地插入6行記錄。再在數據庫引擎查詢文檔中輸入“Select * from 倉庫 blank”,然后按下鍵盤上的F5鍵,就可以執行該SQL語句,這樣就可以利用Insert語句一次向表中插入多條記錄。
33、Update更新語句:向數據庫表中添加記錄后,可能需要對數據庫進行修改。
1)修改所有記錄:
下面以為所有倉庫的面積都增加100為例為講解一個修改所有記錄。
Update 倉庫 set 面積=面積+100
2)指定條件的更新語句:
下面以把城市在上海或北京的倉庫的面積增加100為例,來講解一下指定條件的更新語句。
Use 企業銷售管理系統
Update 倉庫 set 面積=面積+100 where 城市=’上海’ or城市=’北京’
34、Delete刪除語句:與添加記錄一樣,刪除記錄也是數據庫中一個重要的功能。
Delete語句僅僅刪除數據庫表中的記錄,不會刪除表。
Delete語句不能刪除單個列的值,而是刪除整個記錄。
關鍵字WHERE可以有,也可以沒有。如果不加條件,則刪除整張表的所有記錄;如果有條件,則刪除表中滿足條件的記錄。
1)指定條件的刪除語句:
下面以刪除倉庫blank表中倉庫面積大於900的記錄為例,來講解一下指定條件的刪除語句。
Delete from倉庫 blank 面積>900
2)刪除表中所有記錄:
下面以刪除倉庫blank表中所有記錄為例,來講解一下刪除表中所有記錄。
Delete from倉庫 blank
或
truncate from倉庫 blank
truncate語句與Delete語句之間是有區別的,Delete語句實際上是對表中每一個記錄執行刪除操作,而數據庫執行隨之可能產生的所有任務,如觸發器;truncate語句僅僅把所有記錄一次刪除,將會忽略定義的觸發器,因此執行速度比Delete語句要快。由於truncate語句不處理刪除引起的其他事件,因此使用它可能產生數據庫完整性問題,所以對於有依賴關系的表,最好使用Delete語句刪除。