SQL語句基本的四大元素(增,刪,改,查) 插入數據
語法:INSERT INTO 表名(字段1,字段2,...)VALUES(值1,值2,...)
其中,INTO可選.
例如:將姓名‘張三’學號‘s2t14’年齡22插入到stuInfo表中的stuName,stuNo,stuAge這三個字段中。
INSERT INTO stuInfo (stuName,stuNo,stuAge) VALUES ('張三','s2t14',22)
插入多行數據
1.通過INSERT SELECT語句將現有表中的數據添加到新表
語法:INSERT INTO 新表名(字段1,字段2,...)SELECT 字段1,字段2,... FROM 原表名
例如:INSERT INTO TongXunLu(‘Name’,‘Address’,‘Email’)SELECT SName,SAddress,SEmail FROM Students
2.通過SELECT INTO語句將現有表中的數據添加到新表
語法:SELECT 表名.字段1,表名.字段2,... INTO 新表名 FROM 原表名
例如:SELECT Students.SName,Students.SAddress,Students.SMail INTO TongXunLu FROM Students
因為標識列的數據是不允許指定的,因此我們可以創建一個新的標識列
語法:SELECT IDENTITY (數據類型,標識種子,標識增長量) AS 列名 INTO 新表名 FROM 原表名
例如:SELECT Students.SName,Students.SAddress,Students.SMail,IDENTITY(int,1,1)AS StudentsID INTO TongXunLu FROM Students
3.通過UNION關鍵字合並數據進行插入
UNION語句用於將兩個不同數據或查詢結果組合的一個新的結果集,當然,不同的數據或查詢結果,也要求數據個數、順序、數據類型都一致,因此,當向表中重復插入多次數據的時候,可以使用SELECCT...UNION來簡化操作。
例如:INSERT Students(SName,SGrade,SSex)
SELECT '女生1',7,0 UNION
SELECT '女生2',7,0 UNION
SELECT '女生3',7,0 UNION
SELECT '女生4',7,0 UNION
SELECT '女生5',7,0 UNION
SELECT '男生1',7,1 UNION
SELECT '男生2',7,1 UNION
SELECT '男生3',7,1 UNION
SELECT '男生4',7,1 刪除數據
語法:DELETE FROM 表名 WHERE (條件)
例如:刪除stuInfo表中年齡小於20歲的學生。
DELETE FROM stuInfo WHERE stuAge <20
TRUNCATE TABLE用來刪除表中所有行的命令,功能上它類似於沒有WHERE子句的DELETE語句。
例如:要刪除學員信息表中的所有記錄行,可以使用。
TRUNCATE TABLE Students
提示:TRUNCATE TABLE 刪除表中的所有行,但是表的結構、列、約束、索引等不會被改動。TRUNCATE TABLE不能用於有外鍵約束引用的表,這種情況下,需要使用DELETE語句。 修改數據
語法:UPDATE 表名 SET 字段1=值1,字段2=值2,... WHERE (條件)
例如:將stuInfo表中姓名是張三的學生年齡修改為25歲。
UPDATE stuInfo SEF stuAge = 25 WHERE stuName = '張三'
還可以通過表達式來更新數據。
例如:需要在成績表中更新成績,所有低於85分的都在原來的基礎上加5分,更新的SQL語句如下。
UPDATE Scores SET Scores =Scores + 5 WHERE Scores <= 85 查詢數據
1.查詢所有的數據行和列
把表中所有數據行和列到列舉出來需要使用“*”通配符來表示所有的列。
例如:查詢Students表中的所有數據。
SELECT * FROM Students
2.條件查詢
語法:SELECT 字段1,字段2,...FROM 表名
例如:查詢stuInfo表中所有學生的姓名(stuName)和年齡(stuAge)兩個字段。
SELECT stuName,stuAge FROM stuInfo
3.在查詢中使用列名
AS子句可以用來改變結果集列的名稱,還有一種情況是要讓標題列的信息更易懂。
例如:把SCode列名查詢後顯示為“學員編號”
SELECT SCode AS 學員編號,SName AS 學員姓名 FROM Students
還有一種情況是使用計算、合並得到新列的命名。
例如:在查詢Employees表中的數據時,需要把FirstName和LastName字段合並成一個叫“姓名”的字段。
SELECT FirstName+'.'+LastName AS '姓名'FROM Employees 或者
SELECT '姓名'= FirstName+'.'+LastName FROM Employees
4.查詢空行
在SQL語句中采用“IS NULL”或者“IS NOT NULL”來判斷是否為空行。
例如:要查詢學員信息表中沒有填寫Email信息的學員,可以使用以下查詢語句。
SELECT SName FROM Students WHERE SEmail IS NULL
5.在查詢中使用常量列
有的時候,一些常量的缺省信息需要添加到查詢輸出中,以方便統計或計算。
例如:查詢學員信息的時候,學校名稱統一都是“河北新龍”,查詢輸出的語句為。
SELECT 姓名=SName,地址=SAddress,'河北新龍' AS 學校名稱 FROM Students
6.查詢返回限制的行數
例如:在測試的時候,如果數據庫中有上萬條記錄,而只要檢查前面十行數據是否有效。
SELECT TOP 10 SName,SAddress FROM Students WHERE SSex = 0 查詢排序
如果需要按照一定的順序排列查詢語句選中的行,需要使用ORDER BY子句,並且排序可以是升序(ASC)或者降序(DESC)。如果不指定ASC或者DESC,缺省記錄集按ASC升序排序。上面講述的SQL語句都可以在其後面加上ORDER BY來進行排序。
例如:查詢學員成績的時候,如果把所有成績都降低10%後加5分,再按照及格成績的高低來進行排列。
SELECT StudentID AS 學員編號,(Score*0.9+5)AS 綜合成績 FROM Score WHERE (Score*0.9+5)>60 ORDER BY Score
還可以按照多個字段進行排序。
例如:要在學員成績的基礎上,再按照課程ID進行排序的語句如下。
SELECT StudentID AS 學員編號,Score AS 成績 FROM Score WHERE Score>60 ORDER BY Score,CourseID
特殊排序
在數據庫表中有以下字符數據,如:
13-1、13-10、13-100、13-108、14-3、14-1、13-18
現在希望通過SQL語句進行排序,並且首先要按照前半部分的數字進行排序,然後再按照後半部分的數字進行排序,輸出要排成這樣:13-1、13-10、13-18、13-100、13-108、14-1、14-3
數據庫表名:SellRecord;字段名:ListNumber
分析:
這是查詢語句,需要使用SELECT語句,需要用到ORDER BY進行排序,並重新計算出排序的數字來。
前半部分的數字,可以從先找到“-”符號的位置,然後取其左半部分,最後再使用Convert函數將其轉換為數字。
Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1))
後半部分的數字,可以先找到“-”符號的位置,然後把從第一個位置到該位置的全部字符替換為空格,最後再使用Convert函數將其轉換為數字。
Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))
完整的T-SQL語句是:
SELECT ListNumber
FROM SellRecord
ORDER BY Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))
使用LIKE進行模糊查詢
LIKE運算符用於匹配字符串或字符串的一部分(稱為子串),由於該運算符只用於字符串,所以僅與Char或Varchar數據類型聯合使用。
在數據更新、刪除或者查詢的時候,依然可以使用LIKE關鍵字來進行匹配查找,例如:
SELECT * FROM Students WHERE SName LIKE '張%'
使用BETWEEN在某個范圍內進行查詢
使用關鍵字BETWEEN可以查找那些介於兩個已知值之間的一組未知值。要實現這種查找必須知道開始查找的初值和終值,這個最大值和最小值用單詞AND分開,例如:
SELECT * FROM SCore WHERE Score BETWEEN 60 AND 80
此外,BETWEEN查詢日期范圍的時候使用得比較多,例如:查詢不在1992年8月1號到1993年8月1號之間訂購的讀書列表。
SELECT * FROM Sales WHERE ord_date NOT BETWEEN '1992-8-1' AND '1993-8-1'
提示:使用NOT來對限制條件“取反”操作
使用IN在列舉值內進行查詢
查詢的值是指定的某些值之一,可以使用帶列舉值的IN關鍵字來進行查詢。
例如:列舉值放在圓括號裡,用逗號分開。
SELECT SName AS 學員姓名 FROM Students WHERE SAddress IN ('北京','廣州','上海') ORDER BY SAddress SQL Server中的聚合函數
在查詢中還會經常碰到的要求是取某些列的最大值、最小值、平均值等信息,有時候還需要計算出究竟查詢到多少行數據項。這個時候就可以使用聚合函數了,聚合函數能夠基於列進行計算,並返回單個值。
SQL Server提供了以下幾個聚合函數:
1.SUM
SUM返回表達式中所有數值的總和,它只能用於數字類型的列。
例如:在Pubs數據庫中,要得到商務付款的總數,執行以下查詢語句。
SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'
注意:這種查詢只返回一個數值,因此,不能夠直接與可能