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

歡迎訪問 生活随笔!

生活随笔

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

数据库

9.MySQL数据查询SQL

發布時間:2024/7/23 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.MySQL数据查询SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

9.MySQL數據查詢SQL

語法格式:

select?字段列表|*?from?表名

[where?搜索條件]

[group?by?分組字段?[having?分組條件]]

[order?by?排序字段?排序規則]

[limit?分頁參數]

基礎查詢

#?查詢表中所有列?所有數據

select?*?from?users;

#?指定字段列表進行查詢

select?id,name,phone?from?users;

Where?條件查詢

可以在where子句中指定任何條件

可以使用?and?或者?or?指定一個或多個條件

where條件也可以運用在update和delete語句的后面

where子句類似程序語言中if條件,根據mysql表中的字段值來進行數據的過濾

示例:

--?查詢users表中?age > 22的數據

select?*?from?users?where?age >?22;

--?查詢?users?表中?name=某個條件值?的數據

select?*?from?users?where?name =?'王五';

--?查詢?users?表中?年齡在22到25之間的數據

select?*?from?users?where?age >=?22?and?age <=?25;

select?*?from?users?where?age?between?22?and?25;

--?查詢?users?表中?年齡不在22到25之間的數據

select?*?from?users?where?age <?22?or?age >?25;

select?*?from?users?where?age?not?between?22?and?25;

--?查詢?users?表中?年齡在22到25之間的女生信息

select?*?from?users?where?age >=?22?and?age <=?25?and?sex =?'女';

and和or?使用時注意

假設要求?查詢?users?表中?年齡為22或者25?的女生信息

select * from users where age=22 or age = 25 and sex = '女';

思考上面的語句能否返回符合條件的數據?

實際查詢結果并不符合要求?

select?*?from?users?where?age=22?or?age =?25?and?sex =?'女';

+------+--------+------+-------+-------+------+------+

| id | name | age | phone | email | sex | mm |

+------+--------+------+-------+-------+------+------+

|?1?|?章三?|?22?| |?NULL?|?男?|?0?|

|?1002?| cc |?25?|?123?|?NULL?|?女?|?NULL?|

+------+--------+------+-------+-------+------+------+

2?rows?in?set?(0.00?sec)

--?上面的查詢結果并不符合?查詢條件的要求。

--?問題出在?sql?計算的順序上,sql會優先處理and條件,所以上面的sql語句就變成了

--?查詢變成了為年齡22的不管性別,或者年齡為?25的女生

--?如何改造sql符合我們的查詢條件呢?

--?使用小括號來關聯相同的條件

select?*?from?users?where?(age=22?or?age =?25)?and?sex =?'女';

+------+------+------+-------+-------+------+------+

| id | name | age | phone | email | sex | mm |

+------+------+------+-------+-------+------+------+

|?1002?| cc |?25?|?123?|?NULL?|?女?|?NULL?|

+------+------+------+-------+-------+------+------+

1?row?in?set?(0.00?sec)

Like?子句

我們可以在where條件中使用=,<,>?等符合進行條件的過濾,但是當想查詢某個字段是否包含時如何過濾?

可以使用like語句進行某個字段的模糊搜索,

例如:?查詢?name字段中包含五的數據

-- like?語句?like某個確定的值?和。where name = '王五'?是一樣

select?*?from?users?where?name?like?'王五';

+----+--------+------+-------+-----------+------+------+

| id | name | age | phone | email | sex | mm |

+----+--------+------+-------+-----------+------+------+

|?5?|?王五?|?24?|?10011?| ww@qq.com?|?男?|?0?|

+----+--------+------+-------+-----------+------+------+

1?row?in?set?(0.00?sec)

--?使用?%?模糊搜索。%代表任意個任意字符

--?查詢name字段中包含五的

select?*?from?users?where?name?like?'%五%';

--?查詢name字段中最后一個字符?為?五的

select?*?from?users?where?name?like?'%五';

--?查詢name字段中第一個字符?為?王?的

select?*?from?users?where?name?like?'王%';

--?使用?_?單個的下劃線。表示一個任意字符,使用和%類似

--?查詢表中?name?字段為兩個字符的數據

select?*?from?users?where?name?like?'__';

--?查詢?name?字段最后為五,的兩個字符的數據

select?*?from?users?where?name?like?'_五';

注意:where子句中的like在使用%或者_進行模糊搜索時,效率不高,使用時注意:

盡可能的不去使用%或者_

如果需要使用,也盡可能不要把通配符放在開頭處

Mysql中的統計函數(聚合函數)

max(),min(),count(),sum(),avg()

#?計算?users?表中?最大年齡,最小年齡,年齡和及平均年齡

select?max(age),min(age),sum(age),avg(age)?from?users;

+----------+----------+----------+----------+

|?max(age) |?min(age) |?sum(age) |?avg(age) |

+----------+----------+----------+----------+

|?28?|?20?|?202?|?22.4444?|

+----------+----------+----------+----------+

--?上面數據中的列都是在查詢時使用的函數名,不方便閱讀和后期的調用,可以通過別名方式?美化

select?max(age)?as?max_age,

min(age) min_age,sum(age)?as?sum_age,

avg(age)?as?avg_age

from?users;

+---------+---------+---------+---------+

| max_age | min_age | sum_age | avg_age |

