SQL Server從入門到精通(四)

今天阿豬帶領大家正式進入第四步的學習
往期精選
SQL Server從入門到精通(一)
SQL Server從入門到精通(二)
SQL Server從入門到精通(二)精講
SQL Server從入門到精通(三)
目錄
查詢處理和表數據編輯
一、查詢數據
  1.簡單查詢
  2.統計
  3.連接查詢
  4.子查詢
  5.聯合查詢
二、表數據編輯
  1.插入數據
  2.修改數據
  3.刪除數據

查詢處理和表數據編輯

一、查詢數據

1.簡單查詢

語法

    SELECT 目標表達式 
    FROM 表名

(1)查詢指定列

      SELECT  姓名
      FROM 項目表

(2)查詢所有列
注意:用*表示所有列,把表中所有列按照表中的順序全部輸出

      SELECT *
      FROM 項目表

(3)查詢計算列
可以將查詢出來的屬性經過一定計算後列出結果

      SELECT 姓名,累計學分,累計學分-累計學分*0.1
      FROM 學生表

(4)爲列起別名
    1.用AS關鍵字
    2.用=來連接

       SELECT   姓名 AS name,累計學分 AS Ogpa,Ngpa=累計學分-累計學分*0.1
       FROM 學生表

注意:當列的別名有空格時要用單引號括起來

       SELECT  姓名 AS '學生表  NAME'
       FROM 學生表

(5)使用DISTINCT關鍵字消除重複元組

       SELECT DISTINCT 所在院系,專業
       FROM 學生表

注意:這樣就刪除重複的
DISTINCT關鍵字的作用範圍他是整個查詢列表

2.查詢滿足條件的元組
用WHERE查詢
查詢條件返回TRUE(真),FALSE(假),UNKNOWN(未知)
NOT ,AND,OR三表邏輯運算

NOT 結果
T F
F T
U U
AND T F U
T T F U
F F F F
U U F U
OR T F U
T T T T
F T F U
U T U U

常見查詢條件

查詢條件 運算符(0) 條件(邏輯表達式)格式 備註
比較大小 =,>,<,>=,<=,!=,,!>,!< op1op 2 雙目運算
確定範圍 [NOT] BETWEEN AND 0p1 [NOT] BETWEEN op2 AND op 3 三目運算
確定集合 [NOT]IN op 1[NOT] IN op 2 雙目運算
字符串匹配 [NOT] LIKE op 1[NOT] LIKE op 2 雙目運算
空值 IS[NOT] NULL op IS[NOT]NULL 單目運算
多重條件 NOT, AND, OR, () NO op, op1 AND op 2, opi1OR op 2 NOT是單目運算, 其餘是雙目運算,括號用於改變運算優先級

比較大小
(1)查詢所有來自杭州的學生

  SELECT *
  FROM 學生表
  WHERE 籍貫='杭州'

(2)查詢累計學分在160以下的學生姓名和累計學分

    SELECT 姓名,累計學分
    FROM 學生表
    WHERE 累計學分<160

確定範圍
定義

   op1 [NOT] BETWEEN op2 AND op3

含義:若op1不在op2和op3之間則條件爲真否則爲假
查詢累計學分在150和159之間的學生姓名和累計學分

   SELECT 學號,姓名
   FROM 學生表
   WHERE 累計學分  BETWEEN 150 AND 159

確定集合
語法 IN
查詢(不是 )來自杭州,大同,太原的學生學號和姓名

SELECT 學號,姓名
FROM 學生表
WHERE 籍貫 (NOT) IN (‘杭州’,‘大同’,‘太原’)

查詢學號後兩位是09,或者等於學號前兩位或者中間兩位得學生學號和姓名

SELECT 學號,姓名
FROM 學生表
WHERE SUMBSTRING (學號,6,2)IN (‘09’,SUMBSTRING(學號,2,2),SUMBSTRING(學號,4,2))

注意:SUMBSTRING(s,p,c)的含義是返回字符串s中從第p個字符串開始,長度爲c的子串
字符串匹配
語法LIKE
特殊字符:

