




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SQL常用的語句以及建表,1.首先我們來認(rèn)識一下,ASP.NET的整個(gè)訪問過程是怎么樣的? 過程:客戶端的瀏覽器向Web服務(wù)器提出ASP.NET頁面請求(包括數(shù)據(jù)庫的操作),服務(wù)器將把該頁面由Asp.dll文件進(jìn)行解釋,并在服務(wù)器端運(yùn)行,完成數(shù)據(jù)庫的操作,再把數(shù)據(jù)庫操作的結(jié)果生成動(dòng)態(tài)的網(wǎng)頁返回給瀏覽器,瀏覽器再將該網(wǎng)頁內(nèi)容顯示在客戶端。 總結(jié):客戶端(頁面請求)服務(wù)器(服務(wù)端)頁面解釋(服務(wù)端)運(yùn)行,完成數(shù)據(jù)操作生成動(dòng)態(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ù)行的唯一標(biāo)識。不會(huì)重復(fù)的列才能當(dāng)主鍵。一個(gè)表可以沒有主鍵,但是會(huì)非常難以處理,因此沒有特殊理由表中都要設(shè)定主鍵。 主鍵有兩種選用策略,業(yè)務(wù)主鍵和邏輯主鍵。業(yè)務(wù)主鍵是使用有業(yè)務(wù)意義的字段做主鍵,比如身份證號,銀行賬號等;邏輯主鍵是使用沒有任何業(yè)務(wù)意義的字段做主鍵,完全給程序看的,業(yè)務(wù)人員不會(huì)看地?cái)?shù)據(jù)。因?yàn)楹茈y保證業(yè)務(wù)主鍵不會(huì)重復(fù),(身份證重復(fù)),不會(huì)變化(賬號升位),比如說電話號碼,前面加個(gè)8,就找不到對應(yīng)的人了。因此推薦用邏輯主鍵。 (2)表間關(guān)聯(lián)、外鍵(Foreign key)(具體怎么查詢聯(lián)接在一起沒研究過) 當(dāng)有相同的記錄列時(shí),把這些列放在一個(gè)表中,然后通過編號關(guān)聯(lián),這時(shí)就要建立兩個(gè)表。一個(gè)是設(shè)編號為主鍵的表1,另一個(gè)是含有編號的表2(這個(gè)編號就叫做外鍵),兩個(gè)表的編號是一樣的。表2的唯一字段(編號)關(guān)聯(lián)著表1,這個(gè)字段就是指向這個(gè)表1主鍵的外鍵。如下圖: (3)常用的字段類型 bit:可寫false和true char(10):可寫入10個(gè)字符 int:可寫入(32位)整數(shù) bigint:可寫入(64位)整數(shù)(這里的32和64是說可寫入的整數(shù)值從0到232/64-1) (可以用c#里的int.MaxValue查看它最大能容納多大的值) nvarchar(50):含有中文的字符串 nvarchar(Max):比如寫入不知字?jǐn)?shù)文章字符串,Varchar(50):不含中文的字符串 Char(n)不足長度n的部分用空格填充 Varchar:var:variable可變的 注意:比如登陸界面的用戶名和密碼,就不要用char(n),這樣會(huì)得不到正確的數(shù)據(jù),所以數(shù)據(jù)正好是長度n就用char(n),否則就用varchar或者nvarchar。 (4)主鍵數(shù)據(jù)類型 int(或bigint)+標(biāo)識列(自動(dòng)增長字段); Uniqueidentifier(又稱Guid,UUID); 添加自增列的方法:在設(shè)計(jì)視圖里找到標(biāo)識,選擇是,標(biāo)識遞增量里改就行了。 注意:一個(gè)表只能有一個(gè)標(biāo)識字段(自增列),用標(biāo)識列實(shí)現(xiàn)字段自增可以避免并發(fā)(同時(shí)有兩個(gè)人訪問這個(gè)記錄)等問題,用標(biāo)識列的字段在insert的時(shí)候不能指定主鍵的值。 Guid算法是一種可以產(chǎn)生位移標(biāo)識的高效算法,它使用網(wǎng)卡MAC地址、納秒時(shí)間、芯片ID碼等算出來的,這樣保證每次生成的Guid永遠(yuǎn)不會(huì)重復(fù),無論是同一個(gè)計(jì)算機(jī)上還是不同的計(jì)算機(jī)。在公元3400年以前產(chǎn)生的Guid任何其他產(chǎn)生過的Guid都不相同。SQLserver中生成Guid的函數(shù)newid(),Net中生成Guid的方法:Guid.NewGuid(),返回Guid類型。,優(yōu)缺點(diǎn):int自增字段的優(yōu)點(diǎn):占用空間小,無需開發(fā)人員干預(yù)、易讀;缺點(diǎn):效率低(在數(shù)據(jù)庫中運(yùn)行);數(shù)據(jù)導(dǎo)入導(dǎo)出的時(shí)候很痛苦。 Guid的優(yōu)點(diǎn):效率高,數(shù)據(jù)導(dǎo)入導(dǎo)出方便;缺點(diǎn):占用空間大(也不算大,占數(shù)據(jù)庫的38%)、不易讀。 業(yè)界主流傾向于使用Guid。 比如可以給字段默認(rèn)值,如Guid類型主鍵的默認(rèn)值設(shè)定為newid(),就會(huì)自動(dòng)生成,但是會(huì)自動(dòng)放在任一行(按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)也會(huì)幫你更正),字符串值還是大小寫敏感。 創(chuàng)建表,刪除表不僅可以手工完成,還可以執(zhí)行SQL語句完成,在自動(dòng)化部署,數(shù)據(jù)導(dǎo)入中用的很多。 (1)單表查詢 Select from 表名 “*” 表示表中所有的字段,例:select * from t_student; 操作字段 例:select t_name 姓名,t_number 學(xué)號 from t_student; 注意:各字段用“,”分隔,上例中字段名后面用空格分隔的是該字段對應(yīng)的別名。 對字段執(zhí)行某些運(yùn)算 例:select t_score+5 from t_student; 這種方式操作,只能改變顯示的內(nèi)容,并不會(huì)改變存儲(chǔ)在表中的數(shù)據(jù)。 (2)操作記錄(也叫做操作行) 篩選:Select * from 表名 where 條件;意思是選擇符合條件那些記錄(行) 查詢條件如下:比較(=,=,(不等號) 確定范圍(between 下限 and 上限,not between 下限 and 上限 ):在下限值和上限值之間 確定集合(in,not in):檢查一個(gè)屬性值是否屬于集合中的值。 例:select * from t_student where t_mizu not in (漢,回);查詢不是漢族和回族的學(xué)生信息 字符匹配(like,not like):用于構(gòu)造條件表達(dá)式中的字符匹配 例:select * from t_student where t_name like 張%;查詢姓“張”的學(xué)生信息,注意:使用like前的列名必須是字符串類型。在like中經(jīng)常使用的有兩種通配符:“_”(下劃線)表示任一單個(gè)字符;“%”(百分號)表示任意長度字符。 上面的例子把張%變成%張%表示查詢該字段下含有張字的學(xué)生信息(記錄),如果把張%變成%張表示查詢該字段下以張字結(jié)尾的學(xué)生信息。 邏輯運(yùn)算(and,or ,not):用于構(gòu)造復(fù)合表達(dá)式 在構(gòu)造查詢條件時(shí),還可以使用邏輯運(yùn)算符(and,or ,not)組成復(fù)合查詢。 例:select * from t_student where t_scorefrom 表名 where 條件 order by asc|desc, asc|desc, 通過order by來改變輸出結(jié)果的排序方式。 其中asc表示查詢結(jié)果按照升序排序,desc指定按照降序排序。系統(tǒng)默認(rèn)按照升序排序,中括號里這兩個(gè)值可以不寫。 例:select * from t_student order by t_sex desc,t_number asc;按照性別降序排序的同時(shí)按照學(xué)號的升序顯示。 注意:由于在排序的過程中,服務(wù)器執(zhí)行的時(shí)間比一般select語句執(zhí)行的時(shí)間要長,因此,不是特別需要的情況下,建議少用order子句。,查詢互不相同的記錄:select distinct from 表名;查詢不重復(fù)的數(shù)據(jù),剔除重復(fù)的數(shù)據(jù)。 集合函數(shù) 前面介紹的內(nèi)容都集中在從一個(gè)數(shù)據(jù)表中按照用戶的要求取得一個(gè)或多個(gè)記錄,如果要對表中的記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì),就要用到集合函數(shù)。 Count():統(tǒng)計(jì)記錄個(gè)數(shù)。 Avg():計(jì)算某個(gè)數(shù)值型字段值的平均值。 Sum():計(jì)算某個(gè)數(shù)值型字段值的總和。 Max():計(jì)算某個(gè)數(shù)值型字段值的最大值。 Min():計(jì)算某個(gè)數(shù)值型字段值的最小值。 在select語句中利用集合函數(shù)結(jié)合前面所講的查詢條件可以統(tǒng)計(jì)出用戶感興趣的信息。例如:select count(*) from t_student;統(tǒng)計(jì)t_student數(shù)據(jù)表中學(xué)生的人數(shù)。 Select sum(t_score) from t_student;統(tǒng)計(jì)t_student數(shù)據(jù)表中所有學(xué)生的總分。 (3)添加記錄 向表格中插入新的行: insert into 表名() values (); 這句的意思是添加值1到列1中,值2到列2中生成一條記錄(行)。,表2中的列數(shù)據(jù)復(fù)制到表1中的列中(實(shí)現(xiàn)列的復(fù)制功能,實(shí)用) insert into 表1名()selectfrom 表2名 where 條件 這句的意思是從表2中滿足條件的列數(shù)據(jù)復(fù)制到表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ù)表中添加記錄時(shí)僅指定部分的字段,其他沒有指定的字段 按下面4種情況處理: 如果該字段是自增列,不用管它,自己會(huì)自動(dòng)增加一個(gè)新值。 如果該字段有默認(rèn)值,就使用默認(rèn)值。 如果該字段被設(shè)置成可以接受空值,而且沒有默認(rèn)值,該字段為空值。 如果該字段不能接受空值,而且沒有默認(rèn)值,就會(huì)出現(xiàn)錯(cuò)誤。(值得注意) 跨數(shù)據(jù)庫復(fù)制列記錄(實(shí)用): insert into 數(shù)據(jù)庫名1.dbo.表1名()selectfrom 數(shù)據(jù)庫名2.dbo.表2名 where 條件,(4)修改數(shù)據(jù)庫中的數(shù)據(jù)記錄(實(shí)用) Update 表名 set 列1=值1,列2=值2where 條件; 無where子句,則表中的所有記錄都將被修改。 Update 表名 set 目的列=源列(提供資源的列);意思是源列的數(shù)據(jù)復(fù)制到目的列中。 區(qū)別:上面這句只能在一個(gè)表中進(jìn)行,而且不能生成新的記錄,只是對原有的列進(jìn)行數(shù)據(jù)修改,而insert語句進(jìn)行復(fù)制時(shí),可以跨數(shù)據(jù)庫,跨表進(jìn)行列的復(fù)制,并且生成新的記錄。 (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)容,不會(huì)保留日志。,(8)其他 identify 類型的列,里面的值是自動(dòng)增加的。也就是自增列類型。 Select identify;查看目前增加自增列最新的值。 identify是表示最近一次向具有identify屬性(即自增列)的表插入數(shù)據(jù)時(shí)對應(yīng)的自增列的值,是系統(tǒng)定義的全局變量。一般系統(tǒng)定義的全局標(biāo)量都是以開頭,用戶自定義變量以開頭。比如有個(gè)表A,它的自增列是id,當(dāng)向A表插入一行數(shù)據(jù)后,如果插入數(shù)據(jù)后自增列的值自動(dòng)增加到101,則通過select identify得到的值就是101。使用identify的前提是在進(jìn)行insert操作后,執(zhí)行select identify的時(shí)候鏈接沒有關(guān)閉,否則得到的將是null值。 編輯200頁以后的記錄,在左上角有個(gè)SQL的按鈕,然后修改select top (記錄數(shù))里的記錄數(shù)就可以顯示了。 在不刪除sql server表中數(shù)據(jù)的情況下,讓自增列從1開始? 刪除表的記錄以后,如何使新記錄的編號仍然從1開始? 有兩種方法truncate table 表名;這樣不但將數(shù)據(jù)刪除,而且可以重新置位identify屬性的字段。(2)delete from 表名; Dbcc checkident(表名,reseed,0);重新置位identify屬性的字段,讓其下個(gè)值從1開始。,(9)創(chuàng)建表 Use 數(shù)據(jù)庫 Create table 表名(字段名 字段屬性,) 例:book_id int not null primary key /值非空,并設(shè)為主鍵 (10)空值處理 數(shù)據(jù)庫中,一個(gè)列如果沒有指定值,那么值就為null,這個(gè)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; 這兩個(gè)例子都沒有任何返回結(jié)果,因?yàn)閿?shù)據(jù)庫也“不知道”; 原因是查詢這個(gè)表中所有的fname=不知道的數(shù)據(jù),查任何一條結(jié)果都等于false,fname里存在null不知道,不知道=不知道,所以,等不等于null都是一樣的結(jié)果,就是不出結(jié)果。 解決方法:SQL中使用is null、is not null來進(jìn)行空值判斷 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ù)簡化實(shí)現(xiàn)(沒了解到)。 (12)聯(lián)合結(jié)果集(用于寫報(bào)表比較合適) 用union來連接表 例:select FNumber,FName,FAge from T_Employee union select FidCardNumber,FName,FAge from T_TempEmployee 注:列數(shù)相同,類型相同。 基本原則:每個(gè)結(jié)合集必須有相同的列數(shù),每個(gè)結(jié)合集的列必須類型相容(可以理解為相同)。 Union合并兩個(gè)查詢結(jié)合集,并且將其中完全重復(fù)的數(shù)據(jù)行合并為一條。,Union因?yàn)橐M(jìn)行重復(fù)值掃描,所以效率低,因此如果不是確定要合并重復(fù)行,那么就用union all。 兩個(gè)表中的數(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é)果導(dǎo)出到Excel表內(nèi)? 查詢完之后再結(jié)果欄內(nèi)按Ctrl+A將結(jié)果全選,按右鍵選擇“將結(jié)果另存為”,然后保存為“*.csv”文件,就可以用Excel打開了?;蛘摺斑B同標(biāo)題一起復(fù)制”(全選下),然后將結(jié)果拷貝到excel表中就可以了。 (14)復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) select * into b from a where 11,(15)將Excel表中的數(shù)據(jù)導(dǎo)入到SQL中? 第一步:登錄到SQL Service Management Studio; 第二步:在“對象資源管理器”中右鍵單擊“管理”,在彈出列表中單擊“導(dǎo)入”數(shù)據(jù); 第三步:在“導(dǎo)入向?qū)А睂υ捒蛑袉螕簟跋乱徊健保M(jìn)入到“選擇數(shù)據(jù)源”對話框,在“數(shù)據(jù)源”列表中選擇“Microsoft Excell”,同時(shí)選擇相應(yīng)的Excell文檔,完成后單擊“下一步”(一定要勾選對話框中的“首行包含列名稱”,因此它是將Excell文檔中的列標(biāo)題為數(shù)據(jù)庫表中的列項(xiàng)標(biāo)題),也就是說第一行為SQL的列名。 第四步:重新打開SQL Service Management Studio,進(jìn)入到導(dǎo)入的數(shù)據(jù)庫表,可以發(fā)現(xiàn)所導(dǎo)入的Excell文檔數(shù)據(jù)。,當(dāng)瀏覽器在請求一個(gè)Web頁面是從URL開始的。下面就是過程描述: 1 輸入U(xiǎn)RL地址或者點(diǎn)擊URL的一個(gè)鏈接 2 瀏覽器根據(jù)URL地址,結(jié)合DNS,解析出URL對應(yīng)的IP地址 3 發(fā)送HTTP請求 4 開始連接請求的服務(wù)器并且請求相關(guān)的內(nèi)容(至于請求時(shí)怎么被處理的,這里暫時(shí)不討論) 5 瀏覽器解析從服務(wù)器端返回的內(nèi)容,并且把頁面顯現(xiàn)出來,同時(shí)也繼續(xù)進(jìn)行其他的請求。 當(dāng)一個(gè)瀏覽者在瀏覽器地址框中打入某一個(gè)域名,或者從其他網(wǎng)站點(diǎn)擊了鏈接來到了這個(gè)域名,瀏覽器向這個(gè)用戶的上網(wǎng)接入商發(fā)出域名請求,接入商的DNS服務(wù)器要查詢域名數(shù)據(jù)庫,看這個(gè)域名的DNS服務(wù)器是什么。然后到DNS服務(wù)器中抓取DNS記錄,也就是獲取這個(gè)域名指向哪一個(gè)IP地址。在獲得這個(gè)IP信息后,接入商的服務(wù)器就去這個(gè)IP地址所對應(yīng)的服務(wù)器上抓取網(wǎng)頁內(nèi)容,然后傳輸給發(fā)出請求的瀏覽器。 這個(gè)過程描述起來滿復(fù)雜,但實(shí)際上不到一兩秒鐘就完成了 域名-hosts-本地dns緩存-dns服務(wù)器,正確順序是第一種 如下: 本地DNS緩存 本地HOSTS文件 DNS服務(wù)器 具體如下: 一臺(tái)計(jì)算機(jī)訪問Internet的DNS解析過程是(以訪問站點(diǎn)為例),首先查看當(dāng)前計(jì)算機(jī)的DNS緩存里有沒有這條記錄;如果沒有,再查看當(dāng)前計(jì)算機(jī)的“hosts”文件,“hosts”文件位于C:WINDOWSsystem32driversetc目錄當(dāng)中;如果hosts文件中沒有,就接著查找當(dāng)前DNS服務(wù)器里有沒有這條記錄;如果還是沒有,看當(dāng)前的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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魚塘股份合同協(xié)議書
- 食堂搭伙合同協(xié)議書
- 兄弟倆出資買房協(xié)議書
- 酒店優(yōu)惠預(yù)訂協(xié)議書
- 分手后房產(chǎn)歸屬協(xié)議書
- 鋼筋清包合同協(xié)議書
- 餐廳臨時(shí)員工協(xié)議書
- 集體拆遷補(bǔ)償協(xié)議書
- 餐飲員工就餐協(xié)議書
- 出租車退車合同協(xié)議書
- 高級教師職稱面試講課答辯題目及答案
- 2023年食品殺菌設(shè)備行業(yè)分析報(bào)告及未來五至十年行業(yè)發(fā)展報(bào)告
- 牛安全生產(chǎn)技術(shù)-牛常見心血管系統(tǒng)疾病的防治
- 2023新能源風(fēng)電工程項(xiàng)目文檔全過程控制與檔案整理規(guī)定
- lemontree中英文對照打印版
- 粉塵清掃安全操作規(guī)程
- 衛(wèi)生應(yīng)急隊(duì)伍裝備參考目錄(試行)
- 外科學(xué)第七版周圍血管和淋巴管疾病
- 安全生產(chǎn)試題庫看圖找錯(cuò)課件
- 口腔頜面頸部局部解剖-頸部局部解剖(口腔解剖生理學(xué)課件)
- (完整word版)口腔正畸案例分析
評論
0/150
提交評論