SQL操作語句


SQL語句與Mysql的語句大體上比較相似。以下是sql server的一套練習題,是很好的數據庫操作語句學習資料,學校的學習資料,在此整理了以下。

數據庫exam這是一個模擬電子商務,網上直銷的數據,主要銷售計算機配件。該數據庫包含了訂單數據、經銷商基本數據、產品基本數據以及供應商基本數據等。該數據庫共包含6個表,表名分別為:orders、distributors、suppliers、city、items和products。各個表的內容與格式如下:

      1 網上直銷訂單表格,表名為:orders

列名

描述

數據類型

OrderNum

訂單號碼

Int

OrderDate

訂購日期

Datatime

DistriNum

經銷商號碼

Int

PaidDate

付款日期

Datatime


      2 經銷商表格,表名為:distributors

列名

描述

數據類型

DistriNum

經銷商號碼

Int

BossName

經理名稱

Char

Company

公司名稱

Char

CityCode

所屬市區代碼

Char

Address

公司地址

Char

Phone

公司電話號碼

Char


      3 供應商表格,表名為:suppliers 

列名

描述

數據類型

SuppCode

供應商代碼

Char

SuppName

供應商名稱

Char


      4 市區表格,表名為:city 

列名

描述

數據類型

CityCode

市區代碼

Char

CityName

市區名稱

Char


      5 訂單項目表格,表名:items

列名

描述

數據類型

Item

訂單項目號碼

Int

OrderNum

訂單號碼

Int

ProdNum

產品號碼

Int

SuppCode

供應商代碼

Char

Quantity

單項定購數量

Int

TotalPrice

單項總價

Money


      6 產品表格,表名:products 

列名

描述

數據類型

ProdNum

產品號碼

Int

SuppCode

供應商

Char

Descriptions

產品名稱

Char

UnitPrice

產品單價

Money

 

一、數據表的簡單操作

SQL語句選取表中所有的列:

1、 查詢exam數據庫中city表中所有的列的內容

select * from city;

2、 查詢exam數據庫中orders表OrderDate列的內容

select OrderDate from orders;

選取惟一的數值:

消除重復關鍵字:distinct (放在select后面)

1、 查詢exam數據庫中orders表中的訂購日期OrderDate,並且相同的訂購日期只顯示一次(distinct

select distinct OrderDate from orders;

2對記錄進行操作——選取特定的記錄:

查詢exam數據庫中供應商代碼為HHT的供應商的實際名稱

select SuppName from city where SuppCode= "HHT";

3對記錄進行操作——排除特定的記錄:

查詢exam數據庫中供應廠代碼不為HHT的所有供應商的實際名稱

select SuppName from city where SuppCode!= "HHT";

3對數據進行操作——選取介於某一范圍的數據:

查詢exam數據庫的products表中所有單價不超過20元的產品的名稱及其對應的價格

select Descriptions,UnitPrice from products where UnitPrice <= 20;

4對數據進行操作——選取屬於某一子集合的數據:

in:在...里

查詢exam數據庫中經銷商號碼為10061009101310141017的經理名稱以及其所在的公司名稱

select DistriNum,BossName,Company from distributors where DistriNum in (1006,1009,1013,1014,1017);

5對字符串進行操作——選取子字符串:

查詢exam數據庫中所有經銷商的電話區號

select substring(Phone,1,3) from distritubors;      //第一位和從這一位開始幾位

查詢exam數據庫中所有經銷商的姓

select substring(BossName,1,1) from distributors;

6對字符串進行操作——搜索子字符串:

‘%’:表示N個任意字符

查詢exam數據庫中所有經理姓“王”的公司的名稱、電話以及公司地址

select BossName,Company,Phone,Address from distributors where BossName like '王%';

二、一般數據查詢與處理

1同時執行多個SQL語句:

實現在一次查詢中同時查詢exam數據庫中orders表和distributors表所有列的內容

select * from orders;
go
select * from distributors;
go

2order by子句對數據進行排序:

查詢exam數據庫products表格中所有的記錄,查詢結果根據單價由小到大的順序(降序)排序

select * from products order by UnitPrice desc;

3使用算術運算符:

查詢exam數據庫products表中的所有記錄,並且把每個產品單價顯示成調高10%后的價格(只顯示,數據庫不變)

select ProNum,SuppCode,description,UnitPrice * 1.1from products;

3、 查詢exam數據庫products表中的所有記錄,並且把每個產品單價顯示成8折后的價格

select ProNum,SuppCode,description,UnitPrice * 0.8 from products;

5搜索單一長度的任意字符串:

‘_’:表示一個任意字符

查詢exam數據庫suppliers表中供應商代碼的第13位分別為HT的所有供應商的記錄

select * from suppliers where SuppCode like "H_T";

6使用常用的字符串函數:

查詢exam數據庫distribuotrs表中經銷商號碼為1001的地址字符串的長度

 select len(Address) from distributors where DistriNum = "1001";

7、查詢字符串的長度

select len(‘中華人民共和國’);

8、將字符串‘I LOVE SQL SERVER‘的所有字母轉換成小寫字母

select LOWER('I LOVE SQL SERVER');

9、將字符串‘abcdefg’中的小寫字母轉換成大寫字母

select UPPER('abcdefg');

10、將字符串‘          abcdefg’前的空格去掉

select ltrim('          abcdefg);

11、將字符串‘uvwxyz      ’后的空格去掉

select rtrim('uvwxyz      ');

12、將字符串‘我喜歡數據庫’中的字符由左至右反轉排列

select REVERSE('我喜歡數據庫');

13、求出字符AASCII

select ASCII('A');

14、判斷數字5的正負號,如果正返回1,負返回-1

select SIGN(5);

15使用常用的數學函數:

計算出以下三個數的絕對值:-2.50.07.4

select ABS(-2.5),ABS(0.0),ABS(7.4);

16、返回分別大於或等於以下數字的最小整數:5.5-7.20.0

select floor(5.5),floor(-7.2),floor(0.0);

17返回π(PI)的值

select PI();

18、返回630.67的近似值,並將該數分別四舍五入到1-230長度的小數

select ROUND(630.67,1),ROUND(630.67,-2),ROUND(630.67,3),ROUND(630.67,0);

19、返回以下3個數的平方值:4-66.6

select SQUARE(4),SQUARE(-6),SQUARE(6.6);

20、返回以下3個數的算數平方根:4050

select SQRT(4),SQRT(0),SQRT(50);

21、計算Cos3.1415926)的值 sin(3.14159260) ctg(3.14) tg(3.1415926)

select COS3.1415926),SIN(3.14159260),COT(3.14),TAN(3.1415926);

