溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用MySQL中的select、distinct、limit

發(fā)布時間:2021-11-10 16:23:17 來源:億速云 閱讀:152 作者:iii 欄目:開發(fā)技術

這篇文章主要講解了“怎么使用MySQL中的select、distinct、limit”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用MySQL中的select、distinct、limit”吧!

    1、簡介

    這篇博客將會非常基礎,如果有MySQL經驗的可以跳過,寫這篇博客的原因是給初學者看的。下面將會講解如何使用select查看指定表的單個列、多個列以及全部列。

    首先準備一張表,表結構如下所示:

    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;

    表數據如下所示:

    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之后,數據庫關鍵字是完全不區(qū)分大小寫;數據庫名、表名、列名默認不區(qū)分大小寫,但是可以修改(不建議修改)。

    2、select

    2.1 查詢單個列

    首先使用use指定需要操作的數據庫。

    mysql> use liziba;
    Database changed

    接著使用selectuser表中查詢name列,select緊跟著列名稱,from后面緊跟著表名稱。

    select column_name from table_name;
    
    mysql> select name from user;
    +--------+
    | name   |
    +--------+
    | 李子捌 |
    | 張三   |
    | 李四   |
    | 王五   |
    | 六麻子 |
    | 田七   |
    +--------+
    6 rows in set (0.00 sec)

    2.2 查詢多個列

    查詢多個列和單個列的區(qū)別在于,select后面緊跟多個列名,用英文逗號分割即可。

    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 查詢所有列

    查詢所有列有兩種方式,第一種是上面兩種推導出的方式,列出所有的列名。

    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)

    提示:是程序員使用的大忌, 如果我們不需要獲取表的所有列且表的列名是移植的,就不應該使用查詢全部數據,而是應該指定數據庫列查詢,這樣可以提升查詢的性能。

    3、distinct

    如果需要查詢列值不重復的數據,可以使用distinct關鍵字去重。

    我們在上面的表中插入一條新的數據,數據age和李子捌相等,sex也相同。

    mysql> insert into user (name, age, sex) values('謝禮', 18, 1);
    Query OK, 1 row affected (0.01 sec)

    此時可以看到年齡列有相等的值

    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)

    此時我們想獲取user表中的用戶有哪些年齡。我們可以使用distinct關鍵字,應用于需要去重的列前面。

    mysql> select distinct age from user;
    +-----+
    | age |
    +-----+
    |  18 |
    |  22 |
    |  38 |
    |  25 |
    |  13 |
    |  37 |
    +-----+
    6 rows in set (0.00 sec)

    這里有一個問題需要注意, distinct關鍵字去重會作用于所有的字段,如果distinct關鍵字后面跟了多個字段,那么多個字段的值都不相等才算不重復。

    比如說user表中不存在age,name同時都不重復的數據,此時distinct關鍵字并不是沒生效,而是本身就不存在。

    mysql> select distinct age,name from user;
    +-----+--------+
    | age | name   |
    +-----+--------+
    |  18 | 李子捌 |
    |  22 | 張三   |
    |  38 | 李四   |
    |  25 | 王五   |
    |  13 | 六麻子 |
    |  37 | 田七   |
    |  18 | 謝禮   |
    +-----+--------+
    7 rows in set (0.00 sec)

    如果distinct關鍵字后跟的字段值都不相等,那么distinct關鍵字仍然能去重。比如李子捌和謝禮的年齡和性別均相等,此時distinct關鍵字會過濾一條數據。

    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

    前面的查詢會返回滿足條件的所有記錄,如果我們只需要指定數量的記錄,可以使用limit關鍵字限制返回的行;這種場景多用于數據分頁。

    limit的取值需大于等于0的整數 ,如果傳入負數和小數會報錯。

    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給定的值大于表的行記錄值,那么將會返回所有數據。比如我們通過select count(1)查詢user表的記錄數值,一共7條數據,此時我們傳入8,并不會報錯,MySQL將會放回user表中的所有數據。

    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可以跟兩個參數分別表示起始值和結束值,閉區(qū)間(包含起始值和結束值)。如果跟一個參數,則表示結束值,起始值默認為0。 注意MySQL數據的索引起始值為0。

    limit 2 , 4表示查詢第三條數據到第五條數據,其行號為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)

    感謝各位的閱讀,以上就是“怎么使用MySQL中的select、distinct、limit”的內容了,經過本文的學習后,相信大家對怎么使用MySQL中的select、distinct、limit這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI