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

歡迎訪問 生活随笔!

生活随笔

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

数据库

你所需要的MySQL检索语句(DQL)都在这儿(小白都能懂的哦)

發布時間:2024/10/14 数据库 100 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你所需要的MySQL检索语句(DQL)都在这儿(小白都能懂的哦) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡單檢索數據
2.檢索排序數據
3.檢索過濾數據
4.使用正則表達式檢索數據
5.檢索計算的字段
6.使用函數檢索數據
7.分組檢索數據
8.使用子查詢檢索數據
9.聯結表查詢
10.聯合查詢
11.子查詢
12.補充

1.簡單檢索數據

博客內容中student表為:

1.1.檢索單個列

select + 列名 + from + 表名

1.2.檢索多個列

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

1.3.檢索所有列

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

1.4.檢索不同的行

使用distinct關鍵字
select + distinct + 列名 + from + 表名

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

這里有一個注意點,distinct關鍵字應用于所有列前,不僅僅是前置它的列,如果給出兩個列,那么除非指定的兩個列都不同,否則所有的行都會被檢測出來

1.5.限制檢索結果

使用limit關鍵字
selet + 列名 + from + 表名 + limit + 數字

我們平時select語句返回匹配的行數,我們可以使用limit來限定返回的行數,比如select結果可以返回10行,我們只要前5行,那么就可以使用limit后邊參數為5,如果select返回4行,而limit限制的是5行,那么會返回4行。當然limit后邊的參數可以有兩個,有兩種寫法
即:

1.selet + 列名 + from + 表名 + limit + 數字1,數字2
2.selet + 列名 + from + 表名 + limit + 數字2 + offset + 數字1

意思是從數字1所代表的行數開始,檢索數字2行,第二種寫法是在MySQL5之后才支持的

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

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

select + 表名.列名 + from + 數據庫名.表名

2.排序檢索數據

2.1.基本語法

使用order by關鍵字
select + 列名(可以多個列) + from + 表名 + order by + 列名

兩個列名可以不一樣

我們日常都可以對員工的工資進行排序,但是有的員工工資一樣,這樣我們可以在員工工資一樣的基礎上對年齡等進行排序,這就是按照多個列進行排序
即:

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

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

2.2.指定排序方向

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

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

那么多個排序規則咋辦呢,即我們把一個班的同學按照總分進行降序排序,那么總分一樣的按照語文成績也降序排列,這里我們注意

desc關鍵字只應用到直接位于其前面的列

所有當我們需要按照多個字段排序只需要在對應字段后邊寫上對應的排序規則,那么比如我們需要兩個字段都降序:

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

其實升序的話我們不用寫,因為默認是升序,關鍵字是asc

按照上邊學的,我們做一個例子:
列出年齡最大的學生的姓名性別和數學成績:

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

注意order by和limit的位置順序

3.檢索過濾數據

3.1使用簡單where子句

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

where一個特殊操作符:

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

where進行空值檢查:

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

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

3.2組合where子句
操作符作用
and要同時滿足and左右兩邊的條件
or滿足or一邊的條件就行
in用來指定條件范圍
not用來否定條件里邊的內容

拿student表來舉例子:
1.and:我們查找女生中數學超過90分的學生的所有信息

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

2.or:我們查找年齡大于19歲學生的姓名,或者英語成績大于90的學生姓名

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

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

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

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

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

5.我們查找年齡不是20歲的學生的所有信息并且把他們按照數學成績降序排列,只要第二行的內容:

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

我們注意他們各個關鍵字的順序和limit后邊參數代表的含義

3.3使用通配符

通配符:用來匹配值的一部分的特殊符號
like: 根據通配符匹配而不是直接相等匹配進行比較

通配符作用
%表示任何字符出現的任意的次數
_匹配單個字符串長度

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

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

會有兩條結果翠花和如花似玉,%只會匹配一側(不限字符串長度),如果只是“%花”,那么如花似玉就不會被查找出來。當然,我們想要查找如花似玉也可以這么來查:

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

2._:我們查找如花似玉這名優秀的同學:

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

%能匹配0個字符和不限長度的字符串,而_只能而且必須匹配1個字符

4.使用正則表達式檢索數據

正則表達式是用來匹配文本的特殊串,將一個模式(正則表達式)與一個文本串進行比較

正則表達式常用符號:

符號符號作用
.匹配單個字符
|相當于或的意思
[…]或的另一種表現形式
-表示匹配范圍
\\匹配特殊字符
*0個或者多個匹配
+1個或多個匹配等于{1,}
?0個或者一個匹配等于{0,1}
{n}指定數目的匹配
{n,}不少于指定數目的匹配
{n,m}匹配數目的范圍m不超過255
^文本的開始
$文本的結尾
[[ :<:]]詞的開始
[[:>:]]詞的結尾

關鍵字:regexp
select + 列名(可以多個列) + from + 表名 + where + 列名 + regexp + 正則表達式

拿student表來說:
1 . 先說日regexp和like的區別

like匹配整個串然而regexp則是匹配子串

舉個例子:
我們用like匹配別為1的學生的姓名

select sname from student where othername like “1”
結果:
風姐

我們把like換成regexp:

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

現在是不是對區別有了很明顯的認識

2 ..就是匹配任意一個字符
舉個例子,我們查找語文成績個位數為8的同學的名字:

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

3.|
舉個例子我們查找別名中含1 ton或2的同學的姓名

select sname from student where othername regexp “1 ton|2”
查找結果:
翠花
旺財
如花似玉

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

select sname from student where othername regexp “[1|2] ton”
運行結果:
翠花
旺財

其實上邊就等同于select sname from student where othername regexp “1 ton|2 ton”
也等同于select sname from student where othername regexp “[12] ton”

5.-
舉個例子,查找別名中含有小寫英文字母的同學的姓名

select sname from student where othername regexp “[a-z]”
運行結果:
翠花
旺財
秋香
如花似玉

6.\\
舉個例子我們查找別名中含有.這個字符的同學的姓名

select sname from student where othername regexp “\\.”
查找結果;

我們所接觸的特殊符號\,[,],等等都可以用\\來轉義

7.?我們不拿student表舉例子,把書上的例子拿過來:

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

8 .{n}再拿書上的一個例子(其他的幾個大括號同理):

這里有一個匹配字符類:

9.^還是書上的例子:

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

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

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

第一個^限制開頭,第二個^表示否定

10.補充一點,不大小寫查詢

關鍵字:binary

我們平時查詢的字符串都會忽略大小寫,所以,可以使用binary不忽略大小寫

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

其余的重要程度沒那么高,自己試吧

5.檢索計算字段

5.1使用拼接字段

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

舉個例子如果數學老師有這種請求,就是把所有學生的數學成績打印出來并且打印格式為數學成(姓名) 這種格式那么可以

select concat(smath,"(",sname,")") from student
運行結果:

5.2使用別名

關鍵字:AS

用5.1的例子

SELECT CONCAT(LTRIM(smath),"(",sname,")") AS “數學成績” from student
結果:

AS可以不加,以上例子也可以寫成SELECT CONCAT(LTRIM(smath),"(",sname,")") “數學成績” from student。group by,having,order by后都支持別名

5.3執行算數計算

比如我們可以查找每一個同學的總分和該同學的名字:

SELECT sname as “姓名”,smath+schinese+senglish as “總成績” from student
運行結果:

6.使用函數檢索數據

6.1常用文本處理函數:


拿upper來舉例子,我們把同學的別名使用upper函數查詢出來:

SELECT UPPER(othername) as “別名” from student
運行結果:

6.2日期和時間處理函數:


日期的格式:

我們拿幾個重要的函數舉例子:
1.now():返回當前系統日期,時間

select now()
運行結果:

2.curdate():返回當前系統日期,不包含時間

select curdate()
運行結果:

3.curtime():返回當前時間,不包含日期

select curtime()
運行結果:

4.YEAR(),Hour()等:獲取指定的部分
select year(now())
運行結果:

5.對于date_format()函數
把當前時間轉換成字符串:

select DATE_FORMAT(now(),"%Y-%c-%d")
運行結果:

對應的有一個字符串轉日期的函數:
例子:

select STR_TO_DATE(“2001-09-10”,"%Y-%c-%d")
運行結果:

6.3數值處理函數:

6.4聚集函數:


1.AVG()函數
例子:我們拿student表來說,我們查找學生的數學平均分

select avg(smath) as “數學平均分” from student
運行結果:

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

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

用法的例子:

select count(*) from student
運行結果:

3.指定不同值

關鍵字distinct

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

select DISTINCT sage as “年齡種類” from student
運行結果:

4.注意點

avg(),min(),max(),sum()函數都會忽略空值

7.分組檢索數據

7.1.簡單分組

關鍵字group by

我們舉個例子:
統計student表里邊男生和女生的人數

select ssex,COUNT(*) from student GROUP BY ssex
運行結果:

注意點:

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

7.2過濾分組:

就是對簡單分組之后的數據再進行過濾
關鍵字having

舉個例子,我們統計student表中數學成績80分以上的男生人數

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

where和having的區別:

where在分組前過濾,having在分組后過濾

8.使用子查詢檢索數據

8.1子查詢簡介

1.子查詢:出現在其他語句中的語句稱為子查詢或者內查詢
內部鑲嵌其他select語句的查詢稱為外查詢或主查詢

2.(1)子查詢分類:
按子查詢出現的位置
select后邊+(僅支持標量子查詢)
from后面+(支持表子查詢)
where或者having后邊+(支持標量子查詢列子查詢行子查詢)
exists后邊+(表子查詢)
(2)按結果集的行列數不同:
標量子查詢:(結果集只有一行一列)
列子查詢:(結果集一列多行)
行子查詢:(結果集一般一行多列)
表子查詢:(結果集一般為多行多列)

8.2各種子查詢舉例:

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

select * from student where smath>(select smath from student where sname=“翠花”)
運行結果:

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

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

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

SELECT a.sname FROM student a where a.smath in (select smath from student where ssex=“女”)
運行結果:

2.select后邊的子查詢(標量子查詢)
我們分別查找同學們的獲獎次數:
這里引進一個prize表:

select sname,(select count(*) from prize where student.sname=prize.sname ) as “獲獎次數” from student
運行結果:

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

select s.sname from (select * from student where ssex=“女”) as s
運行結果:

4.exists后邊的表子查詢

exists的作用是判空

例子:我們查詢數學成績為100的學生的姓名

SELECT a.sname FROM student a where EXISTS(select a.smath from student where a.smath=100 )
運行結果:

這里注意不能這么寫:SELECT a.sname FROM student a where EXISTS(select smath from student where smath=100 ),就是沒有取別名,這么寫是先運行exists里邊的select,只要exists里邊有一個為真,那么就會查詢所有的同學的名字,否則所有的同學的名字都不會查出來,所以如果向上邊那么寫的話由于數學等于100的有一個同學,其他的都不是100,那么有一個為真就會把同學姓名都查出來,但是用了別名之后就是每一個同學判斷一次,判斷成功一個輸出一個名字

8.3相關子查詢

相關子查詢:涉及外部查詢的子查詢

我們查詢student表中男生和女生的數學平均分:

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

我們可以看到我把第一個ssex起一個別名,第二個用了引用,那么如果我們直接使用ssex=ssex,那么就會出錯,相關子查詢避免了歧義性

9.連接查詢

我們在student表基礎上添加一個information表代表學生信息(里邊有身高體重學號)

9.1連接查詢

分類;

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

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

select student.sname,ssex,sage,slength,sweigth from student,information where student.sname=information.sname
運行結果:

內連接之等值,非等值連接(sql99版本)
語法:

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

用sql99語句寫出上述sql92版本的例子

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

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

2.內連接之自連接(sql92版本):
舉一個口頭例子:
例子:一張員工表里邊有員工編號和領導所對應編號,那么如果要查找員工的名字和它領導的名字就會有

