5000年來(lái)最易看懂的MYSQL DQL語(yǔ)言

MYSQL 的查詢語(yǔ)言——————DQL
一、DQL語(yǔ)言基本規(guī)則

①DQL(Data Query Language):數(shù)據(jù)查詢語(yǔ)言,用來(lái)查詢記錄(數(shù)據(jù))。
②數(shù)據(jù)庫(kù)執(zhí)行DQL語(yǔ)句不會(huì)對(duì)數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫(kù)發(fā)送結(jié)果集給客戶端。查詢返回的結(jié)果集是一張?zhí)摂M表。
③查詢語(yǔ)句書(shū)寫和執(zhí)行順序
書(shū)寫:select -from- where- group by- having- order by-limit
執(zhí)行:from - where -group by -having - select - order by-limit

二、建立數(shù)據(jù)庫(kù)表格
student表


student.png

score表


score.png

三、DQL基本語(yǔ)法
查詢關(guān)鍵字:SELECT
1、基本查詢:
SELECT  *  FROM  student //查詢student表的全部列
SELECT sno , sname FROM student //查詢表格的某些列的全部信息

2、條件查詢:

①select  *  from  student  where  class = 95033;
1.png

其中“=”可換成 =、!=、<>(不等于)、<、<=、>、>=;等符號(hào)
“*”可換成我們想要顯示的某些列

②select * from student where sno in ( 107,109);//sno等于107,109的信息
2.png

其他條件查詢

select * from student where sno  BETWEEN 107 AND 109;
select * from student where sno  IS NULL;
select * from student where sno  IS  NULL  and  sno=107;
select * from student where sno  IS  NULL  or  sno=107;
select * from student where sno  IS  not  NULL;

3、模糊查詢

select * from student where sname like "王%";//以王開(kāi)頭的姓名
3.png
select * from student where sname like "%王%";//sanme中含有“王”字的信息
select * from student where sname like "_";//”_”表示單個(gè)字母

4、字段控制查詢

(1) 去除重復(fù)記錄
SELECT DISTINCT class FROM student;
(2) 相同類型字段可做運(yùn)算,列名起別名,把NULL值換為0
SELECT class+IFNULL(sno,0) AS 小名 FROM student;//別名的AS可省略


4.png

(3)排序查詢

SELECT * FROM student ORDER BY sno asc;//升序
SELECT * FROM student ORDER BY sno desc;//降序
SELECT * FROM student ORDER BY sno  desc , class  asc;//先sno降序,sno相同再按class升序

5、聚合函數(shù)(縱向運(yùn)算)
COUNT():統(tǒng)計(jì)指定列不為NULL的記錄行數(shù);

SELECT count(1) FROM student ;
SELECT count(1) FROM student where sno=107;

MAX():計(jì)算指定列的最大值,如果指定列是字符串類型,使用字符串排序運(yùn)算;

SELECT MAX(sno) FROM student ;

MIN():計(jì)算指定列的最小值,如果指定列是字符串類型,使用字符串排序運(yùn)算;

SELECT MIN(sno) FROM student ;

SUM():計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,計(jì)算結(jié)果為0;

SLECT SUM(sno) FROM student ;

AVG():計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;

SELECT AVG(sno) FROM student ;

6、分組查詢
1、凡和聚合函數(shù)同時(shí)出現(xiàn)的列名,則一定要寫在group by 之后

SELECT class, count(1) FROM student group by class ;

2、對(duì)分組后限定的HAVING 子句

SELECT class, count(1) FROM student group by class HAVING count(1) >=2;

注:having與where的區(qū)別:
1.having是在分組后對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,where是在分組前對(duì)數(shù)據(jù)進(jìn)行過(guò)濾
2.having后面可以使用分組函數(shù)(統(tǒng)計(jì)函數(shù)) where后面不可以使用分組函數(shù)。
3.WHERE是對(duì)分組前記錄的條件,如果某行記錄沒(méi)有滿足WHERE子句的條件,那么這行記錄不會(huì)參加分組;而 HAVING是對(duì)分組后數(shù)據(jù)的約束。

7、控制行數(shù)實(shí)現(xiàn)分頁(yè)查詢
若一頁(yè)行數(shù)為10;

SELECT * FROM student LIMIT 0, 9;//從0行開(kāi)始到第九行結(jié)束,為第一頁(yè)數(shù)據(jù)。

四、多表查詢
1、合并結(jié)果集(union , union all)

SELECT* FROM student UNION SELECT * FROM student;//去除重復(fù)數(shù)據(jù)
SELECT* FROM student UNION ALL SELECT * FROM student;//不去除重復(fù)數(shù)據(jù)
注:要合并的兩表的列數(shù)、列類型必須相同。

2、連接查詢
2.1內(nèi)連接
特點(diǎn):查詢結(jié)果必須滿足條件

SELECT * FROM student,score WHERE student.sno=score.sno ;(方言形式,可將*換成指定列)
SELECT * FROM student INNER JOIN score ON student.sno=score.sno ;(標(biāo)準(zhǔn)形式內(nèi)連接)

2.2 外連接
特點(diǎn):查詢結(jié)果必須滿足條件
①左連接是先查詢出左表(以左表為主),然后查詢右表,右表中滿足條件的顯示出來(lái),不滿足條件的顯示 NULL。

 SELECT * FROM student LEFT OUTER JOIN score ON student.sno=score.sno ;

②右連接就是先把右表中所有記錄都查詢出來(lái),然后左表滿足條件的顯示,不滿足顯示NULL;

SELECT * FROM student RIGHT OUTER JOIN score ON student.sno=score.sno 

3、子查詢
定義及形式:一個(gè)select語(yǔ)句中包含另一個(gè)完整的select語(yǔ)句。 子查詢就是嵌套查詢,即SELECT中包含SELECT,如果一條語(yǔ)句中存在兩個(gè),或兩個(gè)以上SELECT,那么就是子查詢語(yǔ)句了。
子查詢出現(xiàn)的位置:
a. where后,作為條為被查詢的一條件的一部分;

SELECT * FROM score WHERE degree > (SELECT degree FROM score WHERE cno='3-245' and sno=103);

b. from后,作表;

SELECT count(1)  FROM  (SELECT sno FROM score WHERE cno='3-245')  test;

test為子查詢表的別名。派生表必須有自己的別名;
c. 當(dāng)子查詢出現(xiàn)在where后作為條件且子查詢形式為多行單列時(shí),還可以使用如下關(guān)鍵字:

1.any
SELECT * FROM score WHERE sno = any(SELECT sno FROM score WHERE cno=’3-245’);
2.all
SELECT * FROM score WHERE degree< all(SELECT degree FROM score WHERE sno=103);

DQL語(yǔ)言到此告一段落,欲知其他內(nèi)容,請(qǐng)聽(tīng)下回分解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容