欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全小白篇

 更新時(shí)間:2021年09月16日 17:38:02   作者:祈禱ovo  
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全,本文適合數(shù)據(jù)庫(kù)初學(xué)者,小白也能看懂,有需要的朋友可以收藏閱讀,希望可以有所幫助

1.簡(jiǎn)單檢索數(shù)據(jù)

博客內(nèi)容中student表為:

在這里插入圖片描述

1.1.檢索單個(gè)列

select + 列名 + from + 表名

1.2.檢索多個(gè)列

select + 列名1,列名2,列名3......列n + from + 表名

1.3.檢索所有列

select + *(表示通配符) +from + 表名

1.4.檢索不同的行

使用distinct關(guān)鍵字
select + distinct + 列名 + from + 表名

舉個(gè)例子:我們想要查詢一個(gè)班級(jí)學(xué)生的性別有多少種,那么就不需要把每一個(gè)同學(xué)的性別都顯示出來(lái),只需要把不同性別顯示出來(lái)就行即distinct返回唯一值

這里有一個(gè)注意點(diǎn),distinct關(guān)鍵字應(yīng)用于所有列前,不僅僅是前置它的列,如果給出兩個(gè)列,那么除非指定的兩個(gè)列都不同,否則所有的行都會(huì)被檢測(cè)出來(lái)

1.5.限制檢索結(jié)果

使用limit關(guān)鍵字
selet + 列名 + from + 表名 + limit + 數(shù)字

我們平時(shí)select語(yǔ)句返回匹配的行數(shù),我們可以使用limit來(lái)限定返回的行數(shù),比如select結(jié)果可以返回10行,我們只要前5行,那么就可以使用limit后邊參數(shù)為5,如果select返回4行,而limit限制的是5行,那么會(huì)返回4行。當(dāng)然limit后邊的參數(shù)可以有兩個(gè),有兩種寫(xiě)法
即:

1.selet + 列名 + from + 表名 + limit + 數(shù)字1,數(shù)字2
2.selet + 列名 + from + 表名 + limit + 數(shù)字2 + offset + 數(shù)字1

意思是從數(shù)字1所代表的行數(shù)開(kāi)始,檢索數(shù)字2行,第二種寫(xiě)法是在MySQL5之后才支持的

注意檢索的第一行為行0,而不是1

1.6.使用完全限制的表名檢索

select + 表名.列名 + from + 數(shù)據(jù)庫(kù)名.表名

2.排序檢索數(shù)據(jù)

2.1.基本語(yǔ)法

使用order by關(guān)鍵字
select + 列名(可以多個(gè)列) + from + 表名 + order by + 列名

兩個(gè)列名可以不一樣

我們?nèi)粘6伎梢詫?duì)員工的工資進(jìn)行排序,但是有的員工工資一樣,這樣我們可以在員工工資一樣的基礎(chǔ)上對(duì)年齡等進(jìn)行排序,這就是按照多個(gè)列進(jìn)行排序
即:

select + 列名(可以多個(gè)列) + from + 表名 + order by + 列1,列2

意思是在列1一致的情況下按照列2進(jìn)行排序,如果列1不一致那么就不會(huì)按照列2排序

2.2.指定排序方向

上面我們講到的排序其實(shí)都是默認(rèn)排序,默認(rèn)是按照升序(字母按'A'到‘Z‘,數(shù)字從小到大)
我們一樣可以降序排列

使用desc關(guān)鍵字
select + 列名(可以多個(gè)列) + from + 表名 + order by + 列名 desc

那么多個(gè)排序規(guī)則咋辦呢,即我們把一個(gè)班的同學(xué)按照總分進(jìn)行降序排序,那么總分一樣的按照語(yǔ)文成績(jī)也降序排列,這里我們注意

desc關(guān)鍵字只應(yīng)用到直接位于其前面的列

所有當(dāng)我們需要按照多個(gè)字段排序只需要在對(duì)應(yīng)字段后邊寫(xiě)上對(duì)應(yīng)的排序規(guī)則,那么比如我們需要兩個(gè)字段都降序:

select + 列名(可以多個(gè)列) + from + 表名 + order by + 列名1 desc,列名2 desc

其實(shí)升序的話我們不用寫(xiě),因?yàn)槟J(rèn)是升序,關(guān)鍵字是asc

按照上邊學(xué)的,我們做一個(gè)例子:
列出年齡最大的學(xué)生的姓名性別和數(shù)學(xué)成績(jī):

select sname,ssex,smath from student ORDER BY sage desc LIMIT 1

注意order by和limit的位置順序

3.檢索過(guò)濾數(shù)據(jù)

3.1使用簡(jiǎn)單where子句

select + 列名 + from + 表名 where + 判斷條件

where一個(gè)特殊操作符:

1.<>:不等于,其實(shí)和!=是一樣的
2.between:和and連用表示在指定的兩個(gè)值之間例如:select age from student where age between 18 and 20

where進(jìn)行空值檢查:

select + 列名 + from + 表名 + where + 列名 + is null

注意這里用到的是is不是=

3.2組合where子句

操作符 作用
and 要同時(shí)滿足and左右兩邊的條件
or 滿足or一邊的條件就行
in 用來(lái)指定條件范圍
not 用來(lái)否定條件里邊的內(nèi)容

作用and要同時(shí)滿足and左右兩邊的條件or滿足or一邊的條件就行in用來(lái)指定條件范圍not用來(lái)否定條件里邊的內(nèi)容

拿student表來(lái)舉例子:
1.and:我們查找女生中數(shù)學(xué)超過(guò)90分的學(xué)生的所有信息

SELECT * FROM student where ssex=“女” and smath>90

2.or:我們查找年齡大于19歲學(xué)生的姓名,或者英語(yǔ)成績(jī)大于90的學(xué)生姓名

SELECT sname FROM student where sage>19 or senglish>90

3.in:我們查找年齡為18和19歲學(xué)生的姓名

select sname from student where sage in(18,19)

4.not:我們查找除了年齡為18和19歲學(xué)生的姓名

select sname from student where sage not in(18,19)

5.我們查找年齡不是20歲的學(xué)生的所有信息并且把他們按照數(shù)學(xué)成績(jī)降序排列,只要第二行的內(nèi)容:

select * from student where sage not in(20) GROUP BY smath desc LIMIT 1,1

我們注意他們各個(gè)關(guān)鍵字的順序和limit后邊參數(shù)代表的含義

3.3使用通配符

通配符:用來(lái)匹配值的一部分的特殊符號(hào)
like: 根據(jù)通配符匹配而不是直接相等匹配進(jìn)行比較

通配符 作用
% 表示任何字符出現(xiàn)的任意的次數(shù)
_ 匹配單個(gè)字符串長(zhǎng)度

拿student表來(lái)舉例子:
1.%:我們查找姓名里邊帶花的同學(xué)的所有信息

select * from student where sname like “%花%”

會(huì)有兩條結(jié)果翠花和如花似玉,%只會(huì)匹配一側(cè)(不限字符串長(zhǎng)度),如果只是“%花”,那么如花似玉就不會(huì)被查找出來(lái)。當(dāng)然,我們想要查找如花似玉也可以這么來(lái)查:

select * from student where sname like “%花%玉”

2._:我們查找如花似玉這名優(yōu)秀的同學(xué):

select * from student where sname like “_花_玉”

%能匹配0個(gè)字符和不限長(zhǎng)度的字符串,而_只能而且必須匹配1個(gè)字符

4.使用正則表達(dá)式檢索數(shù)據(jù)

正則表達(dá)式是用來(lái)匹配文本的特殊串,將一個(gè)模式(正則表達(dá)式)與一個(gè)文本串進(jìn)行比較

正則表達(dá)式常用符號(hào):

符號(hào) 符號(hào)作用
. 匹配單個(gè)字符
| 相當(dāng)于或的意思
[…] 或的另一種表現(xiàn)形式
- 表示匹配范圍
\\ 匹配特殊字符
* 0個(gè)或者多個(gè)匹配
+ 1個(gè)或多個(gè)匹配等于{1,}
? 0個(gè)或者一個(gè)匹配等于{0,1}
{n} 指定數(shù)目的匹配
{n,} 不少于指定數(shù)目的匹配
{n,m} 匹配數(shù)目的范圍m不超過(guò)255
^ 文本的開(kāi)始
$ 文本的結(jié)尾
[[ :<:]] 詞的開(kāi)始
[[:>:]] 詞的結(jié)尾

關(guān)鍵字:regexp
select + 列名(可以多個(gè)列) + from + 表名 + where + 列名 + regexp + 正則表達(dá)式

拿student表來(lái)說(shuō):
1 . 先說(shuō)日regexp和like的區(qū)別

like匹配整個(gè)串然而regexp則是匹配子串

舉個(gè)例子:
我們用like匹配別為1的學(xué)生的姓名

select sname from student where othername like “1”
結(jié)果:
風(fēng)姐

我們把like換成regexp:

select sname from student where othername regexp “1”
結(jié)果:
翠花
鳳姐
秋香

現(xiàn)在是不是對(duì)區(qū)別有了很明顯的認(rèn)識(shí) 2 ..就是匹配任意一個(gè)字符
舉個(gè)例子,我們查找語(yǔ)文成績(jī)個(gè)位數(shù)為8的同學(xué)的名字:

select sname from student where schinese regexp “.8”
結(jié)果:
鳳姐
秋香

3.|
舉個(gè)例子我們查找別名中含1 ton或2的同學(xué)的姓名

select sname from student where othername regexp “1 ton|2”
查找結(jié)果:
翠花
旺財(cái)
如花似玉

4.[....]
舉個(gè)例子,我們查找別名為1 ton或者2 ton的學(xué)生的姓名

select sname from student where othername regexp “[1|2] ton”
運(yùn)行結(jié)果:
翠花
旺財(cái)

其實(shí)上邊就等同于select sname from student where othername regexp “1 ton|2 ton”
也等同于select sname from student where othername regexp “[12] ton” 5.-
舉個(gè)例子,查找別名中含有小寫(xiě)英文字母的同學(xué)的姓名

select sname from student where othername regexp “[a-z]”
運(yùn)行結(jié)果:
翠花
旺財(cái)
秋香
如花似玉

6.\\
舉個(gè)例子我們查找別名中含有.這個(gè)字符的同學(xué)的姓名

select sname from student where othername regexp “\\.”
查找結(jié)果;
無(wú)
我們所接觸的特殊符號(hào)\,[,],等等都可以用\\來(lái)轉(zhuǎn)義

7.?我們不拿student表舉例子,把書(shū)上的例子拿過(guò)來(lái):

在這里插入圖片描述

注意這一句話:?匹配它前面的任何字符的0次和1次

8 .{n}再拿書(shū)上的一個(gè)例子(其他的幾個(gè)大括號(hào)同理):

在這里插入圖片描述

這里有一個(gè)匹配字符類:

在這里插入圖片描述

9.^還是書(shū)上的例子:

在這里插入圖片描述

當(dāng)然^不止可以指串的開(kāi)始,還可以在集合中(就是[]中)表示否定含義

為表示否定含義舉個(gè)例子:
[^a-z]:意思是匹配不是a-z的字符
我們拿student表舉例子:查找別名不是以a和1開(kāi)頭的同學(xué)的名字

select sname from student where othername regexp “^[^a1]”

第一個(gè)^限制開(kāi)頭,第二個(gè)^表示否定

10.補(bǔ)充一點(diǎn),不大小寫(xiě)查詢

關(guān)鍵字:binary

我們平時(shí)查詢的字符串都會(huì)忽略大小寫(xiě),所以,可以使用binary不忽略大小寫(xiě)

select + 列名(可以多個(gè)列) + from + 表名 + where + 列名 + regexp + binary + 正則表達(dá)式

其余的重要程度沒(méi)那么高,自己試吧

5.檢索計(jì)算字段

5.1使用拼接字段

使用concat(str1,str2,....)函數(shù)

舉個(gè)例子如果數(shù)學(xué)老師有這種請(qǐng)求,就是把所有學(xué)生的數(shù)學(xué)成績(jī)打印出來(lái)并且打印格式為數(shù)學(xué)成(姓名) 這種格式那么可以

select concat(smath,"(",sname,")") from student

運(yùn)行結(jié)果:

在這里插入圖片描述

5.2使用別名

關(guān)鍵字:AS

用5.1的例子

SELECT CONCAT(LTRIM(smath),"(",sname,")") AS “數(shù)學(xué)成績(jī)” from student

結(jié)果:

在這里插入圖片描述

AS可以不加,以上例子也可以寫(xiě)成

SELECT CONCAT(LTRIM(smath),"(",sname,")") “數(shù)學(xué)成績(jī)” from student。group by,having,order by后都支持別名

5.3執(zhí)行算數(shù)計(jì)算

比如我們可以查找每一個(gè)同學(xué)的總分和該同學(xué)的名字:

SELECT sname as “姓名”,smath+schinese+senglish as “總成績(jī)” from student

運(yùn)行結(jié)果:

在這里插入圖片描述

6.使用函數(shù)檢索數(shù)據(jù)

6.1常用文本處理函數(shù):

在這里插入圖片描述

拿upper來(lái)舉例子,我們把同學(xué)的別名使用upper函數(shù)查詢出來(lái):

SELECT UPPER(othername) as “別名” from student

運(yùn)行結(jié)果:

在這里插入圖片描述

6.2日期和時(shí)間處理函數(shù):

在這里插入圖片描述

日期的格式:

在這里插入圖片描述

我們拿幾個(gè)重要的函數(shù)舉例子:

1.now():返回當(dāng)前系統(tǒng)日期,時(shí)間

select now()

運(yùn)行結(jié)果:

在這里插入圖片描述

2.curdate():返回當(dāng)前系統(tǒng)日期,不包含時(shí)間

select curdate()

運(yùn)行結(jié)果:

在這里插入圖片描述

3.curtime():返回當(dāng)前時(shí)間,不包含日期

select curtime()

運(yùn)行結(jié)果:

在這里插入圖片描述

4.YEAR(),Hour()等:獲取指定的部分

select year(now())

運(yùn)行結(jié)果:

在這里插入圖片描述

5.對(duì)于date_format()函數(shù)
把當(dāng)前時(shí)間轉(zhuǎn)換成字符串:

select DATE_FORMAT(now(),"%Y-%c-%d")

運(yùn)行結(jié)果:

在這里插入圖片描述

對(duì)應(yīng)的有一個(gè)字符串轉(zhuǎn)日期的函數(shù):
例子:

select STR_TO_DATE(“2001-09-10”,"%Y-%c-%d")

運(yùn)行結(jié)果:

在這里插入圖片描述

6.3數(shù)值處理函數(shù):

在這里插入圖片描述

6.4聚集函數(shù):

在這里插入圖片描述

1.AVG()函數(shù)
例子:我們拿student表來(lái)說(shuō),我們查找學(xué)生的數(shù)學(xué)平均分

select avg(smath) as “數(shù)學(xué)平均分” from student

運(yùn)行結(jié)果:

在這里插入圖片描述

2.COUNT函數(shù)
一般的COUNT()函數(shù)有兩種用法

  • 1使用count(*)進(jìn)行計(jì)數(shù),不管列是不是null值
  • 2.使用count(column)對(duì)特定列中具有的值進(jìn)行計(jì)數(shù),忽略null值

用法的例子:

select count(*) from student

運(yùn)行結(jié)果:

在這里插入圖片描述

3.指定不同值

關(guān)鍵字distinct

如果我們查找student表中不同的年齡有多少種;

select DISTINCT sage as “年齡種類” from student

運(yùn)行結(jié)果:

在這里插入圖片描述

4.注意點(diǎn)

avg(),min(),max(),sum()函數(shù)都會(huì)忽略空值

7.分組檢索數(shù)據(jù)

7.1.簡(jiǎn)單分組

關(guān)鍵字group by

我們舉個(gè)例子:
統(tǒng)計(jì)student表里邊男生和女生的人數(shù)

select ssex,COUNT(*) from student GROUP BY ssex

運(yùn)行結(jié)果:

在這里插入圖片描述

注意點(diǎn):

1.如果分組里邊有null值,那么null做為一個(gè)分組返回,如果有多個(gè)null值,那么把他們分為一組
2.group by必須用到where子句之后

7.2過(guò)濾分組:

就是對(duì)簡(jiǎn)單分組之后的數(shù)據(jù)再進(jìn)行過(guò)濾
關(guān)鍵字having

舉個(gè)例子,我們統(tǒng)計(jì)student表中數(shù)學(xué)成績(jī)80分以上的男生人數(shù)

select ssex,COUNT(*) from student where smath>80 GROUP BY ssex HAVING ssex=“男”

運(yùn)行結(jié)果:

在這里插入圖片描述

where和having的區(qū)別:

where在分組前過(guò)濾,having在分組后過(guò)濾

8.使用子查詢檢索數(shù)據(jù)

8.1子查詢簡(jiǎn)介

1.子查詢:出現(xiàn)在其他語(yǔ)句中的語(yǔ)句稱為子查詢或者內(nèi)查詢
內(nèi)部鑲嵌其他select語(yǔ)句的查詢稱為外查詢或主查詢

2.(1)子查詢分類:
按子查詢出現(xiàn)的位置
select后邊+(僅支持標(biāo)量子查詢)
from后面+(支持表子查詢)
where或者h(yuǎn)aving后邊+(支持標(biāo)量子查詢列子查詢行子查詢)
exists后邊+(表子查詢)

2.(2)按結(jié)果集的行列數(shù)不同:
標(biāo)量子查詢:(結(jié)果集只有一行一列)
列子查詢:(結(jié)果集一列多行)
行子查詢:(結(jié)果集一般一行多列)
表子查詢:(結(jié)果集一般為多行多列)

8.2各種子查詢舉例:

1.where和having后邊的子查詢:
例子1:我們查詢student表中數(shù)學(xué)分比翠花高的學(xué)生的所有信息(標(biāo)量子查詢):

select * from student where smath>(select smath from student where sname=“翠花”)

運(yùn)行結(jié)果:

在這里插入圖片描述

例子2:如果如花似玉這名男生的語(yǔ)數(shù)外三科成績(jī)都大于80那么顯示所有同學(xué)的信息(行子查詢):

select * from student where (80,80,80)<(select schinese,smath,senglish from student where sname=“如花似玉”)

運(yùn)行結(jié)果:

在這里插入圖片描述

例子3:用where查詢女同學(xué)的名字(列子查詢)(例子比較菜)

SELECT a.sname FROM student a where a.smath in (select smath from student where ssex=“女”)

運(yùn)行結(jié)果:

在這里插入圖片描述

2.select后邊的子查詢(標(biāo)量子查詢)
我們分別查找同學(xué)們的獲獎(jiǎng)次數(shù):
這里引進(jìn)一個(gè)prize表:

在這里插入圖片描述

select sname,(select count(*) from prize where student.sname=prize.sname ) as “獲獎(jiǎng)次數(shù)” from student

運(yùn)行結(jié)果:

在這里插入圖片描述

3.from后邊的表子查詢:
例子:我們查找女生里邊數(shù)學(xué)高于八十分的同學(xué)的姓名:

select s.sname from (select * from student where ssex=“女”) as s

運(yùn)行結(jié)果:

在這里插入圖片描述

4.exists后邊的表子查詢

exists的作用是判空

例子:我們查詢數(shù)學(xué)成績(jī)?yōu)?00的學(xué)生的姓名

SELECT a.sname FROM student a where EXISTS(select a.smath from student where a.smath=100 )

運(yùn)行結(jié)果:

在這里插入圖片描述

這里注意不能這么寫(xiě):

SELECT a.sname FROM student a where EXISTS(select smath from student where smath=100 )

就是沒(méi)有取別名,這么寫(xiě)是先運(yùn)行exists里邊的select,只要exists里邊有一個(gè)為真,那么就會(huì)查詢所有的同學(xué)的名字,否則所有的同學(xué)的名字都不會(huì)查出來(lái),所以如果向上邊那么寫(xiě)的話由于數(shù)學(xué)等于100的有一個(gè)同學(xué),其他的都不是100,那么有一個(gè)為真就會(huì)把同學(xué)姓名都查出來(lái),但是用了別名之后就是每一個(gè)同學(xué)判斷一次,判斷成功一個(gè)輸出一個(gè)名字

8.3相關(guān)子查詢

相關(guān)子查詢:涉及外部查詢的子查詢

我們查詢student表中男生和女生的數(shù)學(xué)平均分:

select ssex as sssex ,(select avg(smath) FROM student where sssex=student.ssex) as “平均分” from student GROUP BY ssex

運(yùn)行結(jié)果:

在這里插入圖片描述

我們可以看到我把第一個(gè)ssex起一個(gè)別名,第二個(gè)用了引用,那么如果我們直接使用ssex=ssex,那么就會(huì)出錯(cuò),相關(guān)子查詢避免了歧義性

9.連接查詢

我們?cè)趕tudent表基礎(chǔ)上添加一個(gè)information表代表學(xué)生信息(里邊有身高體重學(xué)號(hào))

在這里插入圖片描述

9.1連接查詢

分類;

連接查詢分為內(nèi)連接和外連接交叉連接
1.內(nèi)連接:等值連接,非等值連接,自連接
2.外連接:左外連接,右外連接,全外連接
3.交叉連接

1.內(nèi)連接之等值,非等值連接(sql92版本)
舉一個(gè)等值連接的例子:結(jié)合student表和information表來(lái)查詢學(xué)生的姓名,性別,年齡,身高,體重

select student.sname,ssex,sage,slength,sweigth from student,information where student.sname=information.sname

運(yùn)行結(jié)果:

在這里插入圖片描述

內(nèi)連接之等值,非等值連接(sql99版本)
語(yǔ)法:

select + 查詢列表 + from 表1 (別名) + (inner)join 表2 (別名) + on 連接條件 + (where)+ (group by) + (having) + (order by)

用sql99語(yǔ)句寫(xiě)出上述sql92版本的例子

select student.sname,ssex,sage,slength,sweigth from student join information on student.sname=information.sname

與sql2語(yǔ)法不同的是兩個(gè)表之間用join隔開(kāi),而且和sql92不同的還有sql92語(yǔ)法是把連接條件和其他篩選條件都放在where中,而sql99這是把連接條件放在on后,其他篩選條件放在where后

2.內(nèi)連接之自連接(sql92版本):
舉一個(gè)口頭例子:
例子:一張員工表里邊有員工編號(hào)和領(lǐng)導(dǎo)所對(duì)應(yīng)編號(hào),那么如果要查找員工的名字和它領(lǐng)導(dǎo)的名字就會(huì)有

select a.name,b.name from 員工表 a,員工表 b where a.編號(hào)=b.領(lǐng)導(dǎo)編號(hào)

這里一張表看成了兩張表,但是必須給這兩張表起別名,不然就會(huì)產(chǎn)生歧義必須以這種格式來(lái)寫(xiě)

3.內(nèi)連接之多表等值連接:

select + 查詢列表 + from 表1 (別名) + (inner) join 表2 (別名) + on 連接條件 + (inner) join 表3 (別名) + on+連接條件 + (inner) join 表4 (別名) + on 連接條件 + ..... + (where) +(group by) + (having) + (order by)

4.外連接之左外連接:

外連接適用于一個(gè)表有另一個(gè)表沒(méi)有的記錄

左外連接基本語(yǔ)法:
SELECT + 查詢鏈表 + FROM + 主表 (別名) + LEFT (OUTER) JOIN +從表 (別名) +ON 連接條件

右外連接基本語(yǔ)法:
SELECT + 查詢鏈表 + FROM + 從表 (別名) + right (OUTER) JOIN +主表 (別名) +ON 連接條件

外連接特點(diǎn)(左外右外):

1.外連接會(huì)查詢主表里邊的所有記錄
2.如果主表有但從表里沒(méi)有那么就會(huì)顯示nuil

總的來(lái)說(shuō)外連接=內(nèi)連接+主表中有從表中沒(méi)有的數(shù)據(jù)

我們引進(jìn)一個(gè)新的表abord(student表中學(xué)生出國(guó)留學(xué)次數(shù))

在這里插入圖片描述

例子:
我們把每一個(gè)同學(xué)出國(guó)留學(xué)次數(shù)查詢出來(lái)(我們使用左外連接):

