SQL學習(3) 查詢 SELECT

數據查詢操作:SELECT

查詢是數據庫中的核心部分,對數據庫中的數據的使用必定離不開數據庫的操作,該語句的功能豐富,使用也是比較方便的。

查詢包括:無條件查詢,有條件查詢,分組查詢,排序查詢,多關係連接查詢,嵌套查詢,含有子查詢的數據更新

無條件查詢:

語句基本格式:

SELECT [DISTINCT/ALL]<目標列表達式AS【別名】清單>
FROM<關係名>

默認情況是all

1)查詢關係中的所有信息:

SELECT *
FROM STUDENT;

SELECT NAME,AGE,SEX
FROM STUDENT;

2)指定查詢的列:

SELECT NAME
FROM STUDENT;


3)去除重複行數據:

SELECT DISTINCT HEIGHT
FROM STUDENT;


4)查詢經過計算的列:

當對查詢出的結果進行一個計算的時候,基本語法格式是

SELECT <目標列表達式>AS[別名]
FROM STUDENT;

這裏的目標表達式可以是屬性名,計算表達式,常量,還可以是集函數,不同的RDBMS有不同的集函數,但是都有以下幾種:

COUNT(ALL/DISTINCT*)統計結果中原組的個數
COUNT(DISTINCT/ALL<列名>)統計結果中國列的個數
MAX(<列名>)計算列中的最大值
MIN(<列名>)計算列中的最小值
SUM([DISTINCT/ALL]<>)計算列中數值的總和
AVG([DISTINCT/ALL]<>)計算列中數值的平均數

代碼實例:

計算學生平均年齡和學生年齡的總和

SELECT AVG(AGE)AS AVGAGE
FROM STUDENT;

SELECT SUM(AGE)AS SUMAGE
FROM STUDENT;

帶條件的單關係查詢

語句的基本格式

SELECT <[DISTINCT/ALL]<目標表達式>AS[別名]>
FROM<關係/列名>
WHERE<條件>
WHERE <查詢表達式>中不能用集函數作爲條件表達式根據查詢條件的不同又可以將單表條件查詢分爲以下幾種:

1.使用比較運算符:

比較操作符有:> ,<, =, >=,<=,<>最後一個代表的是不等於,代碼實例:

SELECT NAME
FROM STUDENT
WHERE AGE >20;
找到年齡大於20歲的學生姓名

2.使用特殊運算符號

特殊運算符號:

IN ,NOT IN  檢測屬性值是否屬於集合之一

BETWEEN ....AND...,NOT BETWEEN...AND..檢測屬性值是否在兩個值之間

IS NULL ,IS NOT NULL  檢測屬性值是否爲空

LIKE ,NOT LIKE 字符串匹配

代碼實例

SELECT NAME 
FROM STUDENT
WHERE AGE BETWEEN 20 AND 23;查詢年齡在20和23之間的學生姓名

SELECT NAME 
FROM STUDENT
WHERE AGE IN (18,22);查詢年齡爲18或者22的學生姓名

SELECT NAME
FROM STUDENT
WHERE NAME LIKE '李%';查詢姓李的學生
對於字符串的匹配問題,有兩個符號一個是%一個是_%表示多個字符,而_表示只有一個字符,通過這兩個特殊符號和所要匹配的字符串之間的順序搭配就可以很好的找到符合條件的語句。

3)多條件單關係查詢

基本語法表達形式

WHERE <條件1>AND|OR|NOT<條件2>
當我們在查詢的時候需要多個條件,這個時候我們就需要通過AND,OR,NOT,這三個連接詞進行連接。

代碼實例:

SELECT NAME 
FROM STUDENT
WHERE AGE<20 AND SEX = 'MAN';
分組查詢

分組查詢就是將SELECT 語句和GROUP BY語句進行了一彙總

語句基本格式

SELECT [DISTINCT/ALL]<[別名]>
FROM <關係名/列名>
WHERE<查詢條件表達式><p style="font-size:18px;">GROUP BY <列名></p>HAVING <條件表達式>;

代碼實例:我們從Student中選擇年齡大於20歲的學生然後按着男生女生進行平均分組

SELECT SEX,AVG(HEIGHT)AS AVGHEIGHT
FROM STUDENT
WHERE AGE >20
GROUP BY SEX;

排序查詢

排序查詢就是在查詢的後面添加上了升序或者降序的排序,升序DESC降序ASC,默認是降序排列;

代碼實例

SELECT NAME, CNUM,AGE 
FROM STUDENT
WHERE SEX = 'MAN'
GROUP BY CNUM DESC,ASE;

從學生表中選擇出來男同學,先按班級號進行排序,然後按着年齡進行排序,這裏的一個疑問就是select語句後面如果沒有標明的,在後面的過程中能否將其作爲一個分組條件來使用呢,比如這裏的ASE ,

多關係連接查詢

