溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL Server中T-SQL查詢語句的介紹和使用

發(fā)布時間:2020-06-12 12:58:13 來源:億速云 閱讀:372 作者:Leah 欄目:關系型數(shù)據(jù)庫

本文將為大家詳細介紹SQL Server中T-SQL查詢語句的介紹和使用,內(nèi)容詳細步驟清晰,細節(jié)處理妥當,希望大家通過這篇文章有所收獲,我們先來看看文章相關術(shù)語概念:

一、SQL簡介

在進行數(shù)據(jù)管理時,使用SSMS進行數(shù)據(jù)維護有可視化、方便的優(yōu)點,但是在批量維護或重復維護數(shù)據(jù)時,每次都需要使用SSMS不但不方便,而且容易出錯。通過編寫SQL語句來維護數(shù)據(jù)庫便于解決重復或批量維護數(shù)據(jù)的難題。

1、SQL和T-SQL

SQL是Structured Query Language的縮寫,即結(jié)構(gòu)化查詢語言。SQL廣泛地被采用說明了它的優(yōu)勢,它使全部用戶,包括應用程序員、數(shù)據(jù)庫管理員和終端用戶受益匪淺。

1)非過程化語言

SQL是一個非過程化的語言,因為它一次處理一個記錄,對數(shù)據(jù)提供自動導航功能。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對單個記錄進行操作,可操作記錄集。所有SQL語句可以接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入。

2)統(tǒng)一的語言

SQL可用于所有用戶的數(shù)據(jù)庫活動模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、應用程序員、決策支持系統(tǒng)人員及許多其他類型的終端用戶。SQL為許多任務提供了命令,包括:

  • 查詢數(shù)據(jù);
  • 在表中插入、修改和刪除記錄;
  • 建立、修改和刪除數(shù)據(jù)對象;
  • 控制對數(shù)據(jù)和數(shù)據(jù)對象的存?。?/li>
  • 保證數(shù)據(jù)庫一致性和完整性;

2、T-SQL的組成

T-SQL語言主要由以下幾部分組成:

  • 數(shù)據(jù)操縱語言:用來查詢、插入、刪除和修改數(shù)據(jù)庫中的數(shù)據(jù),如select、insert、update、delete;

  • 數(shù)據(jù)定義語言:用來建立數(shù)據(jù)庫、數(shù)據(jù)庫對象和定義其列,大部分是以CREATE開頭的命令,如CREATE、ALTER、DROP;

  • 數(shù)據(jù)控制語言(Data Control Language,DCL):用來控制數(shù)據(jù)庫組件的存取許可,存取權(quán)限等,如GRANT、REVOKE;

二、使用T-SQL語句操作數(shù)據(jù)表

在SQL Server Management中對表數(shù)據(jù)進行插入、更新或刪除比較簡單,除此之外,也可以使用T-SQL語句實現(xiàn)對表數(shù)據(jù)的插入、更新或刪除等操作。

1、插入數(shù)據(jù)

使用INSERT語句將數(shù)據(jù)插入表中

INSERT [INTO] <表名> [列名] VALUES <值列表>

其中:

  • [INTO]是可選的,可以省略;
  • 表名是必需的,而表的列名是可選的,如果省略,<值列表>中順序與數(shù)據(jù)表中字段順序保存一致;
  • 多個列名和多個值列表用逗號分隔;

在插入數(shù)據(jù)的時候,需要注意以下事項:

  • 每次插入一整行數(shù)據(jù),不可能只插入半行或幾列數(shù)據(jù);

  • 數(shù)據(jù)值的數(shù)目必須與列數(shù)相同,每個數(shù)據(jù)值的數(shù)據(jù)類型,精度和小數(shù)位數(shù)也必須與相應的列匹配;

  • INSERT語句不能為標識列指定值,因為它的值是自動增長的;

  • 對于字符類型的列,當插入數(shù)據(jù)的時候,需要使用單引號;

  • 如果在設計表的時候指定某列不允許為空,則該列必須插入數(shù)據(jù),否則將報告錯誤信息;

  • 插入的數(shù)據(jù)項要求符合CHECK約束的要求;

  • 盡管可以不指定列名,但是應養(yǎng)成好習慣,明確指定插入的列和對應的值;

1)創(chuàng)建數(shù)據(jù)庫,切換數(shù)據(jù)庫,創(chuàng)建表

create database benet;   <!--創(chuàng)建benet數(shù)據(jù)庫-->
use benet;       <!--切換到benet數(shù)據(jù)庫-->
create table 學生統(tǒng)計表 (    <!--創(chuàng)建學生統(tǒng)計表-->
    編號 int identity (1,1) not null,
    姓名 nvarchar(3) not null,
    性別 nvarchar(2) not null,
    年齡 varchar (3) null,
    身份證號碼 varchar(18) primary key,
    出生日期 datetime not null,
    意向科目 nvarchar(5) null,
    學費 money not null check(學費 >=0 and 學費 <=10000),
);
select * from 學生統(tǒng)計表;   <!--查看表結(jié)構(gòu)-->