22、計算2的自然對數、指數值

select LOG(2),EXP(2);

23、計算1000的以10為底的對數

select LOG10(1000);

24、計算210次方

select POWER(2,10);

三、常用函數

常用的集總函數的應用:

1、 查詢exam數據庫products表中共銷售多少種產品

select COUNT(*) from products;

2、 查詢exam數據庫items表中代碼為HSC的供應商已訂貨的總金額

select SuppCode,SUM(TotalPrice) from items where SuppCode = 'HSC';

3、 查詢exam數據庫products表中所有供應商所供應的貨品的平均單價

 select SuppCode,AVG(UnitPrice) from products group by SuppCode;

4、 查詢exam數據庫products表中每一個供應商產品的最高單價/最低單價

select SuppCode,MAX(UnitPrice),MIN(UnitPrice) from products group by SuppCode;

6時間函數:

1)獲取當前時間

select getdate();

2、在1991-07-10 2:30:00.000時間上增加21

select dateadd(d,21,’ 1991-07-10 2:30:00.000’);

3、返回1991-07-10 2:30:00.000五天前的時間

select DATEADD(D,-5,'1991-07-10 2:30:00.000');

4、返回兩個日期間隔的時間

select DATEDIFF(D,'02/20/1999','02/28/1999');

5、以字符串形式返回當天幾年

select DATENAME(Y,GETDATE());

6、以整數形式返回當天幾號

select DATEPART(D,GETDATE());

7、查詢當前UTC時間(協調時間)

select GETUTCDATE();

四、高級數據查詢與處理

1在一個select語句中使用多個表格:

查詢exam數據庫中每一個經銷商所有的訂單數據,列出經銷商號碼、公司名稱、電話號碼以及訂貨日期

select  distributors.DistriNum,Company,Phone,OrderDate from distributors,orders where orders.DistriNum = distributors.DistriNum

2select語句中使用子查詢:

查詢exam數據庫中與經理名稱為‘王為’的經銷商同在一個市區的所有經銷商的數據內容

select * from distributors where CityCode=(select CityCode from distributors where BossName='王為');

3union運算符實現從不同的表格抽取相同格式的數據:

查詢exam數據庫中單價不大於25元或者是已訂貨項目中數量小於2的產品數據

select ProdNum,SuppCode,Description,UnitPrice from products where UnitPrice <= 25
union
select ProdNum,SuppCode,Quantity from items where Quantity <2

4添加記錄:

orders表中添加一筆記錄,OrderNum119OrderDate1905-06-8DistriNum1022PaidDate1905-06-9

insert into orders(OrderNum,OrderDate,DistriNum,PaidDate) values(119,1905-06-8,1022,1905-06-9);

5刪除記錄:

 刪除orders表中OrderNum為119的記錄

delete from orders where OrderNum = 119

6更新記錄:

orders表中訂單號為118的訂單的訂購日期改為2003-07-11

update orders set OrderDate = "2003-07-11" where OrderNum = 118

7實現查詢exam數據庫中每一個經銷商的訂單號碼(orders表中)與經銷商公司所屬市區的代碼(ditributoirs表中)

select orders.DistriNum,OrderNum,distributors.CityCode from orders,distributors where orders.DistriNum = distributors.DistriNum

8實現查詢exam數據庫中公司在宣武區的所有經銷商的數據內容

select * from distributors where CityCode= (select CityCode from city where CityName='宣武區')

9、實現查詢exam數據庫中訂單號碼為100對應的經銷商的情況

 select * from distributors where DistriNum= (select DistriNum from orders where OderNum = 100)

五、設計數據庫

T-SQL語句實現默認值與列的結合:

默認值創建:create default 關鍵字 as XX

綁定默認值:sp_bindefault ‘默認值名表名.[列名]’

重命名默認值:exec sp_rename ‘舊名稱’,’新名稱

1.exam數據庫中新建名為moren的默認值,值為100,並把該默認值與orders表的OrderNum列結合(sp_bindefault)

create default moren as 100 
go
sp_bindefault 'moren','orders.[OrderNum]'
go

sp_bindefault 將新默認值綁定到列(盡管最好使用 DEFAULT 約束)或者綁定到別名數據類型。原有默認值將被覆蓋。

2新建SQL查詢,輸入Transact-SQL語句,解除(sp_unbindefault上步中建立的默認值與列的結合,並刪除(drop)該默認值。

sp_unbindefault 'orders.[OrderNum]' 
go 
drop default moren 
go

3建立新的用戶自定義的數據類型:bigint,允許NULL值,類型名稱為newtype,

sp_addtype newtype,'bigint','null'

4建立新的名為newrule規則(create rule newrule as @values),並把這個規則與orders表的OrderNum列結合(sp_bindrule)

create rule newrule as @value between 100 and 150 
go
sp_bindrule 'newrule','orders.[OrderNum]'
go

5解除上步中建立的規則與列的結合,並刪除該規則。操作成功后,保存該查詢

sp_unbindrule 'orders.[OrderNum]'
go
drop rule newrule
go

6建立新的名為newview的視圖,建立orders表格中的OrderNumOrderDate列的視圖

create view newview
as
select OrderNum,OrderDate from orders go select * from newview

7刪除上步中建立的視圖

drop view newview

六、存儲過程和觸發器

創建存儲過程:

創建存儲過程:create procedure 名稱

執行存儲過程:exec 名稱

1exam數據庫中新建名為storedproc的存儲過程,用來查詢orders表中OrderNumOrderDate的列,並執行該存儲過程

create procedure storedproc 
as 
select OrderNum,OrderDate from orders 
go
exec storedproc 
go

2重命名存儲過程:

重命名為newproc

sp_rename storedproc,newproc

3刪除存儲過程:

刪除存儲過程:drop proc 名稱

drop procedure newproc

4創建觸發器

create trigger 觸發器名

on 表名

for XX ——創建XX操作觸發器

建立名為newtrigger的觸發器,規定當orders表的OrderNum列的數值發生變化的時候,顯示出‘訂單號碼已被更改,觸發器起到作用’,再更改orders表的OrderNum列的數值以觸發該觸發器

create trigger newtrigger 
on orders
for update as if update(OrderNum)
print '訂單號碼已被更改,觸發器起到作用。'
go
//例如
update orders set OrderNum='100' where OrderNum='101'
go

5查看系統內所有的觸發器列表:

顯示出系統內全部的觸發器

select * from sysobjects where XTYPE='tr'

七、數據庫的管理和數據索引

增加數據庫空間:

用企業管理器新建一個名為module7的數據庫,將主要數據庫文件和日志文件分別命名為module7_Data.MDF和module7_Log.LDF,大小都設置成1M(默認值)並將這兩個文件存放在C盤的根目錄下;打開查詢分析器,加入名為modu2.ldf的文件,使得數據庫module7的日志文件容量增大5M,此時該數據庫顯示的大小為7M

alter database module7
add file
(
    name=modu2,
    filename=’c:\modu2.ldf’,
    size=5,
    filegrowth=1
)

1縮小數據庫空間:

將上步建立的module7數據庫的日志文件的大小縮小為原來的一半

dbcc shrinkdatabase(module7,50)      //50為50%

2刪除數據庫:

刪除module7數據庫

drop database module7

3創建索引:

創建索引:create unique/clustered/nonclustered index 索引名 on 表名(列名)

唯一值/聚集索引/非聚集索引

建立名為theindex的索引,orders表OrderNum,唯一值

create unique index theindex on orders(OrderNum)

4重命名索引:

將上步建立的索引重命名為newindex

exec sp_rename ‘orders.theindex’,’newindex’,’index

5刪除索引:

刪除建立的索引

drop index orders.newindex


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM