本文將為大家詳細(xì)介紹SQL Server中T-SQL查詢語(yǔ)句的介紹和使用,內(nèi)容詳細(xì)步驟清晰,細(xì)節(jié)處理妥當(dāng),希望大家通過這篇文章有所收獲,我們先來看看文章相關(guān)術(shù)語(yǔ)概念:
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括河曲網(wǎng)站建設(shè)、河曲網(wǎng)站制作、河曲網(wǎng)頁(yè)制作以及河曲網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,河曲網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到河曲省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
在進(jìn)行數(shù)據(jù)管理時(shí),使用SSMS進(jìn)行數(shù)據(jù)維護(hù)有可視化、方便的優(yōu)點(diǎn),但是在批量維護(hù)或重復(fù)維護(hù)數(shù)據(jù)時(shí),每次都需要使用SSMS不但不方便,而且容易出錯(cuò)。通過編寫SQL語(yǔ)句來維護(hù)數(shù)據(jù)庫(kù)便于解決重復(fù)或批量維護(hù)數(shù)據(jù)的難題。
SQL是Structured Query Language的縮寫,即結(jié)構(gòu)化查詢語(yǔ)言。SQL廣泛地被采用說明了它的優(yōu)勢(shì),它使全部用戶,包括應(yīng)用程序員、數(shù)據(jù)庫(kù)管理員和終端用戶受益匪淺。
SQL是一個(gè)非過程化的語(yǔ)言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航功能。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集。所有SQL語(yǔ)句可以接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語(yǔ)句的輸出作為另一條SQL語(yǔ)句的輸入。
SQL可用于所有用戶的數(shù)據(jù)庫(kù)活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫(kù)管理員、應(yīng)用程序員、決策支持系統(tǒng)人員及許多其他類型的終端用戶。SQL為許多任務(wù)提供了命令,包括:
T-SQL語(yǔ)言主要由以下幾部分組成:
數(shù)據(jù)操縱語(yǔ)言:用來查詢、插入、刪除和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),如select、insert、update、delete;
數(shù)據(jù)定義語(yǔ)言:用來建立數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)對(duì)象和定義其列,大部分是以CREATE開頭的命令,如CREATE、ALTER、DROP;
- 數(shù)據(jù)控制語(yǔ)言(Data Control Language,DCL):用來控制數(shù)據(jù)庫(kù)組件的存取許可,存取權(quán)限等,如GRANT、REVOKE;
在SQL Server Management中對(duì)表數(shù)據(jù)進(jìn)行插入、更新或刪除比較簡(jiǎn)單,除此之外,也可以使用T-SQL語(yǔ)句實(shí)現(xiàn)對(duì)表數(shù)據(jù)的插入、更新或刪除等操作。
使用INSERT語(yǔ)句將數(shù)據(jù)插入表中
INSERT [INTO] <表名> [列名] VALUES <值列表>
其中:
在插入數(shù)據(jù)的時(shí)候,需要注意以下事項(xiàng):
每次插入一整行數(shù)據(jù),不可能只插入半行或幾列數(shù)據(jù);
數(shù)據(jù)值的數(shù)目必須與列數(shù)相同,每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型,精度和小數(shù)位數(shù)也必須與相應(yīng)的列匹配;
INSERT語(yǔ)句不能為標(biāo)識(shí)列指定值,因?yàn)樗闹凳亲詣?dòng)增長(zhǎng)的;
對(duì)于字符類型的列,當(dāng)插入數(shù)據(jù)的時(shí)候,需要使用單引號(hào);
如果在設(shè)計(jì)表的時(shí)候指定某列不允許為空,則該列必須插入數(shù)據(jù),否則將報(bào)告錯(cuò)誤信息;
插入的數(shù)據(jù)項(xiàng)要求符合CHECK約束的要求;
- 盡管可以不指定列名,但是應(yīng)養(yǎng)成好習(xí)慣,明確指定插入的列和對(duì)應(yīng)的值;
create database benet; <!--創(chuàng)建benet數(shù)據(jù)庫(kù)-->
use benet; <!--切換到benet數(shù)據(jù)庫(kù)-->
create table 學(xué)生統(tǒng)計(jì)表 ( <!--創(chuàng)建學(xué)生統(tǒng)計(jì)表-->
編號(hào) int identity (1,1) not null,
姓名 nvarchar(3) not null,
性別 nvarchar(2) not null,
年齡 varchar (3) null,
身份證號(hào)碼 varchar(18) primary key,
出生日期 datetime not null,
意向科目 nvarchar(5) null,
學(xué)費(fèi) money not null check(學(xué)費(fèi) >=0 and 學(xué)費(fèi) <=10000),
);
select * from 學(xué)生統(tǒng)計(jì)表; <!--查看表結(jié)構(gòu)-->
<!--學(xué)生統(tǒng)計(jì)表中插入數(shù)據(jù)-->
insert into 學(xué)生統(tǒng)計(jì)表 (姓名,性別,年齡,身份證號(hào)碼,出生日期,意向科目,學(xué)費(fèi)) values ('張三','男','21','111111111111111111','2001/11/27','數(shù)學(xué)',7000);
insert into 學(xué)生統(tǒng)計(jì)表 (姓名,性別,身份證號(hào)碼,出生日期,學(xué)費(fèi)) values ('麗麗','女','222222222222222222','2003/9/24',8000);
insert into 學(xué)生統(tǒng)計(jì)表 (姓名,性別,身份證號(hào)碼,出生日期,學(xué)費(fèi)) values ('馬三','男','333333333333333333','2005/08/12',6500);
select * from 學(xué)生統(tǒng)計(jì)表; <!--查看表結(jié)構(gòu)-->
使用UPDATE語(yǔ)句更新表中的數(shù)據(jù),語(yǔ)法如下:
UPDATE <表名> SET <列名=更新值> [WHERE <更新條件>]
其中:
update 學(xué)生統(tǒng)計(jì)表 set 年齡=37 where 姓名='馬三';
update 學(xué)生統(tǒng)計(jì)表 set 學(xué)費(fèi)=5000,意向科目='語(yǔ)文' where 姓名='馬三';
DELETE FROM <表名> [WHERE <刪除條件>]
示例如下:
delete from 學(xué)生統(tǒng)計(jì)表 where 姓名='張三';
<!--刪除學(xué)生統(tǒng)計(jì)表中張三的記錄-->
DELETE FROM <表名>
示例如下:
delete from 學(xué)生統(tǒng)計(jì)表; <!--刪除學(xué)生統(tǒng)計(jì)表中所有記錄-->
Truncate Table語(yǔ)句用來刪除表中的所有行,功能上類似于沒有WHERE子句的DELETE語(yǔ)句,Truncate Table語(yǔ)法格式如下:
Truncate Table <表名>
示例如下:
Truncate Table 學(xué)生統(tǒng)計(jì)表;
<!--刪除學(xué)生統(tǒng)計(jì)表中的所有記錄行-->
Truncate Table語(yǔ)句于DELETE語(yǔ)句的區(qū)別如下:
Truncate Table語(yǔ)句不帶WHERE子句,只能將整個(gè)表數(shù)據(jù)清空。而DELETE語(yǔ)句可以帶WHERE子句,允許按條件刪除某些記錄;
Truncate Table語(yǔ)句不記錄事務(wù)日志,而DELETE語(yǔ)句無論刪除多少記錄,都會(huì)每刪除一行就記錄一條事務(wù)日志。所以使用Truncate Table語(yǔ)句刪除數(shù)據(jù)后是無法通過事務(wù)日志恢復(fù)的;
Truncate Table語(yǔ)句刪除表中所有行,標(biāo)識(shí)列會(huì)重置為0,而DELETE語(yǔ)句不會(huì)重置標(biāo)識(shí)列;
- Truncate Table語(yǔ)句不能用于有外鍵約束引用的表,這種情況下,需要使用DELETE語(yǔ)句;
綜上所述,Truncate Table語(yǔ)句執(zhí)行速度更快,在清空大數(shù)據(jù)量表作業(yè)時(shí),DBA常用此語(yǔ)句。但是在執(zhí)行此語(yǔ)句前要確保數(shù)據(jù)可以刪除,否則無法恢復(fù)。
SQL語(yǔ)言中最主要、最核心的部分是它的查詢功能。查詢語(yǔ)句用來對(duì)已經(jīng)存在于數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照特定的組合,條件表達(dá)式或次序進(jìn)行檢索。數(shù)據(jù)庫(kù)中的查詢是使用SELECT語(yǔ)句來完成的。
T-SQL中的查詢基本格式是由SELECT子句,F(xiàn)ROM子句和WHERE子句組成的查詢塊
SELECT <列名> FROM <表名> WHERE <查詢限定條件>
在SQL server中,select語(yǔ)句的語(yǔ)法如下:
SELECT select_list
[ INTO new_table_name ]
FROM table_name
[WHERE search_conditions ]
[GROUP BY group_by_expression] [HAVING search_conditions]
[ORDER BY order_expression [ASC|DESC] ]
以上各項(xiàng)參數(shù)說明如下:
表達(dá)式是符號(hào)和運(yùn)算符的一種組合,并且可以對(duì)它求值得到單個(gè)數(shù)據(jù)值,簡(jiǎn)單表達(dá)式可以是一個(gè)常數(shù)、變量、列或標(biāo)量函數(shù)。可以用運(yùn)算符把兩個(gè)或多個(gè)簡(jiǎn)單表達(dá)式連接成一個(gè)復(fù)雜表達(dá)式。
SQL Server中的表達(dá)式可以包含下列一個(gè)或多個(gè)參數(shù):
常量:表示單個(gè)指定數(shù)據(jù)值的符號(hào)。一個(gè)常量由一個(gè)或多個(gè)字母、數(shù)字字符(字母a~z、A~Z,數(shù)字0~9)或符號(hào)(!、@、#等)組成。字母、日期和時(shí)間數(shù)據(jù)類型的常量需要用單引號(hào)括起來,二進(jìn)制字符串和數(shù)字常量則不需要;
列名:表中列的名稱,表達(dá)式中僅允許使用列的名稱;
{一元運(yùn)算符}:僅有一個(gè)操作數(shù)的運(yùn)算符,其中“+”表示正數(shù),“-”表示負(fù)數(shù),“~”表示補(bǔ)救運(yùn)算符;
- {二元運(yùn)算符}:將兩個(gè)操作數(shù)組合執(zhí)行操作的運(yùn)算符。二元運(yùn)算符可以是算術(shù)運(yùn)算符、賦值運(yùn)算符(=)、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串串聯(lián)(或連接)運(yùn)算符(+)或一元運(yùn)算符。
示例如下:
<!--查詢學(xué)費(fèi)大于6500的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) > 6500;
<!--查看學(xué)費(fèi)大于等于8000的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) >= 8000;
<!--查看學(xué)費(fèi)小于6000的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) < 6000;
<!--查看學(xué)費(fèi)小于等于7000的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) <= 7000;
<!--查看學(xué)費(fèi)不等于7000的學(xué)生信息-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) <> 7000;
<!--查詢學(xué)費(fèi)在6500~8000的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) between 6500 and 8500;
<!--查詢學(xué)費(fèi)為8000、7500、3000的學(xué)生所有信息-->
select * from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi) in (8000,7500,3000);
<!--查看學(xué)生統(tǒng)計(jì)表中年齡為空的學(xué)生所有信息-->
select * from 學(xué)生統(tǒng)計(jì)表 where 年齡 is null;
通配符經(jīng)常與LIKE運(yùn)算符一起配合使用完成模糊查詢。可以使用LIKE和通配符來完成對(duì)表的一些特殊約束。
示例如下:
<!--查看表中姓李的所有學(xué)生-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名 like '李%';
<!--查看姓李為三個(gè)字的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名 like '李__'
<!--查看姓杜為兩個(gè)字的顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名 like '杜_(tái)'
<!--查詢學(xué)生統(tǒng)計(jì)表中以三結(jié)尾且介于杜與王開頭的名字-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名 like '[杜-王]三';
<!--查詢學(xué)生統(tǒng)計(jì)表中以杜開頭且后面不為三和六的所有名字-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名 like '杜[^三六]';
AND和OR運(yùn)算符是連接條件表達(dá)式,NOT否定條件。AND連接兩個(gè)條件,并且僅當(dāng)兩個(gè)條件都為真時(shí)才返回True。OR也連接兩個(gè)條件,但只要其中任意一個(gè)為真就返回True。
示例如下:
<!--使用and查詢兩個(gè)結(jié)果為真顯示內(nèi)容-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名='麗麗' and 學(xué)費(fèi)=5000;
<!--使用or查詢兩個(gè)結(jié)果一個(gè)滿足顯示內(nèi)容-->
select * from 學(xué)生統(tǒng)計(jì)表 where 姓名='張三' or 學(xué)費(fèi)=8760;
<!--顯示學(xué)費(fèi)不是8000的-->
select * from 學(xué)生統(tǒng)計(jì)表 where not 學(xué)費(fèi)=8000;
<!--查看學(xué)生統(tǒng)計(jì)表中的前3行數(shù)據(jù)-->
select top 3 * from 學(xué)生統(tǒng)計(jì)表;
<!--查詢學(xué)生統(tǒng)計(jì)表,姓名和身份證號(hào)碼,查詢結(jié)果為name和idcard-->
select 姓名 as name,身份證號(hào)碼 as idcard from 學(xué)生統(tǒng)計(jì)表;
<!--查詢學(xué)生統(tǒng)計(jì)表中所有信息,將學(xué)費(fèi)從高到低顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 order by 學(xué)費(fèi) desc;
<!--查詢學(xué)生統(tǒng)計(jì)表中所有信息,將學(xué)費(fèi)從低到高顯示出來-->
select * from 學(xué)生統(tǒng)計(jì)表 order by 學(xué)費(fèi) asc;
<!--去除重復(fù)列數(shù)據(jù)-->
select distinct 意向科目 from 學(xué)生統(tǒng)計(jì)表;
SELECT不僅僅只能查詢,結(jié)合INTO關(guān)鍵字或?qū)ELECT作為INSERT的子句,都可以實(shí)現(xiàn)生成新數(shù)據(jù)的功能。
SELECT使用INTO關(guān)鍵字可以從一個(gè)表中選擇一些數(shù)據(jù)插入新表中
<!--將查詢的數(shù)據(jù)顯示在新的new1表中-->
select * into new1 from 學(xué)生統(tǒng)計(jì)表;
通過將SELECT作為INSERT的子句,也可以將現(xiàn)有表中的數(shù)據(jù)添加到新表中,與上一個(gè)方法不同的是,這個(gè)新表需要事先創(chuàng)建好,并且具有SELECT子句查詢結(jié)果對(duì)應(yīng)的列,查詢結(jié)果對(duì)應(yīng)的數(shù)據(jù)個(gè)數(shù)、順序和數(shù)據(jù)類型也要保持一致。
示例如下:
insert into new2 (姓名,性別,年齡,身份證號(hào)碼) select 姓名,性別,年齡,身份證號(hào)碼 from 學(xué)生統(tǒng)計(jì)表 where 學(xué)費(fèi)>=7500
<!--將學(xué)生統(tǒng)計(jì)表中所有學(xué)費(fèi)大于等于7500的學(xué)生的姓名,性別,
年齡和身份證號(hào)碼保存到new2表中
(注意,這里的 new2表中需要提前建立)-->
UNION關(guān)鍵字用于將多個(gè)不同的數(shù)據(jù)或查詢結(jié)果合并成一個(gè)新的結(jié)果集。不同的數(shù)據(jù)或查詢結(jié)果要求數(shù)據(jù)個(gè)數(shù)、順序、數(shù)據(jù)類型都一致。
insert into new2 (姓名,性別,年齡,身份證號(hào)碼)
select '娟娟','女','31','444444444444444444');
select '杜五','男','27','555555555555555555');
select '李二的','男','18','666666666666666666');
select 姓名,性別,年齡,身份證號(hào)碼 from 學(xué)生統(tǒng)計(jì)表
<!--將學(xué)生統(tǒng)計(jì)表中所有學(xué)生的姓名,性別,年齡,身份證號(hào)碼,
以及新輸入的3名學(xué)生的相關(guān)信息,一起保存到新表new2-->
<!--用T-SQL語(yǔ)句創(chuàng)建表products,指定“編號(hào)”列為主鍵列和標(biāo)識(shí)列-->
create table products
(
編號(hào) int identity (1,1) primary key,
名稱 nvarchar(10) not null,
種類 nvarchar(10) not null,
成本 money not null check (成本 >=0 and 成本 <=60),
出廠日期 date not null,
);
insert into products values <!--用insert into語(yǔ)句一次性插入數(shù)據(jù)-->
('西瓜','水果','4.1','2017/05/06'),
('芹菜','蔬菜','1.0','2017/04/01'),
('番茄','蔬菜','2.9','2017/04/01'),
('黃瓜','蔬菜','2.2','2017/05/09'),
('香蕉','水果','6.1','2017/05/23'),
('核桃','堅(jiān)果','28.5','2017/06/02'),
('開心果','堅(jiān)果','38.11','2017/06/21'),
('藍(lán)莓','水果','50.2','2017/05/15');
<!--也可以通過下面語(yǔ)句格式插入數(shù)據(jù)-->
insert into products values ('西瓜','水果','4.1','2017/05/06');
insert into products values ('芹菜','蔬菜','1.0','2017/04/01');
insert into products values ('番茄','蔬菜','2.9','2017/04/01');
insert into products values ('黃瓜','蔬菜','2.2','2017/05/09');
insert into products values ('香蕉','水果','6.1','2017/05/23');
insert into products values ('核桃','堅(jiān)果','28.5','2017/06/02');
insert into products values ('開心果','堅(jiān)果','38.11','2017/06/21');
insert into products values ('藍(lán)莓','水果','50.2','2017/05/15');
select * from products; <!--使用select語(yǔ)句驗(yàn)證結(jié)果-->
select * from products where 成本 < 10;
update products set 成本=成本 +1 where 種類='蔬菜';
select * from products where 種類='蔬菜';
select * from products where 成本 > 3 and 成本 < 40 order by 成本 desc;
select * from products where 成本 in (4.1,6.1,28.5,38.11,50.2);
select distinct 種類 from products;
select 名稱,種類,出廠日期 into products_new from products;
select * from products_new;
看完上述內(nèi)容,你們對(duì)SQL Server中T-SQL查詢語(yǔ)句的介紹和使用有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。
名稱欄目:SQLServer中T-SQL查詢語(yǔ)句的介紹和使用
當(dāng)前路徑:http://www.chinadenli.net/article8/pidoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、小程序開發(fā)、關(guān)鍵詞優(yōu)化、域名注冊(cè)、品牌網(wǎng)站建設(shè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)