SQL Server中T-SQL查詢語句的介紹和使用

2)學生統(tǒng)計表中插入數(shù)據(jù)

<!--學生統(tǒng)計表中插入數(shù)據(jù)-->
insert into 學生統(tǒng)計表 (姓名,性別,年齡,身份證號碼,出生日期,意向科目,學費) values ('張三','男','21','111111111111111111','2001/11/27','數(shù)學',7000);

insert into 學生統(tǒng)計表 (姓名,性別,身份證號碼,出生日期,學費) values ('麗麗','女','222222222222222222','2003/9/24',8000);

insert into 學生統(tǒng)計表 (姓名,性別,身份證號碼,出生日期,學費) values ('馬三','男','333333333333333333','2005/08/12',6500);

SQL Server中T-SQL查詢語句的介紹和使用

3)查看學生統(tǒng)計表

select * from 學生統(tǒng)計表;   <!--查看表結(jié)構(gòu)-->

SQL Server中T-SQL查詢語句的介紹和使用

2、更新數(shù)據(jù)

使用UPDATE語句更新表中的數(shù)據(jù),語法如下:

UPDATE <表名> SET <列名=更新值> [WHERE <更新條件>]

其中:

  • SET后面可以緊隨多個數(shù)據(jù)列的更新值,不限一個;
  • WHERE子句是可選的,用來限制條件。如果不限制,則整個表的所有數(shù)據(jù)行將被更新;

1)修改學生統(tǒng)計表中馬三的年齡為37

update 學生統(tǒng)計表 set 年齡=37 where 姓名='馬三';

SQL Server中T-SQL查詢語句的介紹和使用

2)修改學生統(tǒng)計表中馬三的學費和意向科目

update 學生統(tǒng)計表 set 學費=5000,意向科目='語文' where 姓名='馬三';

SQL Server中T-SQL查詢語句的介紹和使用

3、刪除數(shù)據(jù)

1)使用DELETE語句刪除表中的數(shù)據(jù),DELETE語法格式如下:

DELETE FROM <表名> [WHERE <刪除條件>]

示例如下:

delete from 學生統(tǒng)計表 where 姓名='張三';   
                  <!--刪除學生統(tǒng)計表中張三的記錄-->

SQL Server中T-SQL查詢語句的介紹和使用

2)使用DELETE語句刪除表中所有記錄,語法格式如下:

DELETE FROM <表名>

示例如下:

delete from 學生統(tǒng)計表;   <!--刪除學生統(tǒng)計表中所有記錄-->

3)使用Truncate Table語句刪除表中的數(shù)據(jù)

Truncate Table語句用來刪除表中的所有行,功能上類似于沒有WHERE子句的DELETE語句,Truncate Table語法格式如下:

Truncate Table <表名>

示例如下:

Truncate Table 學生統(tǒng)計表; 
       <!--刪除學生統(tǒng)計表中的所有記錄行-->

Truncate Table語句于DELETE語句的區(qū)別如下:

  • Truncate Table語句不帶WHERE子句,只能將整個表數(shù)據(jù)清空。而DELETE語句可以帶WHERE子句,允許按條件刪除某些記錄;

  • Truncate Table語句不記錄事務日志,而DELETE語句無論刪除多少記錄,都會每刪除一行就記錄一條事務日志。所以使用Truncate Table語句刪除數(shù)據(jù)后是無法通過事務日志恢復的;

  • Truncate Table語句刪除表中所有行,標識列會重置為0,而DELETE語句不會重置標識列;

  • Truncate Table語句不能用于有外鍵約束引用的表,這種情況下,需要使用DELETE語句;

綜上所述,Truncate Table語句執(zhí)行速度更快,在清空大數(shù)據(jù)量表作業(yè)時,DBA常用此語句。但是在執(zhí)行此語句前要確保數(shù)據(jù)可以刪除,否則無法恢復。

三、使用T-SQL查詢數(shù)據(jù)

SQL語言中最主要、最核心的部分是它的查詢功能。查詢語句用來對已經(jīng)存在于數(shù)據(jù)庫中的數(shù)據(jù)按照特定的組合,條件表達式或次序進行檢索。數(shù)據(jù)庫中的查詢是使用SELECT語句來完成的。

1、SELECT語法結(jié)構(gòu)

T-SQL中的查詢基本格式是由SELECT子句,F(xiàn)ROM子句和WHERE子句組成的查詢塊

SELECT <列名> FROM <表名> WHERE <查詢限定條件>

