日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql sever 2008基础知识

發布時間:2023/12/18 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql sever 2008基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

       下面是一些總結,如果執行時發現錯誤,可以查看錯誤消息進行解決,也可上網查資料

數據庫的組成

  主數據文件:有且只有一個,擴展名為.mdf。

  次數據文件:可以沒有,也可以有任意個。擴展名為.ndf。

  日志文件: ? 至少有一個,擴展名為.ldf。

數據庫的相關操作:

 1.創建:

  請看代碼例子:

create database testone --創建數據庫,名為testone,注意數據庫名、數據文件的邏輯名、數據文件的物理名可以各不相同。寫的時候最好這樣 on primary( --申明主數據文件name='testone', --主數據文件邏輯名filename='d:\sql server shujuku\testone.mdf',--主數據文件物理名,即在硬盤的位置size=10MB, --初始大小maxsize=unlimited, --最大值,unlimited表示不限制大小filegrowth=1MB --自動增長 ) log on( --申明日志文件name='testone_log', --日志文件邏輯名filename='d:\sql server shujuku\testone_log.ldf',--日志文件物理名size=1MB,maxsize=unlimited,filegrowth=10% ) go

?  2.查看數據庫信息:

  請看代碼例子:

exec sp_helpdb 測試           --可以查看數據庫數據文件信息

? ? 3.打開:

  請看代碼例子:

use testone

?  4.修改(右擊數據庫點擊屬性也能操作):

  請看代碼例子:

alter database testone --alter,表示改變的意思,modify表示修改 modify name=測試alter database 測試 add file(name=測試_log02,filename='d:\sql server shujuku\測試_log02.ldf' --即使該文件不存在,數據庫會自動生成的 )alter database 測試 remove file 測試_log2

?  5.刪除:

  請看代碼例子:

drop database li

sql ?sever中的數據類型:

  常用的數據類型有:

  int ? ?java與之對應的int 類型。

  float ?java與之對應的float類型。

  char ?一個字符占個字節,空間不足斬斷尾部,空間多余空格填充。java與之對應的String類型。

   ?varchar ?一個字符占個字節,空間不足斬斷尾部,空間多余不用空格填充。java與之對應的String類型。

  nchar ? ?一個字符占個字節,空間不足斬斷尾部,空間多余空格填充。java與之對應的String類型。

   ?nvarchar ?一個字符占個字節,空間不足斬斷尾部,空間多余不用空格填充。java與之對應的String類型。

  記憶方法:"var" 表示變的意思,就是空間多余不用空格填充;有"n" 表示一個字符占兩個字節。

  注意:一個字母相當于一個字符,而一個漢字可以理解為兩個字符,也就是說char(2)只能放下一個漢字。

  ?datetime ? java與之對應的可以是java.sql.Date,也可以是string類型,但是要以日期格式。

?表的相關操作:

 1.表的創建:

? ? 語法基本格式:

? create table 表名

  ( 列名 ?數據類型[(長度)] ?[null |not null] ?[identity(初始值,步長)] [約束],                               ? ?

   ? ........ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

  )

?列名書寫習慣:作為主鍵的應該寫在最前頭,如果不在最前頭或是組合主鍵,列名為:"列名_pk"。作為外鍵或是組合外鍵,列名為:"列名_fk"。

?沒寫not null 默認表示null,identity表示自增長,不用插入數值。

? ? 約束:

    主鍵約束:[constraint 約束名] primary key

    外鍵約束:[constraint 約束名] foreign key references 參照表(參照列)[on delete cascade | on update cascade]

    唯一鍵約束:[constraint 約束名] unique(列名)

    檢查約束:[constraint 約束名] check(檢查表達式)

    默認值約束:[constraint 約束名] default 默認值

constraint 表示約束的意思。references表示參考的意思。cascade表示串聯的意思,[on delete cascade | on update cascade]表示級聯操作。

加上"constraint 約束名"是便于約束之間的區別,便于以后的刪除。注意約束名是相對于數據庫,而非表,也就是說一個數據庫不可能有同樣的約束名。

約束名命名規范:主鍵:pk,外鍵:fk,唯一鍵:uq,檢查:ck,默認:df。例如:表名"成績",有列名"學號","課程號",

如果讓學號做主鍵,那么命名為:pk_cj_xh,如果讓學號和課程號組合主鍵,那么命名為:pk_cj_xh_kch。