% 匹配任意長度的字符串(長度可以爲0)
_ 匹配任意一個字符
[c1c2…cn] 匹配字符c1,c2…cn,中的一個。當c1,c2,… cn,連續時可簡化爲[c1-cn]
[ ^ c1c2….cn ] 匹配除c1,c2…cn,外的一個字符。當c1,c2,…cn,連續時可簡化爲[ ^ c1-cn]

例題
查詢姓名中第二個字爲“鵬”的學生學號和姓名

 SELECT 學號,姓名
 FROM 學生表
 WHERE 姓名LIKE ‘_鵬%’

查詢學號長度不等於7,或者學號後六位含有非數字字符的學生學號和姓名

  SELECT 學號,姓名
  FROM 學生表
  WHERE 學號NOT LINK'S[0-9][0-9][0-9][0-9][0-9][0-9]'

查詢學號最後一位既不是1也不是3也不是9的學生學號和姓名

  SELECT 學號,姓名
  FROM 學生表
  WHERE 學號 LINK '%[^139]'

要查詢課程名以“DB_”開頭的課程信息注意其中的_只是普通的,此刻要用ESCAPE

select*
from 課程表
where課名 LINK'DB\_%' ESCAPE '\'

ESCAPE ''短語表示‘'爲換碼字符,這樣模式串中緊跟在‘\’後面的字符‘’不在具有通配符的含義,而被轉義成普通的‘’字符

涉及空值的查詢
語法IS NOT NULL

查詢有成績的學號和開課號

 SELECT 學號,開課號
 FROM 選課表
 WHERE  成績 IS NOT NULL

注意:IS 不能用=代替,IS NOT 不能用!=和<>代替

多重條件查詢
OR AND NOT優先級從大到小OR AND NOT
查詢這樣的男生,他的電話號碼前三位是‘130’他來自杭州或寧碧他既不主修電子商務,也不主修信息管理專業

    SELECT*
    FROM 學生表
    WHERE 性別=‘男’AND SUBSTRING(移動電話,1,3)=‘130’AND(籍貫=‘杭州’ OR 籍貫=‘寧波’)AND NOT 專業 IN (‘電子商務’,‘信息管理’)

3.對查詢結果排序
語法:OEDER BY

    SELECT 學號
    FROM 選課表
    WHERE 開課號=‘000100’
    ORDER BY 成績 DESE,成績+10

查詢選修了開課編號爲‘000100’的課程的學生學號、成績,以及成績+10分後的新成績,查詢結果按原來成績降序,按新成績升序
注意:DESE爲降序,不寫莫仍爲升序

2.統計

1.常用的統計函數

函數格式 函數功能
COUNT([DISTINCT]*) 統計元組個數
COUNT([DISTINCT]<列表達式>) 統計列值個數
SUM 計算數值型列表達式的總和
AVG 計算數值型列表達式的平均值
MAX 求列表達式的最大值
MIN 求列表達式的最小值

查詢所有課本的總價格和平均價格,以及打七折後的總價格和平均價格

SELECT SUM(定價) AS 原總價,AVG(定價),SUM(定價*0.7)折扣總價,折扣均價=AVG(定價*0.7)
FROM (課程表)

COUNT(*)用來統計滿足條件的元組個數
查詢課程編號前兩位數字是“02”的課程總數

SELECT COUNT (*)
FROM 課程表
WHERE 課號 LINK 'C02%'

2.分組查詢
(1)GROUP BY子句進行分組

 SELECT 開課號,COUNT (學號)
 FROM 選課表
 GROUP BY 開課號

具有相同開課號的元組被分爲一組
(2)HAVING短語來帥選

3.連接查詢

在列名前+<.表名>作爲限定
查詢學生表的基本信息及選課信息

 SELECT 學生表.*,開課號,成績
 FROM 學生表 AS A,選課表AS B
 WHERE 學生表.學號=選課表.學號

使用JOIN ON 關鍵字
JOIN 用於連接兩張表,ON給出兩張表的連接條件
查詢至少選修了學號爲‘S060110’的學生所選一門課程的學生學號和姓名

  SELECT DISTINCT Z.學號, 姓名
  FROM  選課表 X  JOIN  選課表 Y  ON  Y.學號!=X.學號  AND  Y.開課號=x.開課號  
      JOIN  學生表Z  ON  Y.學號=Z.學號
  WHEREx.學號='S060110'