在SQL   server中,select語句的語法如下:

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]  ]     

SQL Server中T-SQL查詢語句的介紹和使用
以上各項參數(shù)說明如下:
SQL Server中T-SQL查詢語句的介紹和使用

2、表達式

表達式是符號和運算符的一種組合,并且可以對它求值得到單個數(shù)據(jù)值,簡單表達式可以是一個常數(shù)、變量、列或標量函數(shù)??梢杂眠\算符把兩個或多個簡單表達式連接成一個復雜表達式。

1)條件表達式

SQL Server中的表達式可以包含下列一個或多個參數(shù):

  • 常量:表示單個指定數(shù)據(jù)值的符號。一個常量由一個或多個字母、數(shù)字字符(字母a~z、A~Z,數(shù)字0~9)或符號(!、@、#等)組成。字母、日期和時間數(shù)據(jù)類型的常量需要用單引號括起來,二進制字符串和數(shù)字常量則不需要;

  • 列名:表中列的名稱,表達式中僅允許使用列的名稱;

  • {一元運算符}:僅有一個操作數(shù)的運算符,其中“+”表示正數(shù),“-”表示負數(shù),“~”表示補救運算符;

  • {二元運算符}:將兩個操作數(shù)組合執(zhí)行操作的運算符。二元運算符可以是算術(shù)運算符、賦值運算符(=)、位運算符、比較運算符、邏輯運算符、字符串串聯(lián)(或連接)運算符(+)或一元運算符。

2)比較運算符及其含義如下表:

SQL Server中T-SQL查詢語句的介紹和使用

示例如下:

<!--查詢學費大于6500的顯示出來-->
select * from 學生統(tǒng)計表 where 學費 > 6500;
<!--查看學費大于等于8000的顯示出來-->
select * from 學生統(tǒng)計表 where 學費 >= 8000;
<!--查看學費小于6000的顯示出來-->
select * from 學生統(tǒng)計表 where 學費 < 6000;
<!--查看學費小于等于7000的顯示出來-->
select * from 學生統(tǒng)計表 where 學費 <= 7000;
<!--查看學費不等于7000的學生信息-->
select * from 學生統(tǒng)計表 where 學費 <> 7000;
<!--查詢學費在6500~8000的顯示出來-->
select * from 學生統(tǒng)計表 where 學費 between 6500 and 8500;
<!--查詢學費為8000、7500、3000的學生所有信息-->
select * from 學生統(tǒng)計表 where 學費 in (8000,7500,3000);
<!--查看學生統(tǒng)計表中年齡為空的學生所有信息-->
select * from 學生統(tǒng)計表 where 年齡 is null;

3)通配符及其含義如下表:

SQL Server中T-SQL查詢語句的介紹和使用
通配符經(jīng)常與LIKE運算符一起配合使用完成模糊查詢??梢允褂肔IKE和通配符來完成對表的一些特殊約束。

示例如下:

<!--查看表中姓李的所有學生-->
select * from 學生統(tǒng)計表 where 姓名 like '李%';
<!--查看姓李為三個字的顯示出來-->
select * from 學生統(tǒng)計表 where 姓名 like '李__'
<!--查看姓杜為兩個字的顯示出來-->
select * from 學生統(tǒng)計表 where 姓名 like '杜_'
<!--查詢學生統(tǒng)計表中以三結(jié)尾且介于杜與王開頭的名字-->
select * from 學生統(tǒng)計表 where 姓名 like '[杜-王]三';
<!--查詢學生統(tǒng)計表中以杜開頭且后面不為三和六的所有名字-->
select * from 學生統(tǒng)計表 where 姓名 like '杜[^三六]';

4)邏輯運算符及其含義如下表:

SQL Server中T-SQL查詢語句的介紹和使用
AND和OR運算符是連接條件表達式,NOT否定條件。AND連接兩個條件,并且僅當兩個條件都為真時才返回True。OR也連接兩個條件,但只要其中任意一個為真就返回True。

示例如下:

<!--使用and查詢兩個結(jié)果為真顯示內(nèi)容-->
select * from 學生統(tǒng)計表 where 姓名='麗麗' and 學費=5000;
<!--使用or查詢兩個結(jié)果一個滿足顯示內(nèi)容-->
select * from 學生統(tǒng)計表 where 姓名='張三' or 學費=8760;
<!--顯示學費不是8000的-->
select * from 學生統(tǒng)計表 where not 學費=8000;

3、查詢結(jié)果排序

<!--查看學生統(tǒng)計表中的前3行數(shù)據(jù)-->
select top 3 * from 學生統(tǒng)計表;
<!--查詢學生統(tǒng)計表,姓名和身份證號碼,查詢結(jié)果為name和idcard-->
select 姓名 as name,身份證號碼 as idcard from 學生統(tǒng)計表;
<!--查詢學生統(tǒng)計表中所有信息,將學費從高到低顯示出來-->
select * from 學生統(tǒng)計表 order by 學費 desc;
<!--查詢學生統(tǒng)計表中所有信息,將學費從低到高顯示出來-->
select * from 學生統(tǒng)計表 order by 學費 asc;
<!--去除重復列數(shù)據(jù)-->
select distinct 意向科目 from 學生統(tǒng)計表;

四、使用SELECT生成新數(shù)據(jù)

SELECT不僅僅只能查詢,結(jié)合INTO關鍵字或?qū)ELECT作為INSERT的子句,都可以實現(xiàn)生成新數(shù)據(jù)的功能。

1、SELECT使用INTO關鍵字

SELECT使用INTO關鍵字可以從一個表中選擇一些數(shù)據(jù)插入新表中

<!--將查詢的數(shù)據(jù)顯示在新的new1表中-->
select * into new1 from 學生統(tǒng)計表;

2、INSERT使用SELECT子句

通過將SELECT作為INSERT的子句,也可以將現(xiàn)有表中的數(shù)據(jù)添加到新表中,與上一個方法不同的是,這個新表需要事先創(chuàng)建好,并且具有SELECT子句查詢結(jié)果對應的列,查詢結(jié)果對應的數(shù)據(jù)個數(shù)、順序和數(shù)據(jù)類型也要保持一致。

示例如下:

insert into new2 (姓名,性別,年齡,身份證號碼) select 姓名,性別,年齡,身份證號碼 from 學生統(tǒng)計表 where 學費>=7500 
<!--將學生統(tǒng)計表中所有學費大于等于7500的學生的姓名,性別,
年齡和身份證號碼保存到new2表中
(注意,這里的 new2表中需要提前建立)-->

3、使用UNION關鍵字

UNION關鍵字用于將多個不同的數(shù)據(jù)或查詢結(jié)果合并成一個新的結(jié)果集。不同的數(shù)據(jù)或查詢結(jié)果要求數(shù)據(jù)個數(shù)、順序、數(shù)據(jù)類型都一致。

insert into new2 (姓名,性別,年齡,身份證號碼) 
select '娟娟','女','31','444444444444444444');
select '杜五','男','27','555555555555555555');
select '李二的','男','18','666666666666666666');
select 姓名,性別,年齡,身份證號碼 from 學生統(tǒng)計表
<!--將學生統(tǒng)計表中所有學生的姓名,性別,年齡,身份證號碼,
以及新輸入的3名學生的相關信息,一起保存到新表new2-->

五、T-SQL語句單表查詢案例

1、創(chuàng)建products表

  <!--用T-SQL語句創(chuàng)建表products,指定“編號”列為主鍵列和標識列-->
create table products 
( 
    編號 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語句一次性插入數(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'),
('核桃','堅果','28.5','2017/06/02'),
('開心果','堅果','38.11','2017/06/21'),
('藍莓','水果','50.2','2017/05/15');

<!--也可以通過下面語句格式插入數(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 ('核桃','堅果','28.5','2017/06/02');
insert into products values ('開心果','堅果','38.11','2017/06/21');
insert into products values ('藍莓','水果','50.2','2017/05/15');
select * from products;    <!--使用select語句驗證結(jié)果-->

SQL Server中T-SQL查詢語句的介紹和使用

2、多表查詢示例

1)查詢成本低于10元的水果信息

select * from products where 成本 < 10;

SQL Server中T-SQL查詢語句的介紹和使用

2)將所有蔬菜的成本上調(diào)1元

update products set 成本=成本 +1  where 種類='蔬菜';
select * from products where 種類='蔬菜';

SQL Server中T-SQL查詢語句的介紹和使用

3)查詢成本大于3元并小于40元的產(chǎn)品信息,并按照成本從高到低的順序顯示結(jié)果

select * from products where 成本 > 3 and 成本 < 40 order by 成本 desc;  

SQL Server中T-SQL查詢語句的介紹和使用

4)查詢成本最高的5個產(chǎn)品信息

select * from products where 成本 in (4.1,6.1,28.5,38.11,50.2);

SQL Server中T-SQL查詢語句的介紹和使用

5)查詢有哪些產(chǎn)品種類

select distinct 種類 from products;

SQL Server中T-SQL查詢語句的介紹和使用

6)將products表中所有水果的名稱、種類和出廠日期信息并插入新表products_new中

select 名稱,種類,出廠日期 into products_new from products;
select * from products_new;

SQL Server中T-SQL查詢語句的介紹和使用

看完上述內(nèi)容,你們對SQL Server中T-SQL查詢語句的介紹和使用有進一步的了解嗎?如果還想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI