1. 程式人生 > >MySQL資料庫(十二)2018.11.16

MySQL資料庫(十二)2018.11.16

可以通過order by對查詢結果進行排序:升序和降序

order by 欄位名稱 asci|desc;

這個功能也是很常用的,比如我們在商城中按照價格對商品進行一個排序。

想實現這樣一個排序功能,就可以通過order by來進行一個排序

#測試排序
#按照id降序排序
SELECT id,username,age
FROM user1
ORDER BY id DESC;
#預設是降序

#按照age升序
SELECT  id username,age
FROM user1
ORDER BY age;
#預設升序

按多個欄位排序,如果第一個欄位已經把序排出來了,就不用第二個欄位了

#按照多個欄位排序
SELECT id,username,age
FROM user1
ORDER BY age ASC,id ASC;

#測試條件+排序
SELECT id,username,age
FROM user1
WHERE age>=30
ORDER BY age DESC;
#年齡由大到小排序

實現隨機記錄:

#實現隨機記錄
SELECT id,username,age
FROM user1
ORDER BY RAND();
#每次重新整理的結果排序結果都不一樣

select中用到的最後一個篩選條件就是limit,limit語句限制結果集的顯示條數,有了它以後,其實就可以實現我們的分頁效果。

想實現分頁顯示的結果核心就是limit語句。

1.limit+值:的作用就是顯示結果集的前幾條記錄。

2.limit offset,row _count:從offset開始,顯示幾條記錄。

什麼是結果集呢?

就是我們的查詢語句查詢出來的結果,我們就叫做一個結果集。

#測試limit語句
#顯示結果集中的前五條記錄
SELECT id,username,age,sex
FROM user1
#顯示結果集的前5條記錄
LIMIT 5;

偏移量offset預設從0開始

#顯示三條
SELECT id,username,age,sex
FROM user1
LIMIT 0,3;

#顯示下三條
SELECT id,username,age,sex
FROM user1
LIMIT 3,3;

#刪除前三條記錄
DELETE FROM user1
LIMIT 3;

#按照id降序排列,更新前三條記錄,將age-10
UPDATE user1 SET age=age-10 ORDER BY id DESC LIMIT 3;

#刪除前三條記錄
DELETE FROM user1
LIMIT 3;

成功之後再查詢一下,只會少三條記錄。

接下來我們把這個資料表清空一下。

INSERT user1 VALUES(1,'king',23,'男','北京',1,50000,NULL);
INSERT user1(id,username,age,sex,addr,married,salary,userDesc)VALUES(DEFAULT,'queen',27,'女','上海',0,25000,NULL);
INSERT user1 SET username='imooc',age=31,sex='女',addr='北京',salary=40000;
INSERT user1 VALUES(NULL,'張三',38,'男','上海',0,15000,NULL),
(NULL,'張三風',38,'男','上海',0,15000,NULL),
(NULL,'張子怡',39,'女','北京',1,85000,NULL),
(NULL,'汪峰',42,'男','深圳',1,95000,NULL),
(NULL,'劉德華',58,'男','廣州',0,115000,NULL),
(NULL,'吳亦凡',28,'男','北京',0,75000,NULL),
(NULL,'奶茶妹',18,'女','北京',1,65000,NULL),
(NULL,'劉嘉玲',36,'女','廣州',0,15000,NULL);

DROP TABLE user1;
#測試查詢操作
#那麼我們以後的測試就用這個表來測試了
CREATE TABLE user1(
	id INT UNSIGNED AUTO_INCREMENT KEY,
	username VARCHAR(20) NOT NULL UNIQUE COMMENT '姓名',
	age TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年齡',
	sex ENUM('男','女','保密')NOT NULL DEFAULT '保密' COMMENT '性別',
	addr VARCHAR(20) NOT NULL DEFAULT '北京',
	married TINYINT(1)NOT NULL DEFAULT 0 COMMENT '0代表未婚,1代表已婚',
	salary FLOAT(8,2)NOT NULL DEFAULT 0 COMMENT '薪水'

)ENGINE=INNODB CHARSET=utf8;
INSERT user1 VALUES(1,'king',23,'男','北京',1,50000);
INSERT user1(username,age,sex,addr,married,salary)VALUES('queen',27,'女','上海',0,25000);
INSERT user1 SET username='imooc',age=31,sex='女',addr='北京',salary=40000;
INSERT user1 VALUES(NULL,'張三',38,'男','上海',0,15000),
(NULL,'張三風',38,'男','上海',0,15000),
(NULL,'張子怡',39,'女','北京',1,85000),
(NULL,'汪峰',42,'男','深圳',1,95000),
(NULL,'劉德華',58,'男','廣州',0,115000),
(NULL,'吳亦凡',28,'男','北京',0,75000),
(NULL,'奶茶妹',18,'女','北京',1,65000),
(NULL,'劉嘉玲',36,'女','廣州',0,15000);

#測試完整的select語句形式
SELECT addr,
GROUP_CONCAT(username)AS userDetail,
COUNT(*)AS totalUsers,
SUM(age)AS sum_age,
MAX(age)AS max_age,
MIN(age)AS min_age,
AVG(age)AS avg_age
FROM user1
WHERE id>=2
GROUP BY addr
#得到結果集之後,我想按照總人數升序的方式進行排序
ORDER BY totalUsers;
#升序你可以不寫

#測試完整的select語句形式
SELECT addr,
GROUP_CONCAT(username)AS userDetail,
COUNT(*)AS totalUsers,
SUM(age)AS sum_age,
MAX(age)AS max_age,
MIN(age)AS min_age,
AVG(age)AS avg_age
FROM user1
WHERE id>=2
GROUP BY addr
#對分組結果進行二次篩選
HAVING totalUsers>=2;

排序之後我們可以控制顯示結果集中的記錄個數。

實現了一個我們綜合的select語句。

#測試完整的select語句形式
SELECT addr,
GROUP_CONCAT(username)AS userDetail,
COUNT(*)AS totalUsers,
SUM(age)AS sum_age,
MAX(age)AS max_age,
MIN(age)AS min_age,
AVG(age)AS avg_age
FROM user1
WHERE id>=2
GROUP BY addr
#對分組結果進行二次篩選
HAVING totalUsers>=2
ORDER BY totalUsers ASC
LIMIT 0,2;