MySQL數(shù)據(jù)庫查詢排序方式
** 引言 **
對MySQL 數(shù)據(jù)庫的查詢,除了基本的查詢外,有時(shí)候需要對查詢的結(jié)果集進(jìn)行處理。
例如只取10條數(shù)據(jù)、對查詢結(jié)果進(jìn)行排序或分組等等。
一、按關(guān)鍵字排序
?使用select語句可以將需要的數(shù)據(jù)從 mysql 數(shù)據(jù)庫中查詢出來,如果對查詢的結(jié)果進(jìn)行排序操作,可以使用 order by 語句完成排序,并且最終將排序后的結(jié)果返回給客戶。
這個(gè)語句的排序不光可以針對某一個(gè)字段,也可以針對多個(gè)字段。
?select 字段 from 表名 order by 字段 ASC|DESC? ?ASC|DESC? ?ASC 是按照升序進(jìn)行排名的,是默認(rèn)的排序方式,即ASC可以省略? ?DESC 是按照降序的方式進(jìn)行排序的? ?order by 也可以通過 where 子句對查詢結(jié)果進(jìn)行進(jìn)一步的過濾? ?可進(jìn)行多字段的排序
** 創(chuàng)建一個(gè)新的表 **
1.1 單字段排序
原表內(nèi)容
1.1.1 按分?jǐn)?shù)排序,默認(rèn)不指定是升序排序
select * from CS order by score; (asc默認(rèn)省略)
1.1.2 按分?jǐn)?shù)降序排序
select * from CS order by score desc;
結(jié)合where進(jìn)行條件過濾,篩選地址是nanjing的學(xué)生按分?jǐn)?shù)升序排列
select * from CS where address='nanjing' order by score;
1.2 多字段排序
ORDER BY 語句也可以使用多個(gè)字段來進(jìn)行排序,當(dāng)排序的第一個(gè)字段相同的記錄有多條的情況下,這些多條的記錄再按照第二個(gè)字段進(jìn)行排序,ORDER BY 后面跟多個(gè)字段時(shí),字段之間使用英文逗號(hào)隔開,優(yōu)先級(jí)是按先后順序而定,但order by 之后的第一個(gè)參數(shù)只有在出現(xiàn)相同值時(shí),第二個(gè)字段才有意義。
1.2.1 查詢學(xué)生信息先按興趣id升序排列,相同分?jǐn)?shù)的,id按降序排列
select * from CS order by hobbid,id desc;
1.2.2 查詢學(xué)生信息先按興趣id升序排列,相同分?jǐn)?shù)的,id按升序排列
select * from CS order by hobbid,id;
1.3 區(qū)間判斷及查詢不重復(fù)記錄
1.3.1 AND/OR ——且/或的使用
select * from CS where id>2 and id<5; select * from CS where id>2 or id<5;
1.3,2 嵌套/多條件
select * from CS where id>2 or (id>3 and id <5); select * from CS where score <70 or (score >70 and score <100);
查看分?jǐn)?shù)大于70 小于等于95的數(shù)據(jù)
select * from CS where score > 70 and score <=90;?
查看分?jǐn)?shù)小于70 或者大于90的數(shù)據(jù),按降序顯示
select * from CS where score < 70 or score >90 order by score desc;
1.4 distinct 查詢不重復(fù)記錄
select distinct 字段 from 表名﹔
- distinct 必須放在最開頭
- distinct 只能使用需要去重的字段進(jìn)行操作
- distinct 去重多個(gè)字段時(shí),含義是:幾個(gè)字段同時(shí)重復(fù)時(shí)才能被過濾,會(huì)默認(rèn)按左邊第一個(gè)字段為依據(jù)。
1.4.1 查看hobbid有多少種
select distinct hobbid from CS;
二、對結(jié)果進(jìn)行分組
通過 SQL 查詢出來的結(jié)果,還可以對其進(jìn)行分組,使用 GROUP BY 語句來實(shí)現(xiàn) ,GROUP BY 通常都是結(jié)合聚合函數(shù)一起使用的,常用的聚合函數(shù)包括:計(jì)數(shù)(COUNT)、 求和(SUM)、求平均數(shù)(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分組的時(shí)候可以按一個(gè)或多個(gè)字段對結(jié)果進(jìn)行分組處理。
select 字段,聚合函數(shù) from 表名 (where 字段名(匹配) 數(shù)值) group by 字段名;
2.1 對hobbid進(jìn)行分組查詢
并顯示最大的id
select hobbid,max(id) from CS group by hobbid;
2.2 按hobbid相同的分組
計(jì)算相同得的個(gè)數(shù)
select count(name),hobbid from CS group by hobbid;
2.3 結(jié)合where語句
篩選分?jǐn)?shù)大于等于80的分組,計(jì)算學(xué)生個(gè)數(shù)
select count(name),score from CS where score > 80 group by score;
班同學(xué)成績表 count(name):計(jì)數(shù) score 分?jǐn)?shù) : score>=80 :優(yōu)秀 score >=60 and score <80 :優(yōu) 結(jié)合order by把分?jǐn)?shù)按降序排列 select count(name),score from gaojie where score > 80 group by score oeder by score desc;
三、限制結(jié)果條目
limit 限制輸出的結(jié)果記錄
在使用 MySQL SELECT 語句進(jìn)行查詢時(shí),結(jié)果集返回的是所有匹配的記錄(行)。
有時(shí)候僅 需要返回第一行或者前幾行,這時(shí)候就需要用到 LIMIT 子句
select 字段 from 表名 limit [offset,] number limit 的第一個(gè)參數(shù)是位置偏移量(可選參數(shù)),是設(shè)置 mysql 從哪一行開始 如果不設(shè)定第一個(gè)參數(shù),將會(huì)從表中的第一條記錄開始顯示。 第一條偏移量是0,第二條為1 offset 為索引下標(biāo) number 為索引下標(biāo)后的幾位
3.1 查詢所有信息顯示前4行記錄
select * from CS limit 4;
3.2 從第4行開始
往后顯示3行內(nèi)容
select * from CS limit 3,3;
3.3 結(jié)合order by語句
按id的大小升序排列顯示前四行
select * from CS order by id limit 4;
四 、設(shè)置別名(alias ——》as)
在 mysql 查詢時(shí),當(dāng)表的名字比較長或者表內(nèi)某些字段比較長時(shí),為了方便書寫或者多次使用相同的表,可以給字段列或表設(shè)置別名, 方便操作,增強(qiáng)可讀性。
列的別名 select 字段 as 字段別名 表名 表的別名 select 別名.字段 from 表名 as 別名 as 可以省略
使用場景:
1、對復(fù)雜的表進(jìn)行查詢的時(shí)候,別名可以縮短查詢語句的長度
2、多表相連查詢的時(shí)候(通俗易懂、減短sql語句)
4.1 查詢gaojie表的記錄數(shù)量
以number顯示
select count(*) as number from CS;
4.2 AS 還可以作為連接語句的操作符
創(chuàng)建tab1表,將info表的查詢記錄全部插入t1表
create table CS1 as select * from CS;
此處AS起到的作用:
1、創(chuàng)建了一個(gè)新表t1 并定義表結(jié)構(gòu),插入表數(shù)據(jù)(與info表相同)
2、但是”約束“沒有被完全”復(fù)制“過來 #但是如果原表設(shè)置了主鍵,那么附表的:default字段會(huì)默認(rèn)設(shè)置一個(gè)0
相似:
克隆、復(fù)制表結(jié)構(gòu)
create table t1 (select * from info); #也可以加入where 語句判斷 create table test1 as select * from info where score >=60;
在為表設(shè)置別名時(shí),要保證別名不能與數(shù)據(jù)庫中的其他表的名稱沖突。
列的別名是在結(jié)果中有顯示的,而表的別名在結(jié)果中沒有顯示,只在執(zhí)行查詢時(shí)使用。
總結(jié)
介紹了一些高階語句在數(shù)據(jù)表或者數(shù)據(jù)庫里面的用法,查東西更方便。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL Slave 觸發(fā) oom-killer解決方法
這篇文章主要介紹了MySQL Slave 觸發(fā) oom-killer解決方法,需要的朋友可以參考下2016-07-07詳解數(shù)據(jù)庫_MySQL: mysql函數(shù)
這篇文章主要介紹了數(shù)據(jù)庫_MySQL: mysql函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03