從0到1學(xué)會(huì)MySQL單表查詢
1.查詢表中若干列
例如:查詢?nèi)w學(xué)生的學(xué)號(hào)和姓名
select sno,sname from student;
(1)查詢?nèi)苛?/h3>
(例如:查詢?nèi)w學(xué)生的信息)
方法一:在select關(guān)鍵字后面列出所有列名
代碼如下????
select sno,sname,ssex,sage,sdept from student;
方法二:將<目標(biāo)列表表達(dá)式>指定為*
代碼如下????
select * from student;
(2)查詢經(jīng)過計(jì)算的值
select子句中的<目標(biāo)列表達(dá)式>不僅可以為表中的屬性列,也可以是表達(dá)式
例如:查詢?nèi)w學(xué)生的姓名及其出生年份
代碼如下????
select sname,2023-sage from student;
運(yùn)行結(jié)果????
(3)使用列別名改變查詢結(jié)果的列標(biāo)題(AS可以省略)
代碼如下????
SELECT Sname AS NAME,'Year of Birth:' AS BIRTH, 2014-Sage AS BIRTHDAY,LOWER(Sdept) AS DEPARTMENT FROM Student;
運(yùn)行結(jié)果????
2.查詢表中若干元組
(1)消除取值重復(fù)的行
如果沒有指定DISTINCT關(guān)鍵字,則缺省為ALL
例如:(查詢選修了課程的學(xué)生學(xué)號(hào))
未指定DISTINCT關(guān)鍵字
代碼如下????
SELECT sno FROM sc; /* SELECT ALL sno FROM sc; */
運(yùn)行結(jié)果????
指定DISTINCT關(guān)鍵字
代碼如下????
SELECT DISTINCT sno FROM sc;
運(yùn)行結(jié)果????
(2)比較大小
例如:查詢計(jì)算機(jī)科學(xué)系全體學(xué)生的名單
代碼如下????
SELECT sname FROM student WHERE sdept='cs';
運(yùn)行結(jié)果????
例如:所有年齡在20歲以下的學(xué)生姓名和年齡
代碼如下????
SELECT sname,sage FROM student WHERE sage<20;
運(yùn)行結(jié)果????
例如:查詢考試成績有不及格的學(xué)生的學(xué)號(hào)
代碼如下????
SELECT DISTINCT sno FROM sc WHERE grade<60;
(3)確定范圍
謂詞:between and,not between and
例如:查詢年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名,年齡
代碼如下????
SELECT sname,sage FROM student WHERE sage BETWEEN 20 AND 23;
運(yùn)行結(jié)果????
(4)確定集合
謂詞: in<值表>,not in<值表>
代碼如下????
SELECT sname ,ssex,sdept FROM student WHERE sdept IN ('CS','MA','IS');
運(yùn)行結(jié)果????
(5)字符匹配
謂詞:[not]like'<匹配串>'[ESCAPE'<換碼字符>']
<匹配串>可以是一個(gè)完整的字符串,也可以含有通配符%和_
%(百分號(hào))代表任意長度(長度可以為0)的字符串
例如:a%b表示以a開頭,以b結(jié)尾的任意長度的字符串
_(下劃線)代表任意單個(gè)字符
例如:a_b表示以a開頭,以b結(jié)尾的長度為3的任意字符串
-----------------------------------
(1)匹配串含固定字符串
例如:查詢學(xué)號(hào)為201215121的學(xué)生的詳細(xì)情況
代碼如下????
SELECT * FROM student WHERE sno='201215121';
運(yùn)行結(jié)果????
(2)匹配串為含通配符的字符串
例如:查詢所有姓劉學(xué)生的姓名,學(xué)號(hào),性別
代碼如下????
SELECT sname ,sno,ssex FROM student WHERE sname LIKE '劉%';
運(yùn)行結(jié)果????
例如:查詢姓"歐陽"且全名為三個(gè)漢字的學(xué)生的姓名
代碼如下????
SELECT sname FROM student WHERE sname LIKE '歐陽_';
例如:查詢名字中第二個(gè)字為"陽"字的學(xué)生的姓名和學(xué)號(hào)
代碼如下????
SELECT sname,sno FROM student WHERE sname LIKE '_陽%';
例如:查詢所有不姓劉的學(xué)生姓名,學(xué)號(hào)和性別
代碼如下????
SELECT sname ,sno,ssex FROM student WHERE sname NOT LIKE '劉%';
(3)使用換碼字符將通配符轉(zhuǎn)義為普通字符
ESCAPE'/'表示"/"為換碼字符
例如:查詢DB_Design課程的課程號(hào)和學(xué)分
代碼如下????
select cno,ccredit from course where cname like'DB/_Design'ESCAPE'/';
例如:查詢以"DB_"開頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況
代碼如下????
select * from course where cname like 'DB/_%i__'ESCAPE'/';
(6)涉及空值的查詢
謂詞: is null 或 is not null
注意:"is"不能用 "="代替
例如:某些學(xué)生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績
查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)
代碼如下????
select sno,cno from sc where grade is null;
3.ORDER BY子句
特點(diǎn)
可以按一個(gè)或多個(gè)屬性列排序
升序:ASC;降序:DESC;缺省值為升序
對(duì)于空值,排序時(shí)顯示的次序由具體系統(tǒng)實(shí)現(xiàn)來決定
例子
例1
(查詢選修了3課程的學(xué)生的學(xué)號(hào)及其成績,查詢結(jié)果按分?jǐn)?shù)降序排列)
SC表如下????
代碼如下????
SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY grade DESC;
運(yùn)行結(jié)果????
例2
(查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系好升序排列,同一系中的學(xué)生按年齡降序排列)
Student表如下????
代碼如下????
SELECT * FROM Student ORDER BY Sdept,Sage DESC;
運(yùn)行結(jié)果????
4.聚焦函數(shù)
(1)統(tǒng)計(jì)元組個(gè)數(shù)
COUNT(*)
例如:(查詢學(xué)生總?cè)藬?shù))
代碼如下????
SELECT COUNT(*) FROM student;
運(yùn)行結(jié)果????
(2)統(tǒng)計(jì)一列中值的個(gè)數(shù)
COUNT([DISTINCT|ALL]<列名>)
例如:(查詢選修了課程的學(xué)生人數(shù))
代碼如下????
SELECT COUNT(DISTINCT sno) FROM sc;
運(yùn)行結(jié)果????
(3)計(jì)算一列值的總和(此列必須為數(shù)值型)
SUM([DISTINCT|ALL]<列名>)
例如:(查詢學(xué)生201215012選修課程的總學(xué)分?jǐn)?shù))
代碼如下????
SELECT SUM(Ccredit) FROM sc,course WHERE sno='201215012' AND sc.`Cno`=course.`Cno`;
(4)計(jì)算一列值的平均值(此列必須為數(shù)值型)
AVG([DISTINCT|ALL]<列名>)
例如:(查詢選修1號(hào)課程的學(xué)生平均成績)
代碼如下????
SELECT AVG(Grade) FROM sc WHERE cno='1';
(5)求一列中的最大值和最小值
MAX([DISTINCT|ALL]<列名>)
例如:(查詢選修1號(hào)課程的學(xué)生最高分?jǐn)?shù))
代碼如下????
SELECT MAX(Grade) FROM sc WHERE cno='1';
MIN([DISTINCT|ALL]<列名>)
例如:(查詢選修1號(hào)課程的學(xué)生最低分?jǐn)?shù))
代碼如下????
SELECT MIN(Grade) FROM sc WHERE cno='1';?
5.GROUP BY子句
特點(diǎn)
細(xì)化聚焦函數(shù)的作用對(duì)象
如果未查詢結(jié)果分組,聚焦函數(shù)將作用于整個(gè)查詢結(jié)果
對(duì)查詢結(jié)果分組后,聚焦函數(shù)將分別作用于每個(gè)組
按指定的一列或多列值分組,值相等的為一組
代碼如下????
SELECT sno, AVG(Grade) FROM sc GROUP BY sno
運(yùn)行結(jié)果????
HAVING短語與WHERE子句的區(qū)別
(1)作用對(duì)象不同
(2)WHERE子句作用于基表或視圖,從中選擇滿足條件的元組
(3)HAVING短語作用于組,從中選擇滿足條件的組
例如:(查詢平均成績大于等于85分的學(xué)生學(xué)號(hào)和平均成績)
錯(cuò)誤代碼????:
SELECT sno, AVG(Grade) FROM sc WHERE AVG(grade)>=85 GROUP BY sno
正確代碼如下????
SELECT sno, AVG(Grade) FROM sc GROUP BY sno HAVING AVG(grade)>=85
注意:WHERE子句中是不能用聚焦函數(shù)作為條件表達(dá)式
總結(jié)
到此這篇關(guān)于MySQL單表查詢的文章就介紹到這了,更多相關(guān)MySQL單表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式
這篇文章主要介紹了Mybatis集成MySQL使用游標(biāo)查詢處理大批量數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Mysql中STR_TO_DATE函數(shù)使用(字符串轉(zhuǎn)為日期/時(shí)間值)
這篇文章主要給大家介紹了關(guān)于Mysql中STR_TO_DATE函數(shù)使用的相關(guān)資料,STR_TO_DATE函數(shù)的主要功能是字符串轉(zhuǎn)為日期/時(shí)間值,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09Mysql連接join查詢?cè)碇R(shí)點(diǎn)
在本文里我們給大家整理了一篇關(guān)于Mysql連接join查詢?cè)碇R(shí)點(diǎn)文章,對(duì)此感興趣的朋友們可以學(xué)習(xí)下。2019-02-02淺談mysql的timestamp存在的時(shí)區(qū)問題
本文主要介紹了淺談mysql的timestamp存在的時(shí)區(qū)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Mysql存儲(chǔ)過程學(xué)習(xí)筆記--建立簡(jiǎn)單的存儲(chǔ)過程
我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。2014-08-08Mysql主鍵UUID和自增主鍵的區(qū)別及優(yōu)劣分析
這篇文章主要介紹了Mysql主鍵UUID和自增主鍵的區(qū)別及優(yōu)劣分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02mysql5.7.19 winx64安裝配置方法圖文教程(win10)
這篇文章主要為大家詳細(xì)介紹了mysql5.7.19 winx64安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07