MySQL之select、distinct、limit的使用
1、簡(jiǎn)介
這篇博客將會(huì)非?;A(chǔ),如果有MySQL
經(jīng)驗(yàn)的可以跳過(guò),寫(xiě)這篇博客的原因是給初學(xué)者看的。下面將會(huì)講解如何使用select查看指定表的單個(gè)列、多個(gè)列以及全部列。
首先準(zhǔn)備一張表,表結(jié)構(gòu)如下所示:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(255) NOT NULL COMMENT '用戶名', `age` int(11) NOT NULL COMMENT '年齡', `sex` smallint(6) NOT NULL COMMENT '性別', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
表數(shù)據(jù)如下所示:
INSERT INTO `user` VALUES (1, '李子捌', 18, 1); INSERT INTO `user` VALUES (2, '張三', 22, 1); INSERT INTO `user` VALUES (3, '李四', 38, 1); INSERT INTO `user` VALUES (4, '王五', 25, 1); INSERT INTO `user` VALUES (5, '六麻子', 13, 0); INSERT INTO `user` VALUES (6, '田七', 37, 1); SET FOREIGN_KEY_CHECKS = 1;
注意在MySQL4.1
之后,數(shù)據(jù)庫(kù)關(guān)鍵字是完全不區(qū)分大小寫(xiě);數(shù)據(jù)庫(kù)名、表名、列名默認(rèn)不區(qū)分大小寫(xiě),但是可以修改(不建議修改)。
2、select
2.1 查詢單個(gè)列
首先使用use
指定需要操作的數(shù)據(jù)庫(kù)。
mysql> use liziba; Database changed
接著使用select
從user
表中查詢name
列,select
緊跟著列名稱,from
后面緊跟著表名稱。
select column_name from table_name; mysql> select name from user; +--------+ | name | +--------+ | 李子捌 | | 張三 | | 李四 | | 王五 | | 六麻子 | | 田七 | +--------+ 6 rows in set (0.00 sec)
2.2 查詢多個(gè)列
查詢多個(gè)列和單個(gè)列的區(qū)別在于,select后面緊跟多個(gè)列名,用英文逗號(hào)分割即可。
select column_name1,column_name2,column_name3 from table_name;
mysql> select name,age from user; +--------+-----+ | name | age | +--------+-----+ | 李子捌 | 18 | | 張三 | 22 | | 李四 | 38 | | 王五 | 25 | | 六麻子 | 13 | | 田七 | 37 | +--------+-----+ 6 rows in set (0.00 sec)
2.3 查詢所有列
查詢所有列有兩種方式,第一種是上面兩種推導(dǎo)出的方式,列出所有的列名。
mysql> select id,name,age,sex from user; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | +----+--------+-----+-----+ 6 rows in set (0.00 sec)
第二種,也是部分程序員使用的最多的一句SQL
,使用 *** 通配符**代替表的所有列。
select * from table_name;
mysql> select * from user; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | +----+--------+-----+-----+ 6 rows in set (0.00 sec)
提示:是程序員使用的大忌, 如果我們不需要獲取表的所有列且表的列名是移植的,就不應(yīng)該使用查詢?nèi)繑?shù)據(jù),而是應(yīng)該指定數(shù)據(jù)庫(kù)列查詢,這樣可以提升查詢的性能。
3、distinct
如果需要查詢列值不重復(fù)的數(shù)據(jù),可以使用distinct
關(guān)鍵字去重。
我們?cè)谏厦娴谋碇胁迦胍粭l新的數(shù)據(jù),數(shù)據(jù)age
和李子捌相等,sex
也相同。
mysql> insert into user (name, age, sex) values('謝禮', 18, 1); Query OK, 1 row affected (0.01 sec)
此時(shí)可以看到年齡列有相等的值
mysql> select * from user; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 謝禮 | 18 | 1 | +----+--------+-----+-----+ 7 rows in set (0.00 sec)
此時(shí)我們想獲取user
表中的用戶有哪些年齡。我們可以使用distinct
關(guān)鍵字,應(yīng)用于需要去重的列前面。
mysql> select distinct age from user; +-----+ | age | +-----+ | 18 | | 22 | | 38 | | 25 | | 13 | | 37 | +-----+ 6 rows in set (0.00 sec)
這里有一個(gè)問(wèn)題需要注意, distinct
關(guān)鍵字去重會(huì)作用于所有的字段,如果distinct
關(guān)鍵字后面跟了多個(gè)字段,那么多個(gè)字段的值都不相等才算不重復(fù)。
比如說(shuō)user
表中不存在age
,name
同時(shí)都不重復(fù)的數(shù)據(jù),此時(shí)distinct
關(guān)鍵字并不是沒(méi)生效,而是本身就不存在。
mysql> select distinct age,name from user; +-----+--------+ | age | name | +-----+--------+ | 18 | 李子捌 | | 22 | 張三 | | 38 | 李四 | | 25 | 王五 | | 13 | 六麻子 | | 37 | 田七 | | 18 | 謝禮 | +-----+--------+ 7 rows in set (0.00 sec)
如果distinct
關(guān)鍵字后跟的字段值都不相等,那么distinct
關(guān)鍵字仍然能去重。比如李子捌和謝禮的年齡和性別均相等,此時(shí)distinct
關(guān)鍵字會(huì)過(guò)濾一條數(shù)據(jù)。
mysql> select distinct age,sex from user; +-----+-----+ | age | sex | +-----+-----+ | 18 | 1 | | 22 | 1 | | 38 | 1 | | 25 | 1 | | 13 | 0 | | 37 | 1 | +-----+-----+ 6 rows in set (0.00 sec)
4、limit
前面的查詢會(huì)返回滿足條件的所有記錄,如果我們只需要指定數(shù)量的記錄,可以使用limit
關(guān)鍵字限制返回的行;這種場(chǎng)景多用于數(shù)據(jù)分頁(yè)。
limit
的取值需大于等于0的整數(shù) ,如果傳入負(fù)數(shù)和小數(shù)會(huì)報(bào)錯(cuò)。
mysql> select * from user limit 0; Empty set (0.00 sec) mysql> select * from user limit 1; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | +----+--------+-----+-----+ 1 row in set (0.00 sec)
如果limit
給定的值大于表的行記錄值,那么將會(huì)返回所有數(shù)據(jù)。比如我們通過(guò)select count(1)
查詢user表的記錄數(shù)值,一共7條數(shù)據(jù),此時(shí)我們傳入8,并不會(huì)報(bào)錯(cuò),MySQL
將會(huì)放回user
表中的所有數(shù)據(jù)。
mysql> select count(1) from user; +----------+ | count(1) | +----------+ | 7 | +----------+ 1 row in set (0.01 sec) mysql> select * from user limit 8; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 張三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 謝禮 | 18 | 1 | +----+--------+-----+-----+ 7 rows in set (0.00 sec)
limit
可以跟兩個(gè)參數(shù)分別表示起始值和結(jié)束值,閉區(qū)間(包含起始值和結(jié)束值)。如果跟一個(gè)參數(shù),則表示結(jié)束值,起始值默認(rèn)為0。 注意MySQL
數(shù)據(jù)的索引起始值為0。
limit 2
, 4表示查詢第三條數(shù)據(jù)到第五條數(shù)據(jù),其行號(hào)為2到4。
mysql> select * from user limit 2, 4; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | +----+--------+-----+-----+ 4 rows in set (0.00 sec)
到此這篇關(guān)于MySQL之select、distinct、limit的使用的文章就介紹到這了,更多相關(guān)MySQL之select、distinct、limit使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL查看數(shù)據(jù)庫(kù)連接數(shù)的方法
本文主要介紹了MySQL查看數(shù)據(jù)庫(kù)連接數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08mysql8.4版本mysql_native_password無(wú)法連接問(wèn)題解決
用dbeaver可以直接連接,但是用NAVICAT連接后報(bào)錯(cuò),本文主要介紹了mysql8.4版本mysql_native_password無(wú)法連接問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07解決MySQL報(bào)錯(cuò)incorrect?datetime?value?'0000-00-00?00:00
這篇文章主要給大家介紹了關(guān)于如何解決MySQL報(bào)錯(cuò)incorrect?datetime?value?'0000-00-00?00:00:00'?for?column的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08MySql安裝與配置方法(MySQL添加用戶、刪除用戶與授權(quán))
這篇文章主要介紹了MySql安裝與配置方法(MySQL添加用戶、刪除用戶與授權(quán))的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法詳解
這篇文章主要介紹了centos7環(huán)境下二進(jìn)制安裝包安裝 mysql5.6的方法,詳細(xì)分析了centos7環(huán)境下使用二進(jìn)制安裝包安裝 mysql5.6的具體步驟、相關(guān)命令、配置方法及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02SQL常見(jiàn)函數(shù)整理之Format將日期、時(shí)間和數(shù)字值格式化
最近項(xiàng)目總是寫(xiě)sql查詢時(shí)間,數(shù)據(jù)庫(kù)存的時(shí)間有各種格式,下面這篇文章主要給大家介紹了關(guān)于SQL常見(jiàn)函數(shù)整理之Format將日期、時(shí)間和數(shù)字值格式化的相關(guān)資料,需要的朋友可以參考下2024-01-01mysql存儲(chǔ)過(guò)程游標(biāo)之loop循環(huán)解讀
這篇文章主要介紹了mysql存儲(chǔ)過(guò)程游標(biāo)之loop循環(huán)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07