日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库SQL语言从入门到精通--Part 6--单表查询(快来PICK)

發布時間:2023/12/15 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库SQL语言从入门到精通--Part 6--单表查询(快来PICK) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫從入門到精通合集(超詳細,學習數據庫必看)

查詢操作是SQL語言中很重要的操作,我們今天就來詳細的學習一下。

一、數據查詢的語句格式

SELECT [ALL|DISTINCT] <目標列表達式>[<目標列表達式> ....] --可以選擇多個列 FROM <表名或視圖名>[<表名或視圖名> ....]--可以選擇多個表或視圖 [ WHERE <條件表達式> ] --查詢什么條件的數據 [ GROUP BY <列名1> [ HAVING <條件表達式> ] ] --按什么條件分組 [ ORDER BY <列名2> [ ASC|DESC ] ]--按什么條件排序
  • SELECT子句:指定要顯示的屬性列
  • FROM子句:指定查詢對象(基本表或視圖)
  • WHERE子句:指定查詢條件
  • GROUP BY子句:
    細化聚集函數的作用對象
    • 未對查詢結果分組,聚集函數將作用于整個查詢結果
    • 對查詢結果分組后,聚集函數將分別作用于每個組
    • 作用對象是查詢的中間結果表
    • 按指定的一列或多列值分組,值相等的為一組

合計函數 (比如 SUM) 常常需要添加 GROUP BY 語句。

例子:
BILL表

CustomerQuantityDate
張三102020-3-19
李四292020-3-19
王五92020-3-19
張三212020-3-19
王五192020-3-20

執行SELECT Customer ,SUM(Quantity) FROM BILL GROUP BY Customer
我們會得到如下表

CustomerQuantity
張三31
李四29
王五28

如果我們不加GROUP BY 會得到這樣一個表

CustomerQuantity
張三88
李四88
王五88
張三88
王五88

當然GROUP BY也可以按多個列分組,即兩個都想同時才會被分到一個組
還是對BILL表操作 SELECT Customer ,SUM(Quantity) FROM BILL GROUP BY Customer,Date
我們會得到如下表

CustomerQuantity
張三31
李四29
王五9
王五19
  • HAVING短語:
    篩選出只有滿足指定條件的組
    例子:
    BILL表

    CustomerQuantityDate
    張三102020-3-19
    李四292020-3-19
    王五92020-3-19
    張三212020-3-19
    王五192020-3-20

    我們查詢購買總量小于30的Customer

    SELECT Customer,SUM(Quantity) From BILL GROUP BY Customer HAVING SUM(Quantity)>30

    我們會得到如下:

    CustomerQuantity
    張三31
  • ORDER BY子句:對查詢結果表按指定列值的升序或降序排序
    還是對BILL表操作

    CustomerQuantityDate
    張三102020-3-19
    李四292020-3-19
    王五92020-3-19
    張三212020-3-19
    王五192020-3-20

    我們想按照購買總數量排列查詢結果

    SELECT Customer ,SUM(Quantity) FROM BILL GROUP BY Customer ORDER BY SUM(Quantity) ASC

    我們會得到如下表

    CustomerQuantity
    王五28
    李四29
    張三31

ORDER BY子句

  • 可以按一個或多個屬性列排序
  • 升序:ASC;降序:DESC;缺省值為升序
  • 當排序列含空值時
  • ASC:排序列為空值的元組最后顯示
  • DESC:排序列為空值的元組最先顯示

二、單表查詢

剛才在介紹那幾個保留字的時候,我們簡單的舉了幾個查詢的例子,現在我們詳細系統的介紹一下,有點重復,但是比較基礎,加深印象。

1.選擇表中的若干列查詢

選擇某幾列查詢:

SELECT <1>,<2>...... FROM <數據表>;

選擇全部列查詢:
當然我們可以,把所有的列一一列舉,我們也可以使用SELECT *

SELECT * FROM <數據表>

舉例:
還是BILL表

CustomerQuantityDate
張三102020-3-19
李四292020-3-19
王五92020-3-19
張三212020-3-19
王五192020-3-20
SELECT Customer From BILL

得到如下表

Customer
張三
李四
王五
張三
王五

執行:

SELECT Customer ,Quantity,Date FROM BILL --或者 SELECT * FROM BILL

得到如下結果

CustomerQuantityDate
張三102020-3-19
李四292020-3-19
王五92020-3-19
張三212020-3-19
王五192020-3-20
2.查詢經過計算的值

之前我們給出了SELECT標準格式:

SELECT [ALL|DISTINCT] <目標列表達式>[<目標列表達式> ....] --可以選擇多個列 FROM <表名或視圖名>[<表名或視圖名> ....]--可以選擇多個表或視圖 [ WHERE <條件表達式> ] --查詢什么條件的數據 [ GROUP BY <列名1> [ HAVING <條件表達式> ] ] --按什么條件分組 [ ORDER BY <列名2> [ ASC|DESC ] ]--按什么條件排序

其中目標表達式可以為:

  • 算術表達式
  • 字符串常量
  • 函數
  • 列別名