如果這樣有命名沖突,查看錯誤消息,進行合理的編號,如:pk_cj01_xh01。

?如果是組合主鍵,格式為:[constraint 約束名] primary key(列名1[,...])。

?如果是組合外鍵,格式為:[constraint 約束名] foreign key(列名1[,...])?references?參照表(參照列1[,...])[on delete cascade | on update cascade]。前提是參照表要有與之對應的組合鍵。

?如果是組合唯一鍵,格式為:[constraint 約束名] unique(列名1[,...])。

? ? ? 請看代碼例子:

use 測試 create table xs(學號 char(10) not null primary key,姓名 varchar(20) not null,成績 smallint not null )

? ?2.查看表的信息:

? ? ? ? ?請看代碼例子:

exec sp_help xs       --可以查看表中列的屬性和約束等信息

? ? 3.修改表:

  a.修改表名和列名,請看代碼例子:

exec sp_rename "cj","成績表" --修改表名 exec sp_rename "成績表.學號","xh" --修改表中的列名

  b.添加列、修改列的屬性、刪除列(一個alter table 命令一次只能對表進行一項修改操作),請看代碼例子:

   ? 如果你想改變字段的位置,可以通過表的"設計"進行操作

alter table cj add 年齡 int not null --增加列alter table cj alter column 年齡 int null --修改列的屬性,注意只能修改字段的數據類型和能否為null,identity(初始值,步長),約束都不能操作,
                   --但添加列時候可以操作                                          
alter table cj drop column 年齡 --刪除列 注意保證該列沒有索引和約束

  c.添加約束和刪除約束(沒有修改的,刪了再添加=修改)(一個alter table 命令一次只能對表進行一項修改操作)

    添加主鍵約束:

          alter table 表名?

          add?[constraint 約束名] primary key(列名1[,...])

    添加外鍵約束:

          alter table 表名?

          add?[constraint 約束名] foreign key(列名1[,...])?references?參照表(參照列1[,...])[on delete cascade | on update cascade]

    ?添加唯一鍵約束:

          alter table 表名

          ?add?[constraint 約束名] unique(列名1[,...])

? ? ? ? ? ? 添加檢查約束:

          alter table 表名

          [with nocheck] ? ? --加了這,表示對表中現有的數據不檢查,沒加,表示會檢查。

          add?[constraint 約束名] check(檢查表達式)    

    添加默認值約束:

          alter table 表名

          add?[constraint 約束名] default 默認值 for?列名1[,...]

   刪除約束: ?alter table 表名 ?

          drop 約束名

? ? ? ?4.刪除表:

      drop table 表名 ? ? ? ? ? ?--注意如果其它表的外鍵引用了該表,那么就要先刪除其他表中引用該表的外鍵。

                --drop table 命令一次可以刪除多個表,表名之間用逗號隔開。

添、刪、查、改(如果是字符串類型的加上單引號)

  添:

? ? ? ?1.插入表中所有列的數據:

  代碼例子:

insert cj values('小李',100)

? ? ? 2.插入表中指定列的數據:

  代碼例子:

insert cj(姓名) values('力王')

? ? ? 3.批量插入:

  代碼例子:

insert cj values('小李',100),('小王',99)

  改:

  代碼例子:

update cj set 姓名='小李' where 成績=99    --沒有where字句,則所有的姓名都為"小李"

  刪:

  代碼例子:

delete cj where 成績=99 --沒有where字句,則將刪除表中所有記錄,可以用truncate table 表名 命令,效率更快。

  查:

  代碼例子:

select distinct 姓名 as 名字,成績 as 分數 into 成績單 from cj     select top 10 * from cj      --查詢表中前十條記錄 select top 10 percent * from cj --查詢表前面10%的記錄

  解釋:distinct 表示過濾掉重復的記錄,姓名 as 名字 表示將字段名"姓名" 換成別名"名字",into 成績單表示生成一個

與cj表結構一樣的表,如果是"#into"則表示生成的是與cj表結構一樣的臨時表,表名為"成績單",然后將查詢的記錄插入到該表中。

  查詢條件中常用的運算符

? ?比較:=,!=或<>,>,<,>=,<= ? 設置多重條件:and,or,not ? 確定范圍[not] between...and... ? 測試空值 :is[not]null

? ?確定集合:

? ? Exists:子查詢至少返回一行時條件為true。

? ? Not Exists:子查詢不返回任何一行時條件為true。

? ? In:與子查詢返回結果集中某個值相等。

