一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL之select、distinct、limit的使用

MySQL之select、distinct、limit的使用

2021-12-05 22:25李子捌 Mysql

這篇文章主要介紹了MySQL之select、distinct、limit的使用,下面文章圍繞select、distinct、limit的相關資料展開聚集內容,需要的朋友可以參考一下

MySQL之select、distinct、limit的使用

1、簡介

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;

表數據如下所示:

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

2、select

2.1 查詢單個列

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

?
1
2
mysql> use liziba;
Database changed

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select column_name from table_name;
 
mysql> select name from user;
+--------+
| name   |
+--------+
| 李子捌 |
| 張三   |
| 李四   |
| 王五   |
| 六麻子 |
| 田七   |
+--------+
6 rows in set (0.00 sec)

2.2 查詢多個列

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

select column_name1,column_name2,column_name3 from table_name;

?
1
2
3
4
5
6
7
8
9
10
11
12
mysql> select name,age from user;
+--------+-----+
| name   | age |
+--------+-----+
| 李子捌 |  18 |
| 張三   |  22 |
| 李四   |  38 |
| 王五   |  25 |
| 六麻子 |  13 |
| 田七   |  37 |
+--------+-----+
6 rows in set (0.00 sec)

2.3 查詢所有列

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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;

?
1
2
3
4
5
6
7
8
9
10
11
12
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也相同。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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關鍵字,應用于需要去重的列前面。

?
1
2
3
4
5
6
7
8
9
10
11
12
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關鍵字并不是沒生效,而是本身就不存在。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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關鍵字會過濾一條數據。

?
1
2
3
4
5
6
7
8
9
10
11
12
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的整數 ,如果傳入負數和小數會報錯。

?
1
2
3
4
5
6
7
8
9
10
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表中的所有數據。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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可以跟兩個參數分別表示起始值和結束值,閉區間(包含起始值和結束值)。如果跟一個參數,則表示結束值,起始值默認為0。 注意MySQL數據的索引起始值為0。

limit 2 , 4表示查詢第三條數據到第五條數據,其行號為2到4。

?
1
2
3
4
5
6
7
8
9
10
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使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7028741334898835464

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎国产成人亚洲精品 | 96萝莉 | 视频免费观看在线播放高清 | 9久re热视频这里只有精品 | 成人高辣h视频一区二区在线观看 | 天天做天天玩天天爽天天 | 99久久免费国产精品热 | 国产成人亚洲精品乱码在线观看 | 动漫人物差差差动漫人物免费观看 | 国产情侣视频观看 | free性日本| 亚洲国产日韩制服在线观看 | 丝瓜香蕉视频 | 国产99视频精品免费视频7 | 日本动漫啪啪动画片mv | 国产一区二区三区久久小说 | 亚洲精品国产在线观看 | 亚欧成人中文字幕一区 | 黑人女性猛交xxxxxⅹxx | yjsp妖精视频在线观看免费 | 国内精品久久久久影院男同志 | 美女把腿开让我 | 免费观看国产精品 | h日本漫画全彩在线观看 | 手机看片自拍自自拍日韩免费 | 成人曼画 | 日本免费一区二区三区a区 日本免费三片在线观看 | 91亚洲精品丁香在线观看 | 久久精品亚洲国产AV涩情 | 午夜精品久久久内射近拍高清 | 国产一级黄毛片 | 2020国产精品永久在线观看 | 91频视| 99热这里只有精品免费 | 男人综合网 | youzljzljzljzlj96 | 国产老熟| 韩国三级理韩国三级理人伦 | 欧洲一级黑寡妇 | 欧美性f | 免费看成人毛片日本久久 |