




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
SQL常用的語句以及建表,1.首先我們來認識一下,ASP.NET的整個訪問過程是怎么樣的? 過程:客戶端的瀏覽器向Web服務(wù)器提出ASP.NET頁面請求(包括數(shù)據(jù)庫的操作),服務(wù)器將把該頁面由Asp.dll文件進行解釋,并在服務(wù)器端運行,完成數(shù)據(jù)庫的操作,再把數(shù)據(jù)庫操作的結(jié)果生成動態(tài)的網(wǎng)頁返回給瀏覽器,瀏覽器再將該網(wǎng)頁內(nèi)容顯示在客戶端。 總結(jié):客戶端(頁面請求)服務(wù)器(服務(wù)端)頁面解釋(服務(wù)端)運行,完成數(shù)據(jù)操作生成動態(tài)網(wǎng)頁(響應(yīng))客戶端 這種就是典型的B/S(Browser/Server,瀏覽器/服務(wù)器)模型: 客戶端(請求)服務(wù)器(響應(yīng))客戶端 2.建表過程? 創(chuàng)建數(shù)據(jù)庫建表在表中加字段(也就是列)字段中設(shè)置主鍵 (1)什么叫主鍵?(區(qū)分每一行的數(shù)據(jù)) 主鍵就是數(shù)據(jù)行的唯一標識。不會重復的列才能當主鍵。一個表可以沒有主鍵,但是會非常難以處理,因此沒有特殊理由表中都要設(shè)定主鍵。 主鍵有兩種選用策略,業(yè)務(wù)主鍵和邏輯主鍵。業(yè)務(wù)主鍵是使用有業(yè)務(wù)意義的字段做主鍵,比如身份證號,銀行賬號等;邏輯主鍵是使用沒有任何業(yè)務(wù)意義的字段做主鍵,完全給程序看的,業(yè)務(wù)人員不會看地數(shù)據(jù)。因為很難保證業(yè)務(wù)主鍵不會重復,(身份證重復),不會變化(賬號升位),比如說電話號碼,前面加個8,就找不到對應(yīng)的人了。因此推薦用邏輯主鍵。 (2)表間關(guān)聯(lián)、外鍵(Foreign key)(具體怎么查詢聯(lián)接在一起沒研究過) 當有相同的記錄列時,把這些列放在一個表中,然后通過編號關(guān)聯(lián),這時就要建立兩個表。一個是設(shè)編號為主鍵的表1,另一個是含有編號的表2(這個編號就叫做外鍵),兩個表的編號是一樣的。表2的唯一字段(編號)關(guān)聯(lián)著表1,這個字段就是指向這個表1主鍵的外鍵。如下圖: (3)常用的字段類型 bit:可寫false和true char(10):可寫入10個字符 int:可寫入(32位)整數(shù) bigint:可寫入(64位)整數(shù)(這里的32和64是說可寫入的整數(shù)值從0到232/64-1) (可以用c#里的int.MaxValue查看它最大能容納多大的值) nvarchar(50):含有中文的字符串 nvarchar(Max):比如寫入不知字數(shù)文章字符串,Varchar(50):不含中文的字符串 Char(n)不足長度n的部分用空格填充 Varchar:var:variable可變的 注意:比如登陸界面的用戶名和密碼,就不要用char(n),這樣會得不到正確的數(shù)據(jù),所以數(shù)據(jù)正好是長度n就用char(n),否則就用varchar或者nvarchar。 (4)主鍵數(shù)據(jù)類型 int(或bigint)+標識列(自動增長字段); Uniqueidentifier(又稱Guid,UUID); 添加自增列的方法:在設(shè)計視圖里找到標識,選擇是,標識遞增量里改就行了。 注意:一個表只能有一個標識字段(自增列),用標識列實現(xiàn)字段自增可以避免并發(fā)(同時有兩個人訪問這個記錄)等問題,用標識列的字段在insert的時候不能指定主鍵的值。 Guid算法是一種可以產(chǎn)生位移標識的高效算法,它使用網(wǎng)卡MAC地址、納秒時間、芯片ID碼等算出來的,這樣保證每次生成的Guid永遠不會重復,無論是同一個計算機上還是不同的計算機。在公元3400年以前產(chǎn)生的Guid任何其他產(chǎn)生過的Guid都不相同。SQLserver中生成Guid的函數(shù)newid(),Net中生成Guid的方法:Guid.NewGuid(),返回Guid類型。,優(yōu)缺點:int自增字段的優(yōu)點:占用空間小,無需開發(fā)人員干預、易讀;缺點:效率低(在數(shù)據(jù)庫中運行);數(shù)據(jù)導入導出的時候很痛苦。 Guid的優(yōu)點:效率高,數(shù)據(jù)導入導出方便;缺點:占用空間大(也不算大,占數(shù)據(jù)庫的38%)、不易讀。 業(yè)界主流傾向于使用Guid。 比如可以給字段默認值,如Guid類型主鍵的默認值設(shè)定為newid(),就會自動生成,但是會自動放在任一行(按Guid排序),所以不易查詢,我們一般很少這么干。 3.SQL語句 SQL主要分為DDL(數(shù)據(jù)定義語言)和DML(數(shù)據(jù)操作語言)兩類 ,Create Table、Drop Table等屬于DDL(改變表的結(jié)構(gòu)),select、insert、update等屬于DML。 注意:SQL語句中字符串用單引號。 SQL語句是大小寫不敏感的,不敏感指的是SQL關(guān)鍵字和列名(即使小寫,系統(tǒng)也會幫你更正),字符串值還是大小寫敏感。 創(chuàng)建表,刪除表不僅可以手工完成,還可以執(zhí)行SQL語句完成,在自動化部署,數(shù)據(jù)導入中用的很多。 (1)單表查詢 Select from 表名 “*” 表示表中所有的字段,例:select * from t_student; 操作字段 例:select t_name 姓名,t_number 學號 from t_student; 注意:各字段用“,”分隔,上例中字段名后面用空格分隔的是該字段對應(yīng)的別名。 對字段執(zhí)行某些運算 例:select t_score+5 from t_student; 這種方式操作,只能改變顯示的內(nèi)容,并不會改變存儲在表中的數(shù)據(jù)。 (2)操作記錄(也叫做操作行) 篩選:Select * from 表名 where 條件;意思是選擇符合條件那些記錄(行) 查詢條件如下:比較(=,=,(不等號) 確定范圍(between 下限 and 上限,not between 下限 and 上限 ):在下限值和上限值之間 確定集合(in,not in):檢查一個屬性值是否屬于集合中的值。 例:select * from t_student where t_mizu not in (漢,回);查詢不是漢族和回族的學生信息 字符匹配(like,not like):用于構(gòu)造條件表達式中的字符匹配 例:select * from t_student where t_name like 張%;查詢姓“張”的學生信息,注意:使用like前的列名必須是字符串類型。在like中經(jīng)常使用的有兩種通配符:“_”(下劃線)表示任一單個字符;“%”(百分號)表示任意長度字符。 上面的例子把張%變成%張%表示查詢該字段下含有張字的學生信息(記錄),如果把張%變成%張表示查詢該字段下以張字結(jié)尾的學生信息。 邏輯運算(and,or ,not):用于構(gòu)造復合表達式 在構(gòu)造查詢條件時,還可以使用邏輯運算符(and,or ,not)組成復合查詢。 例:select * from t_student where t_scorefrom 表名 where 條件 order by asc|desc, asc|desc, 通過order by來改變輸出結(jié)果的排序方式。 其中asc表示查詢結(jié)果按照升序排序,desc指定按照降序排序。系統(tǒng)默認按照升序排序,中括號里這兩個值可以不寫。 例:select * from t_student order by t_sex desc,t_number asc;按照性別降序排序的同時按照學號的升序顯示。 注意:由于在排序的過程中,服務(wù)器執(zhí)行的時間比一般select語句執(zhí)行的時間要長,因此,不是特別需要的情況下,建議少用order子句。,查詢互不相同的記錄:select distinct from 表名;查詢不重復的數(shù)據(jù),剔除重復的數(shù)據(jù)。 集合函數(shù) 前面介紹的內(nèi)容都集中在從一個數(shù)據(jù)表中按照用戶的要求取得一個或多個記錄,如果要對表中的記錄進行數(shù)據(jù)統(tǒng)計,就要用到集合函數(shù)。 Count():統(tǒng)計記錄個數(shù)。 Avg():計算某個數(shù)值型字段值的平均值。 Sum():計算某個數(shù)值型字段值的總和。 Max():計算某個數(shù)值型字段值的最大值。 Min():計算某個數(shù)值型字段值的最小值。 在select語句中利用集合函數(shù)結(jié)合前面所講的查詢條件可以統(tǒng)計出用戶感興趣的信息。例如:select count(*) from t_student;統(tǒng)計t_student數(shù)據(jù)表中學生的人數(shù)。 Select sum(t_score) from t_student;統(tǒng)計t_student數(shù)據(jù)表中所有學生的總分。 (3)添加記錄 向表格中插入新的行: insert into 表名() values (); 這句的意思是添加值1到列1中,值2到列2中生成一條記錄(行)。,表2中的列數(shù)據(jù)復制到表1中的列中(實現(xiàn)列的復制功能,實用) insert into 表1名()selectfrom 表2名 where 條件 這句的意思是從表2中滿足條件的列數(shù)據(jù)復制到表1相應(yīng)的列中,并生成記錄。列1對 應(yīng)列1,列2對應(yīng)列2,列是相互對應(yīng)的。 注意 :上面的語句哪些地方有括號,哪些地方?jīng)]括號,這些都是要注意的地方。值1 對應(yīng)列1,值2對應(yīng)列2,而且插入的數(shù)據(jù)類型也要一致。 如果使用insert語句向數(shù)據(jù)表中添加記錄時僅指定部分的字段,其他沒有指定的字段 按下面4種情況處理: 如果該字段是自增列,不用管它,自己會自動增加一個新值。 如果該字段有默認值,就使用默認值。 如果該字段被設(shè)置成可以接受空值,而且沒有默認值,該字段為空值。 如果該字段不能接受空值,而且沒有默認值,就會出現(xiàn)錯誤。(值得注意) 跨數(shù)據(jù)庫復制列記錄(實用): insert into 數(shù)據(jù)庫名1.dbo.表1名()selectfrom 數(shù)據(jù)庫名2.dbo.表2名 where 條件,(4)修改數(shù)據(jù)庫中的數(shù)據(jù)記錄(實用) Update 表名 set 列1=值1,列2=值2where 條件; 無where子句,則表中的所有記錄都將被修改。 Update 表名 set 目的列=源列(提供資源的列);意思是源列的數(shù)據(jù)復制到目的列中。 區(qū)別:上面這句只能在一個表中進行,而且不能生成新的記錄,只是對原有的列進行數(shù)據(jù)修改,而insert語句進行復制時,可以跨數(shù)據(jù)庫,跨表進行列的復制,并且生成新的記錄。 (5)表添加字段(列) Alter table 表名 add 列名 字段類型; Alter table 表名 drop column 列名; (6)刪除數(shù)據(jù)庫 Drop database 數(shù)據(jù)庫名; (7)刪除表 Drop table 表名;刪除表 Delete from 表名 where 條件;清空表數(shù)據(jù),而不刪除表,無where條件,刪除所有記錄。 Truncate table 表名;快速清空數(shù)據(jù)庫內(nèi)指定表內(nèi)容,不會保留日志。,(8)其他 identify 類型的列,里面的值是自動增加的。也就是自增列類型。 Select identify;查看目前增加自增列最新的值。 identify是表示最近一次向具有identify屬性(即自增列)的表插入數(shù)據(jù)時對應(yīng)的自增列的值,是系統(tǒng)定義的全局變量。一般系統(tǒng)定義的全局標量都是以開頭,用戶自定義變量以開頭。比如有個表A,它的自增列是id,當向A表插入一行數(shù)據(jù)后,如果插入數(shù)據(jù)后自增列的值自動增加到101,則通過select identify得到的值就是101。使用identify的前提是在進行insert操作后,執(zhí)行select identify的時候鏈接沒有關(guān)閉,否則得到的將是null值。 編輯200頁以后的記錄,在左上角有個SQL的按鈕,然后修改select top (記錄數(shù))里的記錄數(shù)就可以顯示了。 在不刪除sql server表中數(shù)據(jù)的情況下,讓自增列從1開始? 刪除表的記錄以后,如何使新記錄的編號仍然從1開始? 有兩種方法truncate table 表名;這樣不但將數(shù)據(jù)刪除,而且可以重新置位identify屬性的字段。(2)delete from 表名; Dbcc checkident(表名,reseed,0);重新置位identify屬性的字段,讓其下個值從1開始。,(9)創(chuàng)建表 Use 數(shù)據(jù)庫 Create table 表名(字段名 字段屬性,) 例:book_id int not null primary key /值非空,并設(shè)為主鍵 (10)空值處理 數(shù)據(jù)庫中,一個列如果沒有指定值,那么值就為null,這個null和c#中的null不同,數(shù)據(jù)庫中的null表示“不知道”,而不是表示沒有,因此select null+1結(jié)果是null(比如說1號的年齡為不知道,2號的年齡為1,兩者相加為不知道),因此“不知道”加1的結(jié)果還是“不知道”。 Select * from T_employee where fname=null; Select * from T_employee where fnamenull; 這兩個例子都沒有任何返回結(jié)果,因為數(shù)據(jù)庫也“不知道”; 原因是查詢這個表中所有的fname=不知道的數(shù)據(jù),查任何一條結(jié)果都等于false,fname里存在null不知道,不知道=不知道,所以,等不等于null都是一樣的結(jié)果,就是不出結(jié)果。 解決方法:SQL中使用is null、is not null來進行空值判斷 Select * from T_employee where fname is null; Select * from T_employee where fname is not null;,(11)限制結(jié)果集行數(shù)(主要用于分頁功能) Select top 行數(shù) 列名 from 表名 order by 列名 descasc; 這句語句的意思是選擇表中前幾行數(shù)據(jù),再根據(jù)所選的列排序。 例 :select top 3 * from T_employee where fnumber not in (select top 5 fnumber from T_employee order by fsalary desc) Order by fsalary desc; 括號內(nèi)是先查詢前5的數(shù)據(jù),然后去掉前5的數(shù)據(jù),查詢從第6開始的前三條數(shù)據(jù)。 SQL server 2005 后增加了Row_number函數(shù)簡化實現(xiàn)(沒了解到)。 (12)聯(lián)合結(jié)果集(用于寫報表比較合適) 用union來連接表 例:select FNumber,FName,FAge from T_Employee union select FidCardNumber,FName,FAge from T_TempEmployee 注:列數(shù)相同,類型相同。 基本原則:每個結(jié)合集必須有相同的列數(shù),每個結(jié)合集的列必須類型相容(可以理解為相同)。 Union合并兩個查詢結(jié)合集,并且將其中完全重復的數(shù)據(jù)行合并為一條。,Union因為要進行重復值掃描,所以效率低,因此如果不是確定要合并重復行,那么就用union all。 兩個表中的數(shù)據(jù)求和: 例:select id,name from xp union all select id,name from xy union all select 0,sum(name)from(select name from xp union all select name from xy)a (13)如何將SQL Service 2008里的查詢結(jié)果導出到Excel表內(nèi)? 查詢完之后再結(jié)果欄內(nèi)按Ctrl+A將結(jié)果全選,按右鍵選擇“將結(jié)果另存為”,然后保存為“*.csv”文件,就可以用Excel打開了?;蛘摺斑B同標題一起復制”(全選下),然后將結(jié)果拷貝到excel表中就可以了。 (14)復制表(只復制結(jié)構(gòu),源表名:a 新表名:b) select * into b from a where 11,(15)將Excel表中的數(shù)據(jù)導入到SQL中? 第一步:登錄到SQL Service Management Studio; 第二步:在“對象資源管理器”中右鍵單擊“管理”,在彈出列表中單擊“導入”數(shù)據(jù); 第三步:在“導入向?qū)А睂υ捒蛑袉螕簟跋乱徊健?,進入到“選擇數(shù)據(jù)源”對話框,在“數(shù)據(jù)源”列表中選擇“Microsoft Excell”,同時選擇相應(yīng)的Excell文檔,完成后單擊“下一步”(一定要勾選對話框中的“首行包含列名稱”,因此它是將Excell文檔中的列標題為數(shù)據(jù)庫表中的列項標題),也就是說第一行為SQL的列名。 第四步:重新打開SQL Service Management Studio,進入到導入的數(shù)據(jù)庫表,可以發(fā)現(xiàn)所導入的Excell文檔數(shù)據(jù)。,當瀏覽器在請求一個Web頁面是從URL開始的。下面就是過程描述: 1 輸入URL地址或者點擊URL的一個鏈接 2 瀏覽器根據(jù)URL地址,結(jié)合DNS,解析出URL對應(yīng)的IP地址 3 發(fā)送HTTP請求 4 開始連接請求的服務(wù)器并且請求相關(guān)的內(nèi)容(至于請求時怎么被處理的,這里暫時不討論) 5 瀏覽器解析從服務(wù)器端返回的內(nèi)容,并且把頁面顯現(xiàn)出來,同時也繼續(xù)進行其他的請求。 當一個瀏覽者在瀏覽器地址框中打入某一個域名,或者從其他網(wǎng)站點擊了鏈接來到了這個域名,瀏覽器向這個用戶的上網(wǎng)接入商發(fā)出域名請求,接入商的DNS服務(wù)器要查詢域名數(shù)據(jù)庫,看這個域名的DNS服務(wù)器是什么。然后到DNS服務(wù)器中抓取DNS記錄,也就是獲取這個域名指向哪一個IP地址。在獲得這個IP信息后,接入商的服務(wù)器就去這個IP地址所對應(yīng)的服務(wù)器上抓取網(wǎng)頁內(nèi)容,然后傳輸給發(fā)出請求的瀏覽器。 這個過程描述起來滿復雜,但實際上不到一兩秒鐘就完成了 域名-hosts-本地dns緩存-dns服務(wù)器,正確順序是第一種 如下: 本地DNS緩存 本地HOSTS文件 DNS服務(wù)器 具體如下: 一臺計算機訪問Internet的DNS解析過程是(以訪問站點為例),首先查看當前計算機的DNS緩存里有沒有這條記錄;如果沒有,再查看當前計算機的“hosts”文件,“hosts”文件位于C:WINDOWSsystem32driversetc目錄當中;如果hosts文件中沒有,就接著查找當前DNS服務(wù)器里有沒有這條記錄;如果還是沒有,看當前的DNS服務(wù)器有沒有配置DNS轉(zhuǎn)發(fā)器,如果配置了DNS轉(zhuǎn)發(fā)器就查找它的上一級DNS服務(wù)器,如果沒有配置DNS轉(zhuǎn)發(fā)器,就直接查找
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 離職工資結(jié)算協(xié)議書范本
- 餐飲連鎖企業(yè)廚師長職位競聘及培訓協(xié)議
- 餐飲品牌授權(quán)與餐廳承包合同
- 個人美容院租賃合同模板
- 代駕泊車服務(wù)合同模板(含事故處理)
- 餐飲店租賃承包合作協(xié)議
- 【課件】彈力+2024-2025學年人教版物理八年級下冊+
- 產(chǎn)后抑郁生活護理常規(guī)
- 組織管理方法論
- 中班健康保護眼睛教案
- 顯示屏幕抗反光技術(shù)研究-洞察分析
- 地磅及地磅房施工方案
- 16S518雨水口標準圖集
- T-CECA-G 0307-2024 數(shù)字化碳管理平臺 建設(shè)評價指南
- 《建立特種設(shè)備“日管控、周排查、月調(diào)度”工作機制》專題培訓
- 《破產(chǎn)重整》課件
- 提高治療室物品放置規(guī)范率
- 2024年河南省中等職業(yè)教化技能大賽汽車運用與修理類競賽方案
- 膝關(guān)節(jié)骨關(guān)節(jié)炎的臨床護理
- 《職場溝通技巧》課件
- 遼寧大學《生態(tài)學》2023-2024學年第一學期期末試卷
評論
0/150
提交評論