select a.name,b.name from 員工表 a,員工表 b where a.編號=b.領導編號
這里一張表看成了兩張表,但是必須給這兩張表起別名,不然就會產生歧義必須以這種格式來寫`

3.內連接之多表等值連接:

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

4.外連接之左外連接:

外連接適用于一個表有另一個表沒有的記錄

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

外連接特點(左外右外):

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

總的來說外連接=內連接+主表中有從表中沒有的數據

我們引進一個新的表abord(student表中學生出國留學次數)

例子:
我們把每一個同學出國留學次數查詢出來(我們使用左外連接):

select a.sname,b.scount from student a left JOIN abord b on a.sname=b.sname
運行結果:

5.全外連接特點

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

10.聯合查詢查詢

關鍵字union
應用場景:當我們查詢的信息來自多個表而且多個表之間沒有直接連接關系,但查詢的字段信息一致(比如兩個表都查姓名性別,這樣才能合成一張表,而且查詢字段要對齊比如兩表都查姓名性別,那么第一個select字段的順序要和第二個select一致都是先姓名后性別或者先性別后姓名)

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

SELECT sname,ssex from student where sage=18 UNION SELECT sname,ssex from student where sage=19
運行結果:

查詢的字段的列數要一致,字段要對齊,在聯合查詢時會進行去重不想去重時在union后邊加all關鍵字

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

SELECT sname,ssex from student where sage=18 UNION SELECT sname,ssex from student where sage=18
運行結果:

但是如果我們用union all的話

SELECT sname,ssex from student where sage=18 UNION all SELECT sname,ssex from student where sage=18
運行結果:

11.子查詢

11.1單行子查詢

單行子查詢,查詢結果只能是一行數據,子查詢里不能包含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多行子查詢

子查詢返回多行數據的子查詢語句,使用IN或者ANY或者ALL

例子:在emp表中查詢工資大于部門編號為10的任意一個員工工資即可的其他部門的員工工資即可的其他部門的員工信息

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

11.3關聯子查詢

在單行子查詢和多行子查詢里,內外查詢是分開執行的,有些內查詢的執行是要借助于外查詢,而外查詢的執行又離不開內查詢,也就是說內外查詢是相關聯的,這樣的子查詢稱為關聯子查詢

例子:
使用關聯子查詢檢索工資大于同職位的平均工資員信息

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

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

12.補充

12.1自然查詢

自然查詢是檢索多個表的時候,會把兩個表中具有相同的列的表進行自動連接(自然連接強制要求有相同的列名稱)
關鍵字:natural join

比如:

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

我們的employee表里和dept都有列empno,那么這個時候,自然查詢的時候系統就會自動連接

12.2交叉連接

交叉連接是不需要任何連接條件的連接(兩個表不需要有任何的關系),執行結果是笛卡爾乘積
關鍵字:cross join
select 列1,列2 from 表1 cross join 表2

總結

以上是生活随笔為你收集整理的你所需要的MySQL检索语句(DQL)都在这儿(小白都能懂的哦)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线天堂中文字幕 | 亚洲国产电影在线观看 | 澳门av在线 | 天堂网在线看 | 无码人妻aⅴ一区二区三区69岛 | 亚洲伦理久久 | 色狠狠干 | 伊人伦理 | 精品视频一区二区在线观看 | 国产巨乳在线观看 | 国产一级不卡毛片 | 国产精品播放 | www.av在线.com| 日本不卡一| 香蕉视频在线观看黄 | 丰满少妇麻豆av苏语棠 | 蜜桃麻豆视频 | 成人极品视频 | www.久久综合| 毛片黄色一级 | 国产素人在线 | 黄色片免费观看视频 | 无码成人精品区在线观看 | 尤物在线免费观看 | 99av视频 | 秋霞一级全黄大片 | 亚洲熟女综合色一区二区三区 | 久草美女 | 国产精品一亚洲av日韩av欧 | 免费看国产曰批40分钟粉红裤头 | 视频在线 | 吸咬奶头狂揉60分钟视频 | 亚洲第一成人网站 | 久久亚洲精品小早川怜子 | 久久久久久九九九 | 最新福利在线 | 中国一区二区三区 | 国产色综合天天综合网 | 麻豆视频免费观看 | wwxx日本 | 国产欧美日韩精品区一区二污污污 | 成年人黄色片网站 | 精品中文字幕在线播放 | 情欲少妇人妻100篇 黄色一级片欧美 | 在线日韩三级 | 自拍偷拍激情小说 | 亚洲av无码一区东京热久久 | 香蕉视频一区二区三区 | 尼姑福利影院 | 免费成人av片| ,一级淫片a看免费 | 亚洲精品乱码久久久久久蜜桃图片 | 国产超碰在线观看 | 国产第九页 | 亚洲成人91 | 天天干天天爽天天射 | 视频一区二区欧美 | 日本精品久久久 | 亚洲综合色一区二区 | 69视频一区二区 | 五月婷中文字幕 | 久久黄网站 | 亚洲欧美va天堂人熟伦 | 波多野结衣中文一区 | 西西人体44www大胆无码 | 朝桐光av在线一区二区三区 | 少妇熟女高潮流白浆 | av在线免费播放网址 | 先锋影音av资源在线观看 | 成人免费黄色网 | 国产成人中文字幕 | 日本黄色片网址 | 尤物视频在线播放 | 欧美男女交配 | 国产三级久久久久 | 黄色片免费在线观看 | 8x8ⅹ国产精品一区二区二区 | 欧美理伦| 日韩香蕉视频 | 超碰成人免费在线 | 天堂在线网| 99热国产在线 | 好吊色视频在线观看 | 亚洲成人精品在线播放 | 午夜试看120秒 | 亚洲精品一区二区三区区别 | 中国av片 | 一区二区三区免费在线 | 国产青草视频 | 男女www视频 | 国产一级爱c视频 | 在线免费观看视频 | 亚洲国产tv | 黄av在线| 一区二区三区www污污污网站 | 蜜桃视频在线观看一区 | 精品国产999久久久免费 | 午夜伦理视频 | 美女亚洲一区 |