select a.sname,b.scount from student a left JOIN abord b on a.sname=b.sname

運(yùn)行結(jié)果:

在這里插入圖片描述

5.全外連接特點(diǎn)

外連接會(huì)查詢主表與從表里邊的所有記錄

10.聯(lián)合查詢查詢

關(guān)鍵字union

應(yīng)用場(chǎng)景:當(dāng)我們查詢的信息來(lái)自多個(gè)表而且多個(gè)表之間沒(méi)有直接連接關(guān)系,但查詢的字段信息一致(比如兩個(gè)表都查姓名性別,這樣才能合成一張表,而且查詢字段要對(duì)齊比如兩表都查姓名性別,那么第一個(gè)select字段的順序要和第二個(gè)select一致都是先姓名后性別或者先性別后姓名)

舉個(gè)例子:
查找student表中年齡為18和19歲的學(xué)生的姓名和性別:

SELECT sname,ssex from student where sage=18 UNION SELECT sname,ssex from student where sage=19

運(yùn)行結(jié)果:

在這里插入圖片描述

看看去重的效果:我們查詢兩次年齡為18歲的同學(xué)的姓名和性別

SELECT sname,ssex from student where sage=18 UNION SELECT sname,ssex from student where sage=18

運(yùn)行結(jié)果:

在這里插入圖片描述

但是如果我們用union all的話

SELECT sname,ssex from student where sage=18 UNION all SELECT sname,ssex from student where sage=18

運(yùn)行結(jié)果:

在這里插入圖片描述

11.子查詢

11.1單行子查詢

單行子查詢,查詢結(jié)果只能是一行數(shù)據(jù),子查詢里不能包含order by子句

例子(在emp中查詢既不是最高工資也不是最低工資的員工信息):

select empno,ename,sal,from emp where sal>(select min(sal) from emp) and sal<(select max(sal) from emp);

11.2多行子查詢

子查詢返回多行數(shù)據(jù)的子查詢語(yǔ)句,使用IN或者ANY或者ALL

例子:在emp表中查詢工資大于部門(mén)編號(hào)為10的任意一個(gè)員工工資即可的其他部門(mén)的員工工資即可的其他部門(mén)的員工信息

select * from emp where sal > any(select sal from emp where deptno=10 ) and deptno<>10

11.3關(guān)聯(lián)子查詢

在單行子查詢和多行子查詢里,內(nèi)外查詢是分開(kāi)執(zhí)行的,有些內(nèi)查詢的執(zhí)行是要借助于外查詢,而外查詢的執(zhí)行又離不開(kāi)內(nèi)查詢,也就是說(shuō)內(nèi)外查詢是相關(guān)聯(lián)的,這樣的子查詢稱為關(guān)聯(lián)子查詢

例子:
使用關(guān)聯(lián)子查詢檢索工資大于同職位的平均工資員信息

select empno,ename,sal from emp f where sal>(select avg(sal) from emp where job=f.job) order by job

上述例子子查詢里需要用到外查詢表中的職位名稱,外查詢又要用到子查詢出來(lái)的職位信息

12.補(bǔ)充

12.1自然查詢

自然查詢是檢索多個(gè)表的時(shí)候,會(huì)把兩個(gè)表中具有相同的列的表進(jìn)行自動(dòng)連接(自然連接強(qiáng)制要求有相同的列名稱)
關(guān)鍵字:natural join

比如:

select empno,ename,job,dname from emp natural join dept where sal>2000

我們的employee表里和dept都有列empno,那么這個(gè)時(shí)候,自然查詢的時(shí)候系統(tǒng)就會(huì)自動(dòng)連接

12.2交叉連接

交叉連接是不需要任何連接條件的連接(兩個(gè)表不需要有任何的關(guān)系),執(zhí)行結(jié)果是笛卡爾乘積
關(guān)鍵字:cross join

select 列1,列2 from 表1 cross join 表2