? ? Not In:與子查詢返回結果集中任何一個值不相等。

? ? >ANY|some:比子查詢返回結果中的某些值大。

? ?<Any|some:比子查詢返回結果中的某些值小。

? ? >ALL:比子查詢返回結果中的所有值都大。

? ?<ALL:比子查詢返回結果中的所有值都小。

? ?字符匹配,用于模糊查詢 [not] like <匹配串>:

? 1.%:表示從0~n個任意字符。

? 2._:表示單個任意字符。

? 3.[]:表示方括號里列出的任意一個字符。

? 4.[^]:任意一個沒有在方括號里列出的字符。

? 排序:order by 子句:ASC(升序),DESC(降序),如:select * from cj order by 成績 asc

? 注意:對于空值,若按升序排,含空值的元組將最后四暗示。若按降序排,空值的元組將最先顯示。默認是按升序排列的。

? order by 子句中可以指定多個列,檢索結果首先按第一列進行排序,第1列值相同的那些數據行,再按照第2列排序

? ?字符,漢字,數字都可以排序。order by 子句一般放在最后。

? 分組:group by 列名 [having 表達式]子句,該子句放在where子句后面。where是對表內記錄進行篩選的,group by 列名 [having 表達式]子句

? 表示對篩選的結果進行分組,或者用[having 表達式]對組內記錄再進一步篩選。

?如:在xs表中篩選出分數在90分以上,分專業統計出男生和女生的平均年齡及人數,結果按性別排序。

 select 專業,性別,平均年齡=avg(datediff(yy,出生時間,getdate())),人數=count(*) from xs where ?分數>90 group by 專業,性別 order by 性別

該語句執行的順序:1.where ?分數>90 2.group by 專業,性別 3.order by 性別

連接查詢(這里只講兩個表之間的連接,多表同理)

  內連接:

    select 表名.列名,表名.列名... from 表名1,表名2 where 表名1.列名=表名2.列名 ? 或

    select 表名.列名,表名.列名...from 表名1 join 表名2 on 表名1.列名=表名2.列名

   外連接:

    左外連接:select 表名.列名,表名.列名...from 表名1 left join 表名2 on 表名1.列名=表名2.列名

      外連接:select 表名.列名,表名.列名...from 表名1 right join 表名2 on 表名1.列名=表名2.列名

     外連接:select 表名.列名,表名.列名...from 表名1 full join 表名2 on 表名1.列名=表名2.列名

   子查詢:

    例子(在xs表中查詢和"劉鑫"在同一專業的所有男同學的信息):

     select * from xs where 性別="男" and 姓名<>"劉鑫" and 專業=(select 專業 from xs where 姓名="劉鑫")

  視圖:是基于基表的情況下,進行[連接]查詢所得到的一張虛表??梢酝ㄟ^視圖進行查詢數據,在沒有限制的情況下對視圖進行修改數據,相對應的基表也會變動,同樣基表修改數據,視圖也會發生改變。

  創建:

  create view 視圖名

  [with encryption] ? ? ? ? ? ? --進行加密,那么點擊"設計"和用"exec ?sp_helptext ?試圖名" 就沒用了

  as             --exec ?sp_helptext ?視圖名 表示查看視圖定義信息

  select 語句

  [with check option] ? ? ? ? ? ?--如果加了它,視圖創建好后,對視圖的insert,update操作得遵循當初創建視圖是select語句where語句中的條件。要是不遵循的話,就會出錯。如果沒加它,不用遵循當初創建視圖是select語句where語句中的條件

  inset 注意點:

  由于視圖只引用表中的部分字段,所以通過視圖插入數據時只能給視圖中引用的字段的賦值。而那些表中并未引用的字段,必須知道在沒有指定取值的情況下如何填充數據,因此視圖中未引用的字段必須具備下列條件之一:

?1.?該字段允許空值,2.該字段有默認值,3,自增長。

  查看視圖定義信息: ? ?exec ?sp_helptext ?視圖名

  視圖的修改:跟創建差不多,只是用這個名字而已,alter view 視圖名 [with encryption] as select 語句 [with check option]

   ?視圖的刪除drop view 視圖名1,視圖名2... ? ? ? ? ? ?--一次可以刪除多個視圖