外連接
左外連接:將左邊關係中未用到的列加到結果集把=改爲"*=”,或者JOIN 改爲LEFT OUTER JOIN
右外連接:將右邊關係中未用到的列加到結果集把=改爲"=*”,或者JOIN 改爲RIGHT OUTER JOIN
全外連接:將左右關係全部連接,將JOIN改爲FULL OUTER JOIN

查詢學生的學號、姓名、籍貫信息及選課信息
(1)左外連接

SELECT學生表.學號, 姓名,籍貫,開課號,成績
FROM學生表, 選課表
WHERE 學生表.學號*=選課表.學號

(2)右外連接

  SELECT學生表.學號, 姓名, 籍貫, 開課號, 成績
  FROM  學生表  RIGHT OUTER JOIN  選課表  ON  學生表.學號=選課表.學號

(3)全外連接

SELECT 學生表.學號, 姓名, 籍貫, 開課號, 成績
FROM 學生表 FULL  OUTER  JOIN  選課表  ON  學生表.學號=選課表.學號

4.子查詢

嵌套SELECT語句叫子查詢,一個 SELECT 語句的查詢結果能夠作爲另一個語句的輸入值。
子查詢不但能夠出現在Where子句中,也能夠出現在from子句中,作爲一個臨時表使用,也能夠出現在select list中,作爲一個字段值來返回。

1、單行子查詢 :單行子查詢是指子查詢的返回結果只有一行數據。當主查詢語句的條件語句中引用子查詢結果時可用單行比較符號(=, >, <, >=, <=, <>)來進行比較。

例:

 select ename,deptno,sal 
 from emp 
 where deptno=(select deptno from dept where loc='NEW YORK'); 

2、多行子查詢:多行子查詢即是子查詢的返回結果是多行數據。當主查詢語句的條件語句中引用子查詢結果時必須用多行比較符號(IN,ALL,ANY)來進行比較。
IN的含義是匹配子查詢結果中的任一個值即可(“IN” 操作符,能夠測試某個值是否在一個列表中),ALL則必須要符合子查詢的所有值纔可,ANY要符合子查詢結果的任何一個值即可

注意ALL 和ANY 操作符不能單獨使用,而只能與單行比較符(=、>、< 、>= 、<= 、<>)結合使用。

例:1、單行子查詢

select ename,deptno,sal
from emp
where deptno=(select deptno
                                  from dept 
                                  where loc='NEW YORK');

2、多行子查詢

SELECT ename,job,sal
FROM EMP
WHERE deptno in ( SELECT deptno
                                                FROM dept 
                                                WHERE dname LIKE 'A%');

3、多列子查詢

 SELECT deptno,ename,job,sal
 FROM EMP
 WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);

5.聯合查詢

UNION將多個查詢結果合併起來,個結果表的列數相同
查詢計算機專業和信息管理專業的學生信息。

  SELECT*
  FROM 學生表
  WHERE 專業='計算機'
   UNION
   SELECT
   FROM  學生表
   WHERE 專業='信息管理'

二、表數據編輯

插入數據
1.插入單個元組
2.插入子查詢結果
3.使用SELECT …INTO語句進行數據插入
修改數據
語法

UPDATE <表名>
SET<列名>=<表達式>[,....n]

UPDATE語句用來修改指定表中滿足WHERE條件的元組,用SET子句中的值取代響應的值

修改表中所有行
將學生的累計學分增加3分

 UPDATE 學生表
 SET 累計學分=累計學分+3

修改某些行
將計算機專業所有女上的籍貫改爲“杭州”,累計學分+3

 UPDATE 學生表
 SET 累計學分=累計學分+3,籍貫='杭州'
 WHERE 專業='計算機'AND 性別=‘女;’

刪除數據
語法

  DELETE [FROM] <目標表名>
  [FROM <表名>[,...n]]
  [WHERE <條件>]

DELETE用來刪除滿足WHERE條件的元組

從學生表中刪除計算機專業所有女生信息

  DELETE FROM 學生表
  WHERE 專業=‘計算機’AND性別=‘女’ 

將學生表清空

    DELECT FROM 學生表
    TRUNCATE TABLE <目標表名>
 比較快不記錄日誌的操作,刪除的數據無法恢復
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章