Mysql增刪改查之查詢記錄
在講解查詢前,我為大家準(zhǔn)備了一個資料表。這個表中存放著銀行的餘額和使用者的基本資料。
我們定義了一個表格結(jié)構(gòu),表名為money。
「建立表格的語句如下:
表格結(jié)構(gòu)與資料顯示如下:CREATE TABLE
) ENGINE = InnoDB CHARACTER SET utf8;money
(
? ? ?#id
INT NOT NULL AUTO_INCREMENT ,
? ? ?username
VARCHAR(50) NOT NULL ,
? ? ?#balance
FLOAT NOT NULL ,
? ?#balance
FLOAT NOT NULL ,
?? ? ?
age
TINYINT UNSIGNED NOT NULL ,? ? ?
sex
TINYINT NOT NULL ,? ? ?PRIMARY KEY (
id
(10))
##id | #username | balance | province | age | sex |
---|---|---|---|---|---|
1 | #1 | 王寶強 | |||
上海 | 29 | 1 | ##2 | #范冰冰 | 260.23 |
40 | #0 | 3 | 黃曉明 | 150.86 | |
40 | #1 | 4 | 井柏然 | ||
遼寧 | 27 | 1 | #5 | 李冰冰 | |
黑龍江 | 43 | 0 | 6 | 成龍 | |
山東 | 63 | 1 | #7 | 楊冪 | |
北京 | 30 | 0 | 8 | 劉詩詩 | |
北京 | 29 | 1 | 9 | 柳巖 | |
9 | 柳巖 | 23.4 | ##湖南36 | 0 | |
#趙本山 | 3456 | ##遼寧 | 63 | 1 |
#34.32
北京
1 |
註:”*” 是一種正規(guī)表示式的寫法,表示匹配所有,上面的查詢語句和下面的是等價:
mysql> select * from money;
+- ---+-----------+---------+-----------+-----+-----+
| id | username ?| balance | province ?| age | sex |
+----+-----------+---------+--- --------+-----+-----+
| ?1 | 王寶強? ?| ?120.02 | 湖北? ? ?| ?29 | ? 1 |
| ?2 | ?| ? 0 |
| ?3 | 黃曉明? ?| ?150.86 | 山東? ? ?| ?40 | ? 1 |
| ?4 | 汝?5 | 李冰冰? ?| ? 20.15 | 黑龍江? ?| ?43 | ? 0 |
| ?6 | 成龍? ? ?| ? ? 313 | 山東? ? ?| ?63 | ? 1 |
| ?7 | 楊冪? ??| ? 1 |
| ?7 | 楊冪? ??| ? ? 12 北京劉? |詩詩? ?| ? ? 456 | 北京? ? ?| ?29 | ? 1 |
| ?9 | 柳巖? ? ?| ? ?23.4 | 湖南? ? ?| ?36 | ? 0 |
#| 10 | 趙本山? ?|? ?3456 |115? ? ?| ? 34.32 | 北京? ? ?| ?44 | ? 1 |
| 12 | 郭德綱? ?| ? ? 212 | 天津? ? ?| ?43 | ? 1 |
+----+-----------+---------+------ -----+-----+-----+
12 rows in set (0.00 sec)
#指定欄位查詢
詳細(xì)解示 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
select 欄位from 表; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
select id,username, balance from money; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
查詢money表中id,username, balance欄位中的所有結(jié)果 |
基本語法 | |
---|---|
#範(fàn)例 | select distinct age deptno from money; |
範(fàn)例說明 | 查詢money表中年齡唯一的所有結(jié)果 |
mysql> select distinct age deptno from money; | +--------+ | | deptno |
| ? ? 27 |
| ? ? 43 |
| ? ? 63 |
| ? ? 30 |
| ? ? 36 |
| ? ? 44 |
+--------+
8 rows in set (0.00 sec )
條件查詢where
##基本語法 | select ?欄位from 表where where條件; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
select * from money where age = 29; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
查詢money表中年齡為29的所有結(jié)果 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
符號 | 說明 |
---|---|
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
!= | 不等於 |
= | 等於 |
#邏輯運算子
符號 | |
---|---|
or | |
並且
我們來看多個條件的範(fàn)例: | |
---|---|
select * from money where id <10 and |
查詢所有欄位要求id小於10 且province='湖北'+----+-----------+---------+----------+-----+----- +?| id | username ?| balance | province | age | sex |
mysql> select * from money where id <10 and province='湖北';
+----+-----------+---------+----------+-----+----- +
?| ?1 | 王寶強 ? ?| ?120.02 | 湖北 ? ? | ?29 | ? 1 |
+----+-----------+---------+----------+-----+----- +結(jié)果集排序 | |
---|---|
排序用到的關(guān)鍵字:
關(guān)鍵字 | 說明 |
---|---|
asc | 升序排列,從小到大(預(yù)設(shè)) |
在select 出來之後的結(jié)果集中排序使用order by ,其中desc 和asc 是排序順序中的關(guān)鍵字。 desc 表示依照欄位進(jìn)行降序排列,asc 表示升序排列,如果不寫關(guān)鍵字預(yù)設(shè)升序排列。
mysql> select id,username, balance from money order by balance desc;
+----+-----------+-------- -+
| id | username ?| balance |
+----+-----------+---------+
| 10 | 趙本山| ? ?3456 |
| ?4 | 井柏然? ?| ? ? 810 |
| ?8 | 劉詩詩? ?| ? ? 456 |
| 16 | 成龍? 冰 1??260.23 |
| 12 | 郭德綱| ? ? 212 |
| ?3 | 黃曉明? ?| ?150.86 |
| ?7 | 楊冪? ? ?| ? ? 123 |?## 102 王寶強 |10.? 34.32 |
| ?9 | 柳巖| ? ?23.4 |
+----+-----------+---------+
##12 rows in set (0.00 sec)多重欄位排序類別 | |
---|---|
基本語法 | |
範(fàn)例 | |
範(fàn)例說明 |
* 註:如果第一個欄位已經(jīng)將結(jié)果給排好。第二個字段排序字段不生效。本例中,第二個欄位無效。 *
mysql> select id,username, balance from money order by balance desc,age asc;
?+----+-----------+---------+
# ?| id | username ?| balance |
?+----+-----------+---------+
# ?| 10 | 趙本山 ? ?| ? ?3456 |
?| ?4 | 井柏然 ? ?| ? ? 810 |
?| ?8 | 劉詩詩 ? ?| ? ? 456 |
?| ?6 | 成龍 ? ? ?| ? ? 313 |
?| ?2 | 範(fàn)冰冰 ? ?| ?260.23 |
?| 12 | 郭德綱 ? ?| ? ? 212 |
?| ?3 | 黃曉明 ? ?| ?150.86 |
?| ?7 | 楊冪 ? ? ?| ? ? 123 |
?| ?1 | 王寶強 ? ?| ?120.02 |
?| 11 | 汪峰 ? ? ?| ? 34.32 |
?| ?9 | 柳巖 ? ? ?| ? ?23.4 |
?| ?5 | 李冰冰 ? ?| ? 20.15 |
?+----+-----------+---------+
# 12 rows in set (0.00 sec)
結(jié)果集限制
對於查詢或排序後的結(jié)果集,如果希望只顯示一部分而不是全部,使用limit 關(guān)鍵字結(jié)果集數(shù)量限制。
類別 | 詳細(xì)解示 |
---|---|
基本語法 | #select 欄位from 表?limit 數(shù)量; |
範(fàn)例 | #select id,username, balance from money limit 5; |
#範(fàn)例說明 | 顯示前五個使用者 |
mysql> ?select * from money limit 5;
+----+-----------+---------+------- ----+-----+-----+
| id | username ?| balance | province ?| age | sex |
+----+-------- ---+---------+-----------+-----+-----+
| ?1 | 王寶強? ?| ?120.02 | 湖北? ? ?| 29 | ? 1 |
| ?2 | 範(fàn)冰冰? ?| ?260.23 | 山東? ? ?| ?40 | ? 0 |
#|?3 | 黃曉栠 ?40 | ? 0 |
|?3 | 黃小頠 | 4 | 井柏然? ?| ? ? 810 | 遼寧? ? ?| ?27 | 1 |
| ?5 | 李冰冰? ?| ? 20.15 | 黑龍江? ?| ?43 | ? 0 |
+----+-----------+---------+- ----------+-----+-----+
5 rows in set (0.00 sec)
#限制結(jié)果集並排序
類別 | 詳細(xì)解示 |
---|---|
#基本語法 | select 欄位from 表order by 欄位關(guān)鍵字limit 數(shù)量 |
#範(fàn)例 | select id,username, balance from money order by balance desc limit 5; |
#範(fàn)例說明 | 依照錢來排序,顯示前五個最有錢的用戶 |
mysql> select id,username, balance from money order by balance desc limit 5;
+----+-----------+---------+
| id | username ?| balance |
+----+-----------+---------+
| 10 | 趙本山? ?| ? ?3456 |
| ?4 | 井柏然? ?| ? ? 810 |
| ?8 | 劉詩詩? ?| ? ? 456 |
| ?6 | 成龍? ? ?| ? ? 313 |
| ?2 | 範(fàn)冰---------+
5 rows in set (0.00 sec)
詳細(xì)解示 | |
---|---|
#select 欄位from 表?limit 偏移量,數(shù)量 | |
select id,username, balance from ?money limit 0,3; | |
從第一筆開始取三筆記錄 |
#函數(shù) | 說明 |
---|---|
#sum | 總和 |
count | 統(tǒng)計總數(shù) |
#max | 最大 |
min | 最小值 |
avg#平均值
註:當(dāng)然你知道其他的mysql函數(shù)也可以使用。不過,在實際工作中,大公司的許多大中型項上很少使用,他們都有專門的計數(shù)伺服器。因為,mysql的計算量本身很大,為了減少壓力通常我們將實際的運算任務(wù)交給業(yè)務(wù)伺服器或其他伺服器來完成。 | |
---|---|
#詳細(xì)解示 | |
基本語法 | select 函數(shù)(字段) from 表 |
範(fàn)例 | #select count(id) from money |
mysql> select count(id) from money;
?+-----------+
?| count(id) |
?+-----------+
?| ? ? ? ?12 |
?+-----------+
?1 row in set (0.00 sec)
你也可以為欄位取別名喲!使用as關(guān)鍵字。
mysql> select count(id) as zongshu from money;
?+---------+
?| zongshu |
?+---------+
?| ? ? ?12 |
?+---------+
?1 row in set (0.00 sec)
查詢平均金額
mysql> select avg(balance) from money;
?+--------------------+
?| avg(balance) ? ? ? |
?+--------------------+
?| 498.24833393096924 |
?+--------------------+
?1 row in set (0.00 sec)
查詢總金額
mysql> select sum(balance) from money;
?+-----------------+
?| sum(balance) ? ? ?|
# ?+-----------------+
?| 5978.980007171631 |
?+-----------------+
?1 row in set (0.00 sec)
查詢最大金額
mysql> select max(balance) from money;
?+--------------+
?| max(balance) |
?+--------------+
?| ? ? ? ? 3456 |
?+--------------+
?1 row in set (0.00 sec)
查詢最小金額
mysql> select min(balance) from money;
?+--------------------+
?| min(balance) ? ? ? |
# ?+--------------------+
?| 20.149999618530273 |
?+--------------------+
?1 row in set (0.00 sec)
分組 group by
我們拿金額表裡面的省份進(jìn)行分組數(shù)據(jù),分組數(shù)據(jù)後你會發(fā)現(xiàn)。有相同的省份會去掉。即,一個省份為一個組。
類別 | 詳細(xì)解示 |
---|---|
基本語法 | #select * from 表group by 欄位 |
#範(fàn)例 | select * from money group by province; |
範(fàn)例說明 | 依照地區(qū)進(jìn)行分組 |
mysql> select * from money group by province;
+----+-----------+---------+------ -----+-----+-----+
| id | username ?| balance | province ?| age | sex |
+----+------- ----+---------+-----------+-----+-----+
| ?7 | 楊冪? ? ?| ? ? 123 | 北京| ?30 | ? 0 |
| 12 | 郭德綱? ?| ? ? 212 | 天津? ? ?| ?43 | ? 1 |
| ?2?1 | 王寶強? ?| ?120.02 | 湖北? ? ?| ?29 | ? 1 |
| ?9 | 柳巖? ? ?| ? ?23.4 | 湖南? ? ?| ?36 | ? 0 |
|?4 | 井?#?|??5 | 李冰冰? ?| ? 20.15 | 黑龍江? ?| ?43 | ? 0 |
+----+-----------+---------+-----------+-----+ -----+
統(tǒng)計分組(分類)各總數(shù):
mysql> select deptno, count(1) from emp group by deptno;
+----- ---+----------+| deptno | count(1) |
+--------+----------+
| ? ? ?1 | ? ? ? ?1 |
#| ? ? ?2 | ? ? ? ?5 |
| ? ? ?3 |?---- -----+
4 rows in set (0.04 sec)
統(tǒng)計省份數(shù)量後再進(jìn)行分組顯示
?+-----------------+-----------+
?| count(province) | province ?|?+-----------------+-----------+?| ? ? ? ? ? ? ? 3 | 北京 ? ? ?|
with rollup用的很少。這個知識點設(shè)定為了解等級。
?| ? ? ? ? ? ? ? 1 | 天津 ? ? ?|
?| ? ? ? ? ? ? ? 3 | 山東 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 湖北 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 湖南 ? ? ?|
?| ? ? ? ? ? ? ? 2 | 遼寧 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 黑色龍江 ? ?|
?+-----------------+-----------+
?7 rows in set (0.00 sec)
在分組基礎(chǔ)上進(jìn)行統(tǒng)計
它的主要功能是對於分組的資料進(jìn)行統(tǒng)計後,再進(jìn)行一次總數(shù)統(tǒng)計。
類別 | 詳細(xì)解示 |
---|---|
#基本語法 | select * from 表group by 欄位with rollup |
範(fàn)例 | select count(province),province ?from money group by province with rollup; |
##範(fàn)例說明 |
#在上面的基礎(chǔ)上統(tǒng)計總數(shù),下例結(jié)果中,最後多了一個12 NULL。?8 rows in set (0.00 sec)?+-----------------+-----------+
mysql> select count(province),province ?from money group by province with rollup;
?+-----------------+-----------+
?| count(province) | province ?|
?+-----------------+-----------+
?| ? ? ? ? ? ? ? 3 | 北京 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 天津 ? ? ?|
?| ? ? ? ? ? ? ? 3 | 山東 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 湖北 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 湖南 ? ? ?|
?| ? ? ? ? ? ? ? 2 | 遼寧 ? ? ?|
?| ? ? ? ? ? ? ? 1 | 黑色龍江 ? ?|
?| ? ? ? ? ? ? ?12 | NULL ? ? ?|
結(jié)果再過濾having
having子句與where有相似之處但也有區(qū)別,都是設(shè)定條件的語句。
類別 | |
---|---|
基本語法 | |
範(fàn)例 | |
範(fàn)例說明 |
mysql> select count(province) as result ,province ?from money group by province having result >2;
?+--------+----------+
?| result | province |
?+--------+----------+
?| ? ? ?3 | 北京 ? ? |
?| ? ? ?3 | 山東 ? ? |
?+--------+----------+
?2 rows in set (0.00 sec)
整體使用SQL
我們在上面的語句中都是單一使用的某些語句,沒有整體使用過。
我們現(xiàn)在將語句進(jìn)行整合後,搭配使用一次。整體的SQL語句配合使用的語法結(jié)構(gòu)如下:
SELECT
? ? ?[字段1 [as 別名1],[函數(shù)(字段2) ,]......字段n]
?FROM 表名
?[WHERE 其中條件]
?[GROUP BY 字段]
?[HAVING where_contition]
?[order 條件]
?[limit 條件]
附註:上面的語句中可以[] 代表可選。
最終的語法總結(jié)如下:
關(guān)鍵字 | 說明 |
---|---|
#select | 選擇的欄位 |
from | 表 |
where | 查詢的條件 |
group by | 分組屬性?having 分組篩選的條件 |
#排序?qū)傩?td> | |
起始記錄位置,取記錄的條數(shù) |
mysql> select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3;繼續(xù)學(xué)習(xí)?+----+-----------+---------+----------+
?| id | username ?| balance | province |
?+----+-----------+---------+----------+
?| 12 | 郭德綱 ? ?| ? ? 212 | 天津 ? ? |
?| ?7 | 楊冪 ? ? ?| ? ? 123 | 北京 ? ? |
?| ?4 | 井柏然 ? ?| ? ? 810 | 遼寧 ? ? |
?+----+-----------+---------+----------+
?3 rows in set (0.00 sec)
- 課程推薦
- 課件下載
-
初級php入門教程之一週學(xué)會PHP
462431人在看 -
初級PHP入門影片教學(xué)一週學(xué)會PHP
260248人在看 -
初級PHP快速入門免費教學(xué)課程
49610人在看 -
初級PHP上傳檔案—入門到實戰(zhàn)系列必學(xué)教程
10928人在看 -
初級XSL-FO 教程
8738人在看 -
初級jQuery中文參考手冊
34642人在看 -
初級MongoDB 教學(xué)課程
25418人在看 -
初級Scala教程
13739人在看 -
初級CSS 線上手冊
82248人在看 -
初級SVG 教程
13130人在看 -
初級AngularJS中文參考手冊
24573人在看 -
初級Go語言教程手冊
27434人在看
看過本課程的同學(xué)也在學(xué)習(xí)