?  索引(索引的排序是按照升序排序的):

    1.索引的作用:加快數據查詢,加快表的連接、排序和分組工作。

    2.建立索引的一般原則是:a.對經常用來搜索數據記錄的字段建立索引。

                b.對表中的主鍵字段建立索引

                 c.對表中的外鍵字段建立索引

                d.對查詢中用來連接表的字段建立索引

                e.對經常用來作為排序基準的字段建立索引

?       3.索引的分類:聚集索引和非聚集索引、唯一索引(索引列中的值具有唯一性)和非唯一索引(索引列中的值不具有唯一性)、單列索引和多列索引(復合索引)(一共有2*2*2=8種)

?        解釋:聚集索引和非聚集索引的區別:首先它們都發揮了索引的作用,但聚集索引的排序即記錄在存儲在磁盤的排序(我們在表中看到的記錄的順序其實記錄插入的順序,不是存儲順序)。所以說,一個表只能有一個聚集索引,但可以有多個非聚集索引。當表建立了主鍵約束,如果表中沒創建索引,SQL會自動在主鍵字段建立聚集索引。

?    索引的創建(先建立聚集索引,再建立非聚集索引):

    create [unique(唯一)] [clustered(聚集索引) |nonclustered(非聚集索引)] index 索引名 on 表名 (字段名[,...])

   索引的查看:exec sp_helpindex 表名

  索引的刪除:drop index 表名.索引名[,...]

?    注意:該命令不能刪除由主鍵約束或唯一鍵創建的索引,這些索引必須通過刪除主鍵約束或唯一鍵約束,由系統自動刪除。

? ? ? 觸發器(DML觸發器):

    創建:

    create trigger 觸發器名

    on ? {表名|視圖}

    [with encryption]

    {for|after|instead of} {[insert][,][update][,][delete]}

    as

    條件判斷語句

    SQL語句

    解釋:for|after 是同一個意思,表示先對表或視圖執行添、刪、改等操作,然后再執行條件判斷語句,再執行SQL語句。

    而instead of 則是先執行條件判斷語句,再對表或視圖執行添、刪、改等操作,而不用執行SQL語句。

?      查看觸發器的定義信息: exec ? sp_helptext ?觸發器名,當然加密的不能看到

?      觸發器的修改:其實就是用原來的名字,換用alter命令就可以了?

?    觸發器的刪除:drop trigger ?觸發器名

  下面來介紹下SQL中常用的函數:

?  聚合函數:

    avg([distinct]表達式) ? ?求平均值

    sum([distinct]表達式) ? ?求和

    max([distinct]表達式) ? ?求最大值

    min([distinct]表達式) ? ? 求最小值

      count?([distinct]表達式|*) ? ? ? ? ? 求個數

?     注意點:解決count distinct多個字段的方法:

    Distinct的作用是用于從指定集合中消除重復的元組,經常和count搭檔工作,語法如下

    COUNT( { [ ALL | DISTINCT ] expression ] | * } )

    這時,可能會碰到如下情況,你想統計同時有多列字段重復的數目,你可能會立馬想到如下方法:

    select count( distinct col1 , col2 , col3 , .......) from table

    但是,這樣是不允許的,因為count是不能統計多個字段的,雖然distinct是可行的。

    有種比較直接的方法就是把消除重復后在統計查詢:

    select count(*) from (select distinct col1 ,col2 , col3 from table)A

? ? ?日期時間函數:

      getdate() ? ? ? 返回服務器的當前系統日期和時間

      datediff(日期元素,日期1,日期2) ? ? ? 返回兩個日期間的差值并轉換為指定日期元素的形式

      year(日期) ? ? ? ? ?返回年份(整數)

      month(日期) ? ? ? ?返回月份(整數)

      day(日期) ? ? ? ? ? 返回日(整數)

      getutcdate() ? ? ?返回表示當前UTC時間的日期值

?

      日期元素及其縮寫和取值范圍

       ? ? ? ? ?日期元素 ? ? ? ? ? ? ? ? ? ? ? ?縮寫 ? ? ? ? ? ? ? ? ? ? ? ? ? 取值

          ?year          yy          0~9999

?          month         mm          1~12

           ? day          dd           1~31

         day ?of ?year        dy ??         1~366

          ?week           ?wk          0~52

         weekday          ?dw          1~7

?         hour ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hh          0~23

         minute ? ? ? ? ? ? ? ? ? ? ? ? ? ? mi          0~59

  

?

轉載于:https://www.cnblogs.com/lipengsheng-javaweb/p/4006086.html

總結

以上是生活随笔為你收集整理的sql sever 2008基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。