例子:
Students表

NameBirth
李勇1999
劉晨1997
王敏1996
張立1998

我們查詢每個人的年齡:

SELECT NAME,2020-Birth FROM Student;

得道如下的查詢結果:

Name2020-Birth
李勇21
劉晨23
王敏24
張立22

在查詢中添加新的字符串列
例子

NameBirth
李勇1999
劉晨1997
王敏1996
張立1998
SELECT Name,'Birth is:',Birth FROM Students ;

結果:

Name‘Birth is:’Birth
李勇Birth is:1999
劉晨Birth is:1997
王敏Birth is:1996
張立Birth is:1998

查詢中顯示列別名
例子
Students表

NameBirth
李勇1999
劉晨1997
王敏1996
張立1998
SELECT Name 姓名, Birth 生日 FROM Students ;

結果

姓名生日
李勇1999
劉晨1997
王敏1996
張立1998
3.選擇表中的若干元組(行)

元組(tuple)是關系數據庫中的基本概念,關系是一張表,表中的每行(即數據庫中的每條記錄)就是一個元組,每列就是一個屬性。 在二維表里,元組也稱為行。

DISTINCT 語句:
指定DISTINCT關鍵詞,去掉表中重復的行
例子:
BILL表

CustomerQuantityDate
張三102020-3-19
李四292020-3-19
王五92020-3-19
張三212020-3-19
王五192020-3-20

我們執行以下語句查看區別:

SELECT DISTINCT Customer FROM BILL Customer
張三
李四
王五

如果不加DISTINCT,結果如下:

Customer
張三
李四
王五
張三
王五

作用顯而易見

查詢滿足條件的元組:

常用的查詢條件謂詞
比 較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符
確定范圍BETWEEN AND,NOT BETWEEN AND
確定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空 值IS NULL,IS NOT NULL
多重條件(邏輯運算)AND,OR,NOT

這次我們多舉幾個例子:
Student表

SnameSageSdeptSgradeSsex
張三18C.S801
李四18C.S720
王五17I.C.S630
韓六18C.S981
周七19I.C.S340
趙八20C.S601

以下所有查詢的基本表都默認為Student表

例一: 查詢計算機科學系全體學生的名單

SELECT SnameFROM StudentWHERE Sdept='C.S.'

結果:

Sname
張三
李四
韓六
趙八

例二: 查詢所有年齡在18歲以上的學生姓名及其年齡。

SELECT Sname,Sage FROM Student WHERE Sage>18

結果

SnameSage
周七19
趙八20

BETWEEN…AND…語句
例三: 查詢年齡在18~20歲(包括18歲和20歲)之間的學生的姓名、系別和年齡

SELECT Sname,Sage,Sdept FROM Student WHERE Sage BETWEEN 18 AND 20

結果

SnameSageSdept
張三18C.S
李四18C.S
韓六18C.S
周七19I.C.S
趙八20C.S

例四: 查詢年齡在18~20歲(包括18歲和20歲)之間的學生的姓名、系別和年齡

SELECT Sname,Sage,Sdept FROM Student WHERE Sage NOT BETWEEN 18 AND 20

結果

SnameSageSdept
王五17I.C.S

IN/NOT IN語句
例四: 查詢年齡為17 和 20歲的學生姓名,年齡及專業

SELECT Sname,Sage,Sdept FROM Student WHERE Sage IN (1720);

結果

SnameSageSdept
王五17I.C.S
趙八20C.S

例五: 查詢年齡不為17 和 20歲的學生姓名,年齡及專業

SELECT Sname,Sage,Sdept FROM Student WHERE Sage NOT IN (1720); SnameSageSdept
張三18C.S
李四18C.S
韓六18C.S
周七19I.C.S

字符串匹配:
語法格式:
謂詞:
[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <換碼字符>’]
<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
當匹配模板為固定字符串時,
可以用 = 運算符取代 LIKE 謂詞
用 != 或 < >運算符取代 NOT LIKE 謂詞

通配符:

通配符描述
%代表任意長度(長度可以為0)的字符串
_僅替代一個字符
[charlist]字符列中的任何單一字符
[^charlist]或者[!charlist]不在字符列中的任何單一字符

例:
a%b表示以a開頭,以b結尾的任意長度的字符串。如acb,addgb,ab 等都滿足該匹配串
a_b表示以a開頭,以b結尾的長度為3的任意字符串。如acb,afb等都滿足該匹配串
ESCAPE 短語:
當用戶要查詢的字符串本身就含有 % 或 _ 時,要使用ESCAPE ‘<換碼字符>’ 短語對通配符進行轉義。

類型1: 匹配串為固定字符串
查詢學號為200215121的學生的詳細情況。

SELECT * FROM Student WHERE Sno LIKE200215121';

等價于:

SELECT * FROM Student WHERE Sno = ' 200215121 '

類型2: 匹配串為含通配符的字符串

查詢所有姓劉學生的姓名、學號和性別。

SELECT Sname,Sno,SsexFROM StudentWHERE Sname LIKE ‘劉%’;

查詢姓"歐陽"且全名為三個漢字的學生的姓名。

SELECT SnameFROM StudentWHERE Sname LIKE '歐陽__'

查詢名字中第2個字為"陽"字的學生的姓名和學號。

SELECT Sname,SnoFROM StudentWHERE Sname LIKE ‘__陽%’;

查詢所有不姓劉的學生姓名。

SELECT Sname,Sno,SsexFROM StudentWHERE Sname NOT LIKE '劉%'

類型3: 使用換碼字符將通配符轉義為普通字符

查詢DB_Design課程的課程號和學分。

SELECT Cno,CcreditFROM CourseWHERE Cname LIKE 'DB\_Design' ESCAPE '\‘;

查詢以"DB_"開頭,且倒數第3個字符為 i的課程的詳細情況。

SELECT *FROM CourseWHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ‘;

ESCAPE ‘\’ 表示“ \” 為換碼字符
學過C++的大家都知道\n代表換行,\為轉義字符。這里是說,我們通過ESCAPE語句將\定義為換碼字符(可以理解為轉義字符)

類型4: 涉及空值的查詢

謂詞:IS NULL 或 IS NOT NULL 而且 “IS” 不能用 “=” 代替。
如果某些同學的信息不完整,比如在某個表中手機號未填寫,那這位同學的元組中的手機號這一屬性為NULL;
要想查出這類同學的姓名我們可以執行以下操作

Student表

SnameSageSdeptSgradeSsexSpho
張三18C.S80112345678
李四18C.S72012345679
王五17I.C.S63012345680
韓六18C.S981NULL
周七19I.C.S340234234234
趙八20C.S601NULL
SELECT Sname,Spho From Student WHERE Spho IS NULL; SnameSpho
韓六NULL
趙八NULL

類型5: 多重條件查詢
邏輯運算符:
AND:且 連接前后兩個條件都成立時表達式為真
OR:或 連接前后表達式有一個為真時表達式為真
AND優先級大于OR,可以加括號進行復合運算,進而改變優先級。

常用的查詢條件謂詞
比 較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運算符
確定范圍BETWEEN AND,NOT BETWEEN AND
確定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空 值IS NULL,IS NOT NULL
多重條件(邏輯運算)AND,OR,NOT

可以連接上面表中的所有運算符,只要保證最后得到表達可以分辨真假有意義即可。

這個比較簡單我們舉一個例子:
查詢18歲的學生且屬于計算機科學專業的姓名,年齡,專業

SnameSageSdeptSgradeSsexSpho
張三18C.S80112345678
李四18C.S72012345679
王五17I.C.S63012345680
韓六18C.S981NULL
周七19I.C.S340234234234
趙八20C.S601NULL
SELECT Sname,Sage,Sdept FROM Students WHERE Sage=18 AND Sdept='C.S.'; SnameSageSdept
張三18C.S
李四18C.S
韓六18C.S
4.聚集函數

計數
SQL COUNT(column_name) 語法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):

SELECT COUNT(column_name) FROM table_name

SQL COUNT(*) 語法
COUNT(*) 函數返回表中的記錄數:

SELECT COUNT(*) FROM table_name

SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:

SELECT COUNT(DISTINCT column_name) FROM table_name

例:
查詢學生總人數。

SELECT COUNT(*) FROM Student;

查詢選修了課程的學生人數。

SELECT COUNT(DISTINCT Sno)FROM SC

計算總和

SQL SUM() 語法

SELECT SUM(column_name) FROM table_name

開頭舉過例子,這里就不再重復贅述。

計算平均值

AVG 函數返回數值列的平均值。NULL 值不包括在計算中。

SQL AVG() 語法

SELECT AVG(column_name) FROM table_name


計算1號課程的學生平均成績。

SELECT AVG(Grade)FROM SCWHERE Cno=1 ’;

最大最小值

MAX() 函數和MIN()函數
MAX 函數返回一列中的最大值,MIN 函數返回一列中的最小值。NULL 值不包括在計算中。

SQL中的語法

SELECT MAX(column_name) FROM table_name SELECT MIN(column_name) FROM table_name

MIN 和 MAX 也可用于文本列,以獲得按字母順序排列的最高或最低值。
例:
查詢選修1號課程的學生最高分數。

SELECT MAX(Grade)FROM SCWHERE Cno=1 ’;


寫在最后:
我叫風骨散人,名字的意思是我多想可以不低頭的自由生活,可現實卻不是這樣。家境貧寒,總得向這個世界低頭,所以我一直在奮斗,想改變我的命運給親人好的生活,希望同樣被生活綁架的你可以通過自己的努力改變現狀,深知成年人的世界里沒有容易二字。目前是一名在校大學生,預計考研,熱愛編程,熱愛技術,喜歡分享,知識無界,希望我的分享可以幫到你!
如果有什么想看的,可以私信我,如果在能力范圍內,我會發布相應的博文!
謝謝大家的閱讀!😘

總結

以上是生活随笔為你收集整理的数据库SQL语言从入门到精通--Part 6--单表查询(快来PICK)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。