多關係連接查詢就是要用到的表不止一個了,它是將融合各個表進行查詢操作,連接類型分爲以下幾種,交叉連接,內部連接,外部連接,自身連接

1)交叉連接

基本語法格式

SELECT [DISTINCT/ALL]<列屬性清單>
FROM <關係名清單>

SELECT S.NAME, S.SNO,C.SNO.,C.CNUM
FROM STUDENT S,CLASS C;
通過這個我們可以將學生表和班級表進行了一個連接,但是這種連接在現實中是沒有多大意義的。

2)內連接

基本語法格式

SELECT [DISTINCT/ALL]<目標列表達式>
FROM <關係名> INNER JOIN <關係名>
ON<連接條件表達式>

SELECT [DISTINCT/ALL]<目標列表達式>
FROM <關係名>
WHERE<連接條件表達式>
代碼實例,將上面的交叉連接做了一個區分,通過這個可以挑選出在class表中的學號和Student表中一樣的數據,而不是全部的數據,又有一個疑問就是上面的叉連接的時候,兩張表中的數據是怎麼進行排列,是將前一個表的每一條記錄對應後一張表的所有記錄。現在我們通過對其學號的判斷,這樣使之與之前的表所對應的就是滿足學號相同的條件的時候纔可以。
SELECT S.NAME, S.SNO,C.SNO.,C.CNUM
FROM STUDENT S,CLASS C;
WHERE S.SNO = C.SNO;

3)外連接

外連接又分爲做外連接和右外連接,還有全外連接,左外連接就是在右表中將左表中不匹配的數據用null值來進行替代。

代碼實例:

SELECT S.NAME,S.SNO,C.SNO,C.CNUM
FROM STUDENT S,CLASS C;
WHERE S.SNO* = C.SNO;

SELECT S.NAME ,S.SNO,C.SNO,C.NUM
FROM CLASS C LEFT JOIN STUDENT S
ON C.SNO = S.SNO;

在學生表中將班級表中沒有匹配的學生學號在學生表中用null值來進行替代。

4)自身連接

當我們自身的一個屬性和自身的一個屬性之間存在關係,我們需要的就是將自身做成兩個表,然後把它當做一個內連接就好了,類似情況出現在所有員工的信息表中,員工存在着被管理的屬性,被管理的屬性記錄的是管理者的ID,同時管理者又有自己的ID,所以說將兩個表連接起來就是需要我們將信息表延伸成爲兩張表,然後將其進行內連接,就可以找到管理所屬者了。

代碼實例:

SELECT EMP1.ENO,EMP1.NAME,EMP2.EMGR,EMP2.NAME
FROM EMPLOYEE EMP1,EMPLOYEE EMP2
WHERE EMP1.ENO = EMP2.EMGR;

通過這個,我們就會找到每一個人直接被管理人的信息。

嵌套查詢

嵌套查詢在這又分爲了四類

1)使用in嵌套查詢

2)使用比較運算符的查詢

3)使用between的嵌套查詢

4)相關子查詢

前三種嵌套查詢都是子查詢和父查詢沒有任何關係,沒有任何關聯,子查詢的結果作爲父查詢的結果,但是第四種其父查詢和子查詢之間是存在關聯的,下面通過代碼實例來展示着三種嵌套查詢方式:

IN嵌套查詢

SELECT NAME
FROM STUDENT
WHERE SNO IN (
SELECT SNO 
FROM CLASS
WHERE CNAME = '1'
);
選出Student表中一班的學生,同時可以通過NOT IN 來選擇不是一班的學生

使用比較運算符查詢

SELECT NAME 
FROM STUDENT
WHERE AGE>
(SELECT AVG(AGE)
FROM STUDENT);
選出年齡大於所有學生平均年齡的學生

使用BETWEEN嵌套查詢

SELECT NAME 
FROM STUDENT
WHERE AGE BETWEEN
(SELECT AVG(AGE)
FROM STUDENT) AND 25;
選擇年齡大於平均年齡小於25歲的學生

相關子查詢

SELECT NAME 
FROM STUDENT S1
WHERE AGE BETWEEN
(SELECT AVG(AGE)
FROM STUDENT S2
WHERE S1.CNUM = S2.CNUM)
 AND 25;
  
這個我們選擇的是年齡在本班級的平均年齡和25歲之間的學生,之前選擇的是全部學生的,所以第二次的這個在進行查詢的時候就需要用到父查詢的信息。

多個SELECT語句的集合操作

SELECT操作查詢語句得到的是一個集合,所以可以進行集合的一些操作,例如交操作,並操作,和差操作

在對select集合進行集合運算的時候,前提條件是結果集必須具有相同的列數和數據類型,同時集合的運算會在缺省的條件下自動消重。

含有子查詢的數據更新

與之前對數據的操作,這裏多的是將以前的條件語句中加入了查詢的語句,通過這個查詢語句,來完成對於數據的操作。對於插入操作,通過select可以實現同時插入多行數據。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章