+---------+---------+---------+---------+

|?28?|?20?|?202?|?22.4444?|

+---------+---------+---------+---------+

--?統計?users?表中的數據量

select?count(*)?from?users;

+----------+

|?count(*) |

+----------+

|?9?|

+----------+

select?count(id)?from?users;

+-----------+

|?count(id) |

+-----------+

|?9?|

+-----------+

--?上面的兩個統計,分別使用了?count(*)?和?count(id),結果目前都一樣,有什么區別?

-- count(*)?是按照?users表中所有的列進行數據的統計,只要其中一列上有數據,就可以計算

-- count(id)?是按照指定的?id?字段進行統計,也可以使用別的字段進行統計,

--?但是注意,如果指定的列上出現了NULL值,那么為NULL的這個數據不會被統計

--?假設有下面這樣的一張表需要統計

+------+-----------+------+--------+-----------+------+------+

| id | name | age | phone | email | sex | mm |

+------+-----------+------+--------+-----------+------+------+

|?1?|?章三?|?22?| |?NULL?|?男?|?0?|

|?2?|?李四?|?20?| |?NULL?|?女?|?0?|

|?5?|?王五?|?24?|?10011?| ww@qq.com?|?男?|?0?|

|?1000?| aa |?20?|?123?|?NULL?|?女?|?NULL?|

|?1001?| bb |?20?|?123456?|?NULL?|?女?|?NULL?|

|?1002?| cc |?25?|?123?|?NULL?|?女?|?NULL?|

|?1003?| dd |?20?|?456?|?NULL?|?女?|?NULL?|

|?1004?| ff |?28?|?789?|?NULL?|?男?|?NULL?|

|?1005?|?王五六?|?23?|?890?|?NULL?|?NULL?|?NULL?|

+------+-----------+------+--------+-----------+------+------+

9?rows?in?set?(0.00?sec)

--?如果按照sex這一列進行統計,結果就是8個而不是9個,因為sex這一列中有NULL值存在

mysql>?select?count(sex)?from?users;

+------------+

|?count(sex) |

+------------+

|?8?|

+------------+

聚合函數除了以上簡單的使用意外,通常情況下都是配合著分組進行數據的統計和計算

Group BY?分組

group by?語句根據一個或多個列對結果集進行分組

一般情況下,是用與數據的統計或計算,配合聚合函數使用

--?統計?users?表中?男女生人數

--?很明顯按照上面的需要,可以寫出兩個語句進行分別統計

select?count(*)?from?users?where?sex =?'女';

select?count(*)?from?users?where?sex =?'男';

--?可以使用分組進行統計,更方便

select?sex,count(*)?from?users?group?by?sex;

+------+----------+

| sex |?count(*) |

+------+----------+

|?男?|?4?|

|?女?|?5?|

+------+----------+

--?統計1班和2班的人數

select?classid,count(*)?from?users?group?by?classid;

+---------+----------+

| classid |?count(*) |

+---------+----------+

|?1?|?5?|

|?2?|?4?|

+---------+----------+

--?分別統計每個班級的男女生人數

select?classid,sex,count(*)?as?num?from?users?group?by?classid,sex;

+---------+------+-----+

| classid | sex | num |

+---------+------+-----+

|?1?|?男?|?2?|

|?1?|?女?|?3?|

|?2?|?男?|?2?|

|?2?|?女?|?2?|

+---------+------+-----+

#?注意,在使用。group by分組時,一般除了聚合函數,其它在select后面出現的字段列都需要出現在grouop by?后面

Having?子句

having時在分組聚合計算后,對結果再一次進行過濾,類似于where,

where過濾的是行數據,having過濾的是分組數據

--?要統計班級人數

select?classid,count(*)?from?users?group?by?classid;

--?統計班級人數,并且要人數達到5人及以上

select?classid,count(*)?as?num?from?users?group?by?classid?having?num >=5;

Order by?排序

我們在mysql中使用select的語句查詢的數據結果是根據數據在底層文件的結構來排序的,

首先不要依賴默認的排序,另外在需要排序時要使用orderby對返回的結果進行排序

Asc?升序,默認

desc降序

--?按照年齡對結果進行排序,從大到小

select?*?from?users?order?by?age?desc;

--?從小到大排序?asc?默認就是??梢圆粚?/strong>

select?*?from?users?order?by?age;

--?也可以按照多個字段進行排序

select?*?from?users?order?by?age,id;?#?先按照age進行排序,age相同情況下,按照id進行排序

select?*?from?users?order?by?age,id?desc;

Limit?數據分頁

limit n?提取n條數據,

limit m,n?跳過m跳數據,提取n條數據

--?查詢users表中的數據,只要3條

select?*?from?users?limit?3;

--?跳過前4條數據,再取3條數據

select?*?from?users?limit?4,3;

-- limit一般應用在數據分頁上面

--?例如每頁顯示10條數據,第三頁的?limit應該怎么寫??思考

第一頁?limit?0,10

第二頁?limit?10,10

第三頁?limit?20,10

第四頁?limit?30,10

--?提取?user表中?年齡最大的三個用戶數據?怎么查詢?

select?*?from?users?order?by?age?desc?limit?3;

總結

以上是生活随笔為你收集整理的9.MySQL数据查询SQL的全部內容,希望文章能夠幫你解決所遇到的問題。

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