MySQL 数据表查询
查詢數(shù)據(jù)指從數(shù)據(jù)庫中獲取所需要的數(shù)據(jù)。查詢數(shù)據(jù)是數(shù)據(jù)庫操作中最常用,也是最重要的操作。用戶可以根據(jù)自己對數(shù)據(jù)的需求,使用不同的查詢方式。通過不同的查詢方式,可以獲得不同的數(shù)據(jù)。MySQL中是使用SELECT語句來查詢數(shù)據(jù)的。
一、MySQL數(shù)據(jù)表簡單查詢
簡單查詢即不含where的select語句。在此,我們講解簡單查詢中最常用的兩種查詢:查詢所有字段和查詢指定字段。
1.1、MySQL查詢所有字段
查詢所有字段 MySQL命令:
select * from students;1.2、MySQL查詢指定字段
查詢指定字段 MySQL命令:
select stuid from students;1.3 、常數(shù)的查詢
在SELECT中除了書寫列名,還可以書寫常數(shù)。可以用于標記
常數(shù)的查詢?nèi)掌跇擞?MySQL命令:
1.4、從查詢結(jié)果中過濾重復(fù)數(shù)據(jù)
在使用DISTINCT 時需要注意:
在SELECT查詢語句中DISTINCT關(guān)鍵字只能用在第一個所查列名之前。
MySQL命令格式:
1.5、算術(shù)運算符(舉例加運算符)
在SELECT查詢語句中還可以使用加減乘除運算符。
查詢學(xué)生10年后的年齡 MySQL命令:
二、聚合函數(shù)
在開發(fā)中,我們常常有類似的需求:統(tǒng)計某個字段的最大值、最小值、 平均值等等。為此,MySQL中提供了聚合函數(shù)來實現(xiàn)這些功能。所謂聚合,就是將多行匯總成一行;其實,所有的聚合函數(shù)均如此——輸入多行,輸出一行。聚合函數(shù)具有自動濾空的功能,若某一個值為NULL,那么會自動將其過濾使其不參與運算。
聚合函數(shù)使用規(guī)則:
只有SELECT子句和HAVING子句、ORDER BY子句中能夠使用聚合函數(shù)。例如,在WHERE子句中使用聚合函數(shù)是錯誤的。
接下來,我們學(xué)習(xí)常用聚合函數(shù)。
| sum() | 計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型則計算結(jié)果為0 |
| avg() | 計算指定列的平均值,如果指定列類型不是數(shù)值類型則計算結(jié)果為0 |
| max() | 計算指定列的最大值,如果指定列是字符串類型則使用字符串排序運算 |
| min() | 計算指定列的最小值,如果指定列是字符串類型則使用字符串排序運算 |
| count() | 統(tǒng)計表中數(shù)據(jù)的行數(shù)或者統(tǒng)計指定列其值不為NULL的數(shù)據(jù)個數(shù) |
2.1、sum()語句格式
MySQL語法格式:
select sum(字段名) from 數(shù)據(jù)表名;查詢該學(xué)生表中年紀的總和 MySQL命令:
select sum(age) from students;2.2、avg()語句格式
MySQL語法格式:
select avg(字段名) from 數(shù)據(jù)表名;查詢該學(xué)生表中年紀的平均數(shù) MySQL命令:
select avg(age) from students;2.3、max()語句格式
MySQL語法格式:
select max(字段名) from 數(shù)據(jù)表名;查詢學(xué)生表中年齡最大的學(xué)生 MySQL命令:
select max(age) from students;2.4、min()語句格式
MySQL語法格式:
select min(字段名) from 數(shù)據(jù)表名;查詢該學(xué)生表中年紀最小的學(xué)生 MySQL命令:
select min(age) from students;2.5、count()語句格式
MySQL語法格式:
select count(字段名)from 數(shù)據(jù)表名;統(tǒng)計學(xué)生表中有多少人 MySQL命令:
select count(*) from students;三、條件查詢
數(shù)據(jù)庫中存有大量數(shù)據(jù),我們可根據(jù)需求獲取指定的數(shù)據(jù)。此時,我們可在查詢語句中通過WHERE子句指定查詢條件對查詢結(jié)果進行過濾。
3.1、條件語句格式
select * from 表名 where 條件;3.2、條件的寫法
| > | 大于 |
| < | 小于 |
| <> | 不等于 |
| != | 不等于 |
| = | 等于 |
| <= | 小于等于 |
| >= | 大于等于 |
| or | 或 |
| and | 而且 |
| is null | 內(nèi)容為空 |
| is not null | 內(nèi)容不為空 |
| like | 模糊查詢 |
| in | 判斷某個字段是否存在給定的元組中 |
| between...and... | 判斷范圍 |
3.3、使用關(guān)系運算符查詢
查詢年齡小于25的學(xué)生的信息 MySQL命令
select * from students where age<25;3.4、使用in關(guān)鍵字查詢
N關(guān)鍵字用于判斷某個字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,則將字段所在的記錄將査詢出來。
查詢stuid為18和20的學(xué)生信息 MySQL命令:
select * from students where stuid in (18,20);3.5、使用BETWEEN AND關(guān)鍵字查詢
BETWEEN AND用于判斷某個字段的值是否在指定的范圍之內(nèi)。如果字段的值在指定范圍內(nèi),則將所在的記錄將查詢出來
查詢10到18歲的學(xué)生信息 MySQL命令:
3.6、使用空值查詢
在MySQL中,使用 IS NULL關(guān)鍵字判斷字段的值是否為空值。請注意:空值NULL不同于0,也不同于空字符串
查詢name不為空值的學(xué)生信息 MySQL命令:
3.7、使用LIKE關(guān)鍵字查詢
%用于匹配任意長度的字符串。例如,字符串“a%”匹配以字符a開始任意長度的字符串
_用于匹配一個任意的字符串。列入,字符串"ab_"匹配"ab"開始長度為3的字符串,如abc、abp等等..
查詢學(xué)生姓名以r為開頭的記錄 MySQL命令:
select * from student where name like "r%";3.8、使用LIMIT限制查詢結(jié)果的數(shù)量
查詢學(xué)生表中年紀最大的3位同學(xué) MySQL命令:
select * from students age order by desc limit 3;3.9、使用GROUP BY進行分組查詢
統(tǒng)計學(xué)生男女人數(shù) MySQL命令:
select count(gender),gender from students group by gender;4.0、使用 order by 對查詢結(jié)果進行排序。
從表中査詢出來的數(shù)據(jù)可能是無序的或者其排列順序不是我們期望的。為此,我們可以使用ORDER BY對查詢結(jié)果進行排序
升序排列 MySQL命令格式:
降序排列 MySQL命令格式:
select 字段名 from 數(shù)據(jù)表名 order by stuid desc;4.1、使用distinct去除重復(fù)的字段
去除重復(fù)的年齡[每個年齡只顯示一條記錄] MySQL命令格式:
select distinct age from students order by age ;四、多表連接查詢
將兩張表或多張表聯(lián)合起來查詢,這就是連接查詢。
4.1、交叉連接
交叉連接返回的結(jié)果是被連接的兩個表中所有數(shù)據(jù)行的笛卡兒積。
MySQL:語法格式:
select * from 表1,表2;由于這個交叉連接查詢在實際運用中沒有任何意義,所以只做為了解即可
4.2、內(nèi)鏈接查詢(自然連接,等值鏈接)
內(nèi)連接使用比較運算符對兩個表中的數(shù)據(jù)進行比較并列出與連接條件匹配的數(shù)據(jù)行,組合成新的 記錄。也就是說在內(nèi)連接查詢中只有滿足條件的記錄才能出現(xiàn)在查詢結(jié)果中。
MySQL:語法格式:
select * from 表1,表2 where 表1.字段 = 表2.字段;?查詢學(xué)生所在班級 MySQL命令格式:
select * from students,classes where students.classID = classes.classID;4.3、外鏈接查詢
在使用內(nèi)連接查詢時我們發(fā)現(xiàn):返回的結(jié)果只包含符合查詢條件和連接條件的數(shù)據(jù)。但是,有時還需要在返回查詢結(jié)果中不僅包含符合條件的數(shù)據(jù),而且還包括左表、右表或兩個表中的所有數(shù)據(jù),此時我們就需要使用外連接查詢。外連接又分為左(外)連接和右(外)連接。
MySQL 語法格式:
select * from 表1 left join 表2 on 條件;LEFT? JOIN 左(外)連接:返回包括左表中的所有記錄和右表中符合連接條件的記錄。
RIGHT JOIN 右(外)連接:返回包括右表中的所有記錄和左表中符合連接條件的記錄。
關(guān)鍵字左邊的表被稱為左表,關(guān)鍵字右邊的表被稱為右表.
4.3.1、左外鏈接查詢
左外連接的結(jié)果包括LEFT JOIN子句中指定的左表的所有記錄,以及所有滿足連接條件的記錄。如果左表的某條記錄在右表中不存在則在右表中顯示為null。
查看班級下所有學(xué)生的老師姓名 MySQL命令:
select * from students left join teachers on students.teacherid = teachers.tid;4.3.2、右外鏈接查詢
右外連接的結(jié)果包括RIGHT JOIN子句中指定的右表的所有記錄,以及所有滿足連接條件的記錄。如果右表的某條記錄在左表中沒有匹配,則左表將返回null。
查看每個學(xué)生的姓名和班級名 MySQL命令:
select * from students right join classes on students.classid = classes.classid;五、子查詢
子查詢是指一個查詢語句嵌套在另一個查詢語句內(nèi)部的查詢;該查詢語句可以嵌套在一個 SELECT、SELECT…INTO、INSERT…INTO等語句中。在執(zhí)行查詢時,首先會執(zhí)行子查詢中的語句,再將返回的結(jié)果作為外層查詢的過濾條件。
MySQL語法格式:
select 字段 from 表名 where 字段=(select classid from students where name = Sun dasheng)查詢所有年齡小于平均年齡的學(xué)生 MySQL:
select * from students where age<(select avg(age) from students);對于MySQL,不推薦使用子查詢,執(zhí)行子查詢時,MYSQL需要創(chuàng)建臨時表,查詢完畢后再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這里多了一個創(chuàng)建和銷毀臨時表的過程。
以上就是本期的全部內(nèi)容,覺得有用的話可以點下關(guān)注,后續(xù)還會帶來更多有用的知識。
總結(jié)
以上是生活随笔為你收集整理的MySQL 数据表查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科勒公司成为曼联的主要合作伙伴
- 下一篇: java 上传文件编码_java文件传输