程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL語句簡單語法

SQL語句簡單語法

編輯:關於SqlServer

       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'

      注意:這種查詢只返回一個數值,因此,不能夠直接與可能返回多行的列一起使用來進行查詢。

      2.AVG

      AVG函數返回表達式中所有數值的平均值,也只能用於數字類型的列。

      例如:要查詢及格線以上的學員的平均成績。

      SELECT AVG(SCore) AS 平均成績 FROM Score WHERE Score >=60

      3.MAX和MIN

      MAX返回表達式中的最大值,MIN返回表達式的最小值,它們都可以用於數字型、字符型以及日期/時間類型的列。

      例如:查詢平均成績、最高分、最低分的語句如下。

      SELECT AVG(SCore) AS 平均成績,MAX(Score) AS 最高分,MIN(Score) AS 最低分 FROM Score WHERE Score >=60

      4.COUNT

      COUNT返回提供的表達式中非空值的計數,COUNT可以用於數字和字符類型的列。

      例如:查詢及格人數的語句如下。

      SELECT COUNT(*) AS 及格人數 FROM Score WHERE Score >= 60 分組查詢

      使用Group By進行分組查詢

      成績表中存儲了所有課程的成績,在這種情況下,可能就需要統計不同課程的平均成績。也就是說,需要對不同的成績首先按照課程來進行分組,分組以後再進行聚合計算,得到累計信息。

      采用分組查詢實現的SQL語句如下:

      SELECT CourseID, AVG(Score) AS 課程平均成績 FROM Score GROUP BY CourseID

      使用HAVING子句進行分組篩選

      如果查詢內部測試的成績,只顯示“補考過的學員”的成績怎麼處理呢?這個時候,牽涉到分組統計後的條件限制。限制條件為COUNT(Score)>1,也就是相同的學員編號列和內部測試成績列,至少出現過兩次。這時候使用WHERE子句是不能滿足查詢要求的,必須使用HAVING子句。例如:

      SELECT StudentID AS 學員編號,CourseID AS 內部測試,AVG(Score) AS 內部測試平均成績 FROM Score GROUP BY StudentID,CourseID

      HAVING COUNT(Score)>1 多表聯接查詢

      多表聯接查詢實際上是通過各個表之間共同列的關聯性來查詢數據,它是關系數據庫查詢最主要的特征,聯接可分為內聯接、外聯接及交叉聯接等類型。

      內聯接查詢可以通過兩種方式實現

      1.在WHERE子句中指定聯接條件

      SELECT Students.SName,Score.CourseID,Score.Score FROM Students,Score WHERE Students.SCode = Score.StudentID

      上面這種形式的查詢,相當於FROM後面緊跟了兩個表名,然後在字段列表中用“表名.列名”來區分列,再在WHERE條件子句中加判斷,要求學員編號信息相等。

      2.在FROM子句中使用JOIN...ON

      上面的查詢也可以通過以下的JOIN...ON子句來實現。

      SELECT S.SName,C.CourseID,C.Score FROM Students AS S INNER JOIN Score AS C ON (S.SCode = C.StudentID)

      外聯接查詢

      與內部聯接相對的方式稱為外部聯接,外部聯接又分為左外部聯接和右外部聯接。

      1.左外聯接查詢

      例如:要統計所有學員的考試情況,要求顯示所有參加考試學員的每次考試分數,沒有參加考試的學員也要顯示出來。這時候,是以學員信息表為主表、學員成績表為從表的左外聯接查詢。

      SELECT S.SName,C.CourseID,C.Score FROM Students AS S LEFT OUTER JOIN Score AS C ON S.SCode = C.StudentID

      2.右外聯接查詢

      右外聯接查詢與左外聯接查詢類似,中不過要包含右表中所有匹配的行。

      SELECT Titles.Title_id,Titles.Title,Publishers.Pub_name FROM titles RIGHT OUTER JOIN Publishers ON Titles.Pub_id = Publishers.Pub_id

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved