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