在進行數據管理時,使用SSMS進行數據維護有可視化、方便的優勢,可是在批量維護或重複維護數據時,每次都須要使用SSMS不但不方便,並且容易出錯。經過編寫SQL語句來維護數據庫便於解決重複或批量維護數據的難題。程序員
SQL是Structured Query Language的縮寫,即結構化查詢語言。SQL普遍地被採用說明了它的優點,它使所有用戶,包括應用程序員、數據庫管理員和終端用戶受益不淺。數據庫
SQL是一個非過程化的語言,由於它一次處理一個記錄,對數據提供自動導航功能。SQL容許用戶在高層的數據結構上工做,而不對單個記錄進行操做,可操做記錄集。全部SQL語句能夠接受集合做爲輸入,返回集合做爲輸出。SQL的集合特性容許一條SQL語句的輸出做爲另外一條SQL語句的輸入。express
SQL可用於全部用戶的數據庫活動模型,包括系統管理員、數據庫管理員、應用程序員、決策支持系統人員及許多其餘類型的終端用戶。SQL爲許多任務提供了命令,包括:數組
T-SQL語言主要由如下幾部分組成:數據結構
數據操縱語言:用來查詢、插入、刪除和修改數據庫中的數據,如select、insert、update、delete;ide
數據定義語言:用來創建數據庫、數據庫對象和定義其列,大部分是以CREATE開頭的命令,如CREATE、ALTER、DROP;函數
- 數據控制語言(Data Control Language,DCL):用來控制數據庫組件的存取許可,存取權限等,如GRANT、REVOKE;
在SQL Server Management中對錶數據進行插入、更新或刪除比較簡單,除此以外,也可使用T-SQL語句實現對錶數據的插入、更新或刪除等操做。大數據
使用INSERT語句將數據插入表中設計
INSERT [INTO] <表名> [列名] VALUES <值列表>
其中:日誌
在插入數據的時候,須要注意如下事項:
每次插入一整行數據,不可能只插入半行或幾列數據;
數據值的數目必須與列數相同,每一個數據值的數據類型,精度和小數位數也必須與相應的列匹配;
INSERT語句不能爲標識列指定值,由於它的值是自動增加的;
對於字符類型的列,當插入數據的時候,須要使用單引號;
若是在設計表的時候指定某列不容許爲空,則該列必須插入數據,不然將報告錯誤信息;
插入的數據項要求符合CHECK約束的要求;
- 儘管能夠不指定列名,可是應養成好習慣,明確指定插入的列和對應的值;
create database benet; <!--建立benet數據庫--> use benet; <!--切換到benet數據庫--> create table 學生統計表 ( <!--建立學生統計表--> 編號 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 學生統計表; <!--查看錶結構-->
<!--學生統計表中插入數據--> insert into 學生統計表 (姓名,性別,年齡,身份證號碼,出生日期,意向科目,學費) values ('張三','男','21','111111111111111111','2001/11/27','數學',7000); insert into 學生統計表 (姓名,性別,身份證號碼,出生日期,學費) values ('麗麗','女','222222222222222222','2003/9/24',8000); insert into 學生統計表 (姓名,性別,身份證號碼,出生日期,學費) values ('馬三','男','333333333333333333','2005/08/12',6500);
select * from 學生統計表; <!--查看錶結構-->
使用UPDATE語句更新表中的數據,語法以下:
UPDATE <表名> SET <列名=更新值> [WHERE <更新條件>]
其中:
update 學生統計表 set 年齡=37 where 姓名='馬三';
update 學生統計表 set 學費=5000,意向科目='語文' where 姓名='馬三';
DELETE FROM <表名> [WHERE <刪除條件>]
示例以下:
delete from 學生統計表 where 姓名='張三'; <!--刪除學生統計表中張三的記錄-->
DELETE FROM <表名>
示例以下:
delete from 學生統計表; <!--刪除學生統計表中全部記錄-->
Truncate Table語句用來刪除表中的全部行,功能上相似於沒有WHERE子句的DELETE語句,Truncate Table語法格式以下:
Truncate Table <表名>
示例以下:
Truncate Table 學生統計表; <!--刪除學生統計表中的全部記錄行-->
Truncate Table語句於DELETE語句的區別以下:
Truncate Table語句不帶WHERE子句,只能將整個表數據清空。而DELETE語句能夠帶WHERE子句,容許按條件刪除某些記錄;
Truncate Table語句不記錄事務日誌,而DELETE語句不管刪除多少記錄,都會每刪除一行就記錄一條事務日誌。因此使用Truncate Table語句刪除數據後是沒法經過事務日誌恢復的;
Truncate Table語句刪除表中全部行,標識列會重置爲0,而DELETE語句不會重置標識列;
- Truncate Table語句不能用於有外鍵約束引用的表,這種狀況下,須要使用DELETE語句;
綜上所述,Truncate Table語句執行速度更快,在清空大數據量表做業時,DBA經常使用此語句。可是在執行此語句前要確保數據能夠刪除,不然沒法恢復。
SQL語言中最主要、最核心的部分是它的查詢功能。查詢語句用來對已經存在於數據庫中的數據按照特定的組合,條件表達式或次序進行檢索。數據庫中的查詢是使用SELECT語句來完成的。
T-SQL中的查詢基本格式是由SELECT子句,FROM子句和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中的表達式能夠包含下列一個或多個參數:
常量:表示單個指定數據值的符號。一個常量由一個或多個字母、數字字符(字母a~z、A~Z,數字0~9)或符號(!、@、#等)組成。字母、日期和時間數據類型的常量須要用單引號括起來,二進制字符串和數字常量則不須要;
列名:表中列的名稱,表達式中僅容許使用列的名稱;
{一元運算符}:僅有一個操做數的運算符,其中「+」表示正數,「-」表示負數,「~」表示補救運算符;
- {二元運算符}:將兩個操做數組合執行操做的運算符。二元運算符能夠是算術運算符、賦值運算符(=)、位運算符、比較運算符、邏輯運算符、字符串串聯(或鏈接)運算符(+)或一元運算符。
示例以下:
<!--查詢學費大於6500的顯示出來--> select * from 學生統計表 where 學費 > 6500; <!--查看學費大於等於8000的顯示出來--> select * from 學生統計表 where 學費 >= 8000; <!--查看學費小於6000的顯示出來--> select * from 學生統計表 where 學費 < 6000; <!--查看學費小於等於7000的顯示出來--> select * from 學生統計表 where 學費 <= 7000; <!--查看學費不等於7000的學生信息--> select * from 學生統計表 where 學費 <> 7000; <!--查詢學費在6500~8000的顯示出來--> select * from 學生統計表 where 學費 between 6500 and 8500; <!--查詢學費爲8000、7500、3000的學生全部信息--> select * from 學生統計表 where 學費 in (8000,7500,3000); <!--查看學生統計表中年齡爲空的學生全部信息--> select * from 學生統計表 where 年齡 is null;
通配符常常與LIKE運算符一塊兒配合使用完成模糊查詢。可使用LIKE和通配符來完成對錶的一些特殊約束。
示例以下:
<!--查看錶中姓李的全部學生--> select * from 學生統計表 where 姓名 like '李%'; <!--查看姓李爲三個字的顯示出來--> select * from 學生統計表 where 姓名 like '李__' <!--查看姓杜爲兩個字的顯示出來--> select * from 學生統計表 where 姓名 like '杜_' <!--查詢學生統計表中以三結尾且介於杜與王開頭的名字--> select * from 學生統計表 where 姓名 like '[杜-王]三'; <!--查詢學生統計表中以杜開頭且後面不爲三和六的全部名字--> select * from 學生統計表 where 姓名 like '杜[^三六]';
AND和OR運算符是鏈接條件表達式,NOT否認條件。AND鏈接兩個條件,而且僅當兩個條件都爲真時才返回True。OR也鏈接兩個條件,但只要其中任意一個爲真就返回True。
示例以下:
<!--使用and查詢兩個結果爲真顯示內容--> select * from 學生統計表 where 姓名='麗麗' and 學費=5000; <!--使用or查詢兩個結果一個知足顯示內容--> select * from 學生統計表 where 姓名='張三' or 學費=8760; <!--顯示學費不是8000的--> select * from 學生統計表 where not 學費=8000;
<!--查看學生統計表中的前3行數據--> select top 3 * from 學生統計表; <!--查詢學生統計表,姓名和身份證號碼,查詢結果爲name和idcard--> select 姓名 as name,身份證號碼 as idcard from 學生統計表; <!--查詢學生統計表中全部信息,將學費從高到低顯示出來--> select * from 學生統計表 order by 學費 desc; <!--查詢學生統計表中全部信息,將學費從低到高顯示出來--> select * from 學生統計表 order by 學費 asc; <!--去除重複列數據--> select distinct 意向科目 from 學生統計表;
SELECT不只僅只能查詢,結合INTO關鍵字或將SELECT做爲INSERT的子句,均可以實現生成新數據的功能。
SELECT使用INTO關鍵字能夠從一個表中選擇一些數據插入新表中
<!--將查詢的數據顯示在新的new1表中--> select * into new1 from 學生統計表;
經過將SELECT做爲INSERT的子句,也能夠將現有表中的數據添加到新表中,與上一個方法不一樣的是,這個新表須要事先建立好,而且具備SELECT子句查詢結果對應的列,查詢結果對應的數據個數、順序和數據類型也要保持一致。
示例以下:
insert into new2 (姓名,性別,年齡,身份證號碼) select 姓名,性別,年齡,身份證號碼 from 學生統計表 where 學費>=7500 <!--將學生統計表中全部學費大於等於7500的學生的姓名,性別, 年齡和身份證號碼保存到new2表中 (注意,這裏的 new2表中須要提早創建)-->
UNION關鍵字用於將多個不一樣的數據或查詢結果合併成一個新的結果集。不一樣的數據或查詢結果要求數據個數、順序、數據類型都一致。
insert into new2 (姓名,性別,年齡,身份證號碼) select '娟娟','女','31','444444444444444444'); select '杜五','男','27','555555555555555555'); select '李二的','男','18','666666666666666666'); select 姓名,性別,年齡,身份證號碼 from 學生統計表 <!--將學生統計表中全部學生的姓名,性別,年齡,身份證號碼, 以及新輸入的3名學生的相關信息,一塊兒保存到新表new2-->
<!--用T-SQL語句建立表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語句一次性插入數據--> ('西瓜','水果','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'); <!--也能夠經過下面語句格式插入數據--> 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語句驗證結果-->
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;
———————— 本文至此結束,感謝閱讀 ————————