以上就是Mysql數(shù)據(jù)庫(kù)檢索語(yǔ)句DQL大全小白篇的詳細(xì)內(nèi)容,更多關(guān)于Mysql檢索語(yǔ)句DQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    這篇文章主要介紹了MySql如何查看索引并實(shí)現(xiàn)優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • MySQL 整表加密解決方案 keyring_file詳解

    MySQL 整表加密解決方案 keyring_file詳解

    這篇文章主要介紹了MySQL 整表加密解決方案 keyring_file詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • MySQL高級(jí)特性——數(shù)據(jù)表分區(qū)的概念及機(jī)制詳解

    MySQL高級(jí)特性——數(shù)據(jù)表分區(qū)的概念及機(jī)制詳解

    當(dāng)數(shù)據(jù)表過(guò)大時(shí),通過(guò)普通的查詢優(yōu)化技巧已經(jīng)無(wú)法大幅度提升性能,此時(shí)往往需要進(jìn)行分區(qū)分表優(yōu)化。分區(qū)其實(shí)是將一張邏輯上統(tǒng)一的表在物理上劃分成了多張表。分區(qū)操作對(duì)使用者而言是一個(gè)黑盒操作,但是如果你從文件系統(tǒng)上看,就會(huì)看到分區(qū)數(shù)據(jù)表的實(shí)際存儲(chǔ)方式是分開(kāi)的。
    2021-05-05
  • mysql命令行腳本執(zhí)行操作示例

    mysql命令行腳本執(zhí)行操作示例

    這篇文章主要介紹了mysql命令行腳本執(zhí)行操作,結(jié)合實(shí)例形式分析了MySQL命令行操作相關(guān)的登入登出、創(chuàng)建刪除、增刪改查等操作技巧,需要的朋友可以參考下
    2019-11-11
  • mysql json格式數(shù)據(jù)查詢操作

    mysql json格式數(shù)據(jù)查詢操作

    這篇文章主要介紹了mysql json格式數(shù)據(jù)查詢操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • mysql中使用shell語(yǔ)句實(shí)現(xiàn)xtrabackup自動(dòng)物理備份增量備份

    mysql中使用shell語(yǔ)句實(shí)現(xiàn)xtrabackup自動(dòng)物理備份增量備份

    這篇文章主要為大家介紹了mysql數(shù)據(jù)庫(kù)使用shell實(shí)現(xiàn)xtrabackup自動(dòng)物理備份增量備份腳本,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • MySql存儲(chǔ)過(guò)程之邏輯判斷和條件控制

    MySql存儲(chǔ)過(guò)程之邏輯判斷和條件控制

    本篇文章給大家介紹了mysql存儲(chǔ)過(guò)程之邏輯判斷、條件控制,涉及到的知識(shí)點(diǎn)有邏輯判斷、條件控制方面的內(nèi)容,對(duì)mysql存儲(chǔ)過(guò)程邏輯判斷和條件控制感興趣的朋友可以參考下本文
    2015-10-10
  • MySQL如何利用存儲(chǔ)過(guò)程快速生成100萬(wàn)條數(shù)據(jù)詳解

    MySQL如何利用存儲(chǔ)過(guò)程快速生成100萬(wàn)條數(shù)據(jù)詳解

    在MySQL數(shù)據(jù)庫(kù)中,如果要插入上百萬(wàn)級(jí)的記錄,用普通的insertinto來(lái)操作非常不現(xiàn)實(shí),速度慢人力成本高,這篇文章主要給大家介紹了關(guān)于MySQL如何利用存儲(chǔ)過(guò)程快速生成100萬(wàn)條數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • navicat無(wú)法遠(yuǎn)程連接mysql的解決方法

    navicat無(wú)法遠(yuǎn)程連接mysql的解決方法

    這篇文章主要介紹了navicat無(wú)法遠(yuǎn)程連接mysql的解決方法,需要的朋友可以參考下
    2014-04-04
  • MySQL回滾日志(undo?log)的作用和使用詳解

    MySQL回滾日志(undo?log)的作用和使用詳解

    undo?log是innodb引擎的一種日志,在事務(wù)的修改記錄之前,會(huì)把該記錄的原值先保存起來(lái)再做修改,以便修改過(guò)程中出錯(cuò)能夠恢復(fù)原值或者其他的事務(wù)讀取,這篇文章主要給大家介紹了關(guān)于MySQL回滾日志(undo?log)的作用和使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論