sqlserver 基礎知識大整理

來源:互聯網
上載者:User

 

  sqlserver 基礎知識大整理(強烈推薦之一)

                              SQL-Structured Query Language

--(開啟SQL服務:net start mssqlserver)

--(在命令列中輸入'sqlwb'命令可開啟SQL管理器 )

--(如果要執行多條命令中的一條,滑鼠選定後再按F5執行)

create database sales                           --建立一個名為sales的資料庫
on
(
name='sales_data',
filename='d:\sales_data.mdf',
size=10,
maxsize=50,
filegrowth=5
)
log on
(
name='sales_log',
filename='d:\sales_log.ldf',
size=10,
maxsize=50,
filegrowth=5
)

drop database sales                             --刪除所建立的資料庫

sp_helpdb sales                                 --查看資料庫的相關資訊

sp_helpfile                                     --查看當前資料庫資料檔案與記錄檔的相關資訊

sp_detach_db sales                              --轉移資料庫時分離資料庫

sp_attach_db sales,@filename1='資料檔案路徑名'  --整合分離的資料庫                 
                  ,@filename2='記錄檔路徑名'

--(如何減小資料庫記錄檔的大小:  a.分離資料庫 b.轉移記錄檔 c .整合資料庫但不指定記錄檔)

--資料庫的備份

sp_addumpdevice 'disk','mydisk','d:\sales.bak'  --添加裝置。disk表示目標裝置類型,mydisk表示目標裝置邏輯名稱,d:\sales.bak表示目標裝置實體名稱

backup database sales to mydisk                 --向裝置寫入資料.其中的sales指資料庫名,mydisk為自定的裝置標示符

restore database sales from mydisk              --恢複資料庫

sp_dropdevice mydisk                            --刪除裝置

EXEC sp_dboption 'sales','read only','true'     --設資料庫為唯讀

EXEC sp_dboption 'sales',autoshrink,true        --設資料庫為自動壓縮

EXEC sp_dboption 'sales','single user'          --設資料庫為單使用者

--(以上命令中單引號可加可不加,但名字中出現空格的一定要加.大小寫不分)

DBCC shrinkdatabase (sales,10)                  --將資料庫中的檔案減小,使資料庫中有10%的可用空間

---------------------------------------------------------------------------------------------------------------

create table goods                              --建表的第一種約束文法
(
gid int primary key,
gname varchar(10) unique,
price money check(price>300),
ldate datetime default getdate()
)

insert into goods(gid,gname,price) values(105,'computer5',1222)--當表中有預設值約束時向表中輸入資料

insert into goods values(107,'computer',13434,default)         --當表中有預設值約束時向表中添加資料的另一種方法

sp_help goods                                   -- 用來查詢表的資訊

select *from goods    --用來查詢表中的內容

create table goods                              --建表的第二種約束文法
(
gid int constraint pg_id primary key,           --用constraint 給表中的列約束起名
gname varchar(10) constraint uq_name unique,
price money constraint ck_price check(price>300),
ldate datetime constraint df_date default getdate()
)

alter table goods drop 約束名                   --用來刪除約束

 create table goods                             --建表的第三種約束文法
(
gid int not null,
gname varchar(10),
price money,
ldate datetime
)

alter table goods add constraint pk_id primary key(gid)
alter table goods add constraint uq_name unique(gname)
alter table goods add constraint cj_price check(price>300 and price<1000)
alter table goods add constraint df_ldate default getdate() for ldate

create table gp                                 --建立引用goods的表gp
(
wno int identity(1001,1) primary key,           --identity為設定自動成長列標示,1001是起始數字,references為引用
      --在插入資料時不能給自動成長列賦 值,插入字元型資料與日期型資料時要用單引號
gno int constraint fk_id foreign key            --定義gno為表的外鍵
references goods(gid) 
)
drop table gp
create table gp
(
wno int identity(1001,1) primary key,
gno int
)

alter table gp add constraint fk_id foreign key(gno) references goods(gid)--效果同上,另一種寫法

alter table 表名 add 列名 資料類型               --為表加上一列

alter table 表名 drop column 列名                --刪除一列

delete from 表名 where 條件(如:gid=1001)        --刪除符合where條件的一行

insert into 表名 values (default)                --為表附預設值

insert into 表名(列名) values()                  --同上

--預設值約束不影響曆史資料!

--當為包含有自動成長列的表添加資料時不須為自動成長列附值

delete from 表名                                 --全刪表中資料

delete from 表名 where gid=1001                  --刪除符合條件(gid=1001)的資料

truncate table 表名                              --截斷表,不可帶條件,不能截斷被外鍵引用的表,不管該表中是否有資料

update 表名 set 列名=列值                        --用來更新資料

where gid=1000 or gid=1001

update 表名 set 列名=列值                        --同上

where gid in(1000,1001)

update 表名 set 列名1=列值1,列名2=列值2,......  --為多列更新值

where 條件

--事務可分為3種:1。明確交易 2。隱含交易 3。自動認可事務(系統預設為自動認可事務)    

select * from 表名                               --查詢表中資料

begin tran t1            --開始一個明確交易 

update 表名 set 列名=列值                        --更新資料

where not 條件                                   --更新條件

rollback t1                                     --復原一個事務    

commit t1                                       --提交事務(以後不能再復原了)

--隱含交易通過 SET IMPLICIT_TRANSACTIONS ON語句將隱含交易設為開,當串連以隱含交易操作時,
--將在提 交或復原後自動啟動新事務,無須描述事務的開始,只須提交或復原事務

SET IMPLICIT_TRANSACTIONS ON

select * into 新表名 from 舊錶名                 --備份現有表資料到新表中,它能複製表的結構,資料。
--還可以加上條件過濾如果只想複製到指定列,用列名代替*即可

--如果只想複製表的結構而不想複製資料,加上永不成立條件。(如where 1>3) 

--該語句自動建立新表,但原表的約束關係不能被複製,但not null與identity屬性可複製

select 列名1,列名2,列名3,......
into 新表名 from 舊錶名    --備份現有表中的部分資料到新表中

alter table gp add constraint gp_id foreign key(gno) references
goods(gid) on delete cascade on update no action --這是用來進行級連更新和刪除的文法,
      --在 on的後面可加上: 1.delete cascade 2.delete no action 3.update cascade 4.update no action

--------------------------------------------------------------------------------------------------------------------------------------------------

create table gp
(
pid int identity(100,1) primary key,
pname varchar(10),
ptel varchar(12) check(ptel like '[0-9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
)

                                                --這是電話號碼約束的方法

select host_name()        --查看本機名

select getdate()                                --擷取目前時間

select user                                     --查看目前使用者

xp_cmdshell 'dir'                               --執行DOS命令dir,將DOS命令寫在''中間即可

xp_cmdshell 'net user EKIN 1234 /add'           --添加windows使用者,EKIN為使用者名稱,1234為密碼

xp_cmdshell 'net user EKIN /delete'             --刪除windows使用者

xp_cmdshell 'net user administrator 9527'       --修改管理員密碼

Uniqueidentifier              --這是資料類型的一種,全球唯一的標示符,用newid()函數給這個類型的資料提供值

                           
select *from gp INNER JOIN goods on gp.gno=goods.gid               --內聯結 僅顯示兩個聯結表中的匹配行的聯結
 
select *from gp LEFT OUTER JOIN goods on gp.gno=goods.gid          --左向外聯結  包括第一個命名表(“左”表,出現在JOIN子句的最左邊)中的所有行。不包括“右”表中的不匹配行   

select *from gp right OUTER JOIN goods on gp.gno=goods.gid         --右向外聯結  包括第二個命名表(“右”表,出現在JOIN子句的最右邊)中的所有行。不包括“左”表中的不匹配行  

select *from gp full OUTER JOIN goods on go.gno=goods.gid          --完整外部聯結  包括所有聯結表中的所有行,不管它們是否匹配

select *from gp CROSS JOIN goods                                   --交叉聯結  在這類聯結的結果集內,兩個表中每個可能成對的行佔一行,不論它們是否匹配

select *from goods where price between 1300 and 1800               --區間查詢。查價格在1300-1800間的貨物

select *from goods where gid in(1001,1003)                         --查詢貨物ID為1001和1003的產品,不是查1001與1003之間的貨物!in前加not指除了1001和1003以外的貨物

select *from goods where price not between 1300 and 1500           --查price不在1300與1500之間的貨物

select *from goods where price is null                             --查詢價格為空白的貨物

select *from goods where gname like ' '                            --模糊查詢。''中加 % 代表gname中的任一字元, _ 代表gname中的一個字元,[ ]代表一個區間,[^]代表不在這區間

                   --比如:select *from Renyuan where age like '2[^1-4]'

--在SQL中一個漢字與一個符號或字母都只佔一個字元,  用  nchar  可錄漢字。

select max(price) as 最高價格 from goods                           --as為取別名,max()為求最大值的函數,min()求最小值,arg()求平均值

select sum(price) from goods                                       --求price 的總和,sum()用來求總和的

--單行與彙總不能一起使用,除非依據單行進行分組。(比如:select gid, max(price)from goods) 

select gid,  max(price) as 最高價格 from goods group by gid        --按gid進行分組,就是求同類gid貨物的最高價格

--在where子句中不能出現彙總函式(比如:where max(price)>1300)

select gid,max(price) as 最高價格 from goods group by gid having max(price)>1300  --用having指定分組條件,代替where

create table info
(
 ino int,age int
)

insert into info values(12,22)
select *from info order by ino asc,age desc                        --order by指定排序條件,asc表示升序,desc表示降序.

--以上這個程式結果為編號按照升序排列,在編號相同的情況下,按age降序排列

select max(convert(int,price)) from goods                          --在goods表中查詢出價格最高的貨物,並且強制轉換price的類型  

select top 1 * from goods where price>4000      --在goods表中查詢出價格大於4000的貨物資料,並只顯示第一條記錄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.