MySQL 數(shù)據(jù)的查詢

查詢的基本語法

select * from 表名;
SELECT [ALL|DISTINCT] <目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…
  FROM <表名或視圖名>[,<表名或視圖名>]…
  [WHERE <條件表達(dá)式>]
  [GROUP BY <列名> [HAVING <條件表達(dá)式>]]
  [ORDER BY <列名> [ASC|DESC]…]

select distinct *
from 表名
where ....
group by ... having ...
order by ...

limit star,count

from關(guān)鍵字后面寫表名,表示數(shù)據(jù)來源于是這張表
select后面寫表中的列名疗我,如果是*表示在結(jié)果中顯示表中所有列
在select后面的列名部分,可以使用as為列起別名,這個別名出現(xiàn)在結(jié)果集中

SELECT 字段名1 [AS] 別名 [,字段名1 AS 別名]… FROM <表名>

如果要查詢多個列屿岂,之間使用逗號分隔

在select后面列前使用distinct可以消除重復(fù)的行

select distinct gender from students;
  • 準(zhǔn)備數(shù)據(jù)
    1.創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表
    2.插入基本數(shù)據(jù)
drop table if exists  student;
-- 創(chuàng)建學(xué)生表
CREATE  TABLE  student (
    id  INT  PRIMARY KEY  ,
    name  VARCHAR(20)  NOT NULL ,
    sex  VARCHAR(1)  ,
    birth  YEAR,
    department  VARCHAR(20) ,
    address  VARCHAR(50) 
);
-- 創(chuàng)建分?jǐn)?shù)表
drop table if exists score;
CREATE  TABLE  score (
    id  INT  PRIMARY KEY  AUTO_INCREMENT ,
    stu_id  INT(10)  NOT NULL ,
    c_name  VARCHAR(20) ,
    grade  INT(10)
);
-- 向student表插入記錄的INSERT語句如下:
INSERT INTO student VALUES( 901,'張老大', '男',1985,'計算機(jī)系', '北京市');
INSERT INTO student VALUES( 902,'張老二', '男',1986,'中文系', '北京市');
INSERT INTO student VALUES( 903,'張三', '女',1990,'中文系', '湖南省');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英語系', '遼寧省');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英語系', '福建省');
INSERT INTO student VALUES( 906,'王六', '男',1988,'計算機(jī)系', '湖南省');
-- 向score表插入記錄的INSERT語句如下:
INSERT INTO score VALUES(NULL,901, '計算機(jī)',98);
INSERT INTO score VALUES(NULL,901, '英語', 80);
INSERT INTO score VALUES(NULL,902, '計算機(jī)',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '計算機(jī)',70);
INSERT INTO score VALUES(NULL,904, '英語',92);
INSERT INTO score VALUES(NULL,905, '英語',94);
INSERT INTO score VALUES(NULL,906, '計算機(jī)',90);
INSERT INTO score VALUES(NULL,906, '英語',85);

簡單查詢
-- 查詢所有的列
select * from student;
-- 查詢部分列
select name,department,address from student;
查詢結(jié)果
查詢部分列

條件

使用where子句對表中的數(shù)據(jù)篩選,結(jié)果為true的行會出現(xiàn)在結(jié)果集中
語法如下:
select * from 表名 where 條件;

運(yùn)算符:

運(yùn)算符 描述
= 等于
<> 或 != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某個范圍內(nèi)
LIKE 搜索某種模式

關(guān)于BETWEEN和LIKE鲸匿,專門拿出來重點(diǎn)說下

模糊查詢 LIKE

LIKE關(guān)鍵字與通配符一起使用

通配符 描述
% 替代一個或多個字符
_ 僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]
或者[!charlist]
不在字符列中的任何單一字符
-- 查詢姓氏為張的學(xué)生信息
SELECT id,name,address FROM student WHERE name LIKE '張%'
-- 查詢名字最后一個為“生”的同學(xué)
SELECT id,name,address FROM student WHERE name LIKE '%生'
-- 查詢名字中含有“生”的學(xué)生信息
SELECT id,name,address FROM student WHERE name LIKE '%生%'
-- 查詢姓名為兩個字雁社,且姓張學(xué)生信息
SELECT id,name,address FROM student WHERE name LIKE '張_'
-- 查詢姓氏為張、李的學(xué)生信息這個可以使用or關(guān)鍵字晒骇,但是使用通配符更簡單高效
SELECT id,name,address FROM student WHERE name LIKE '[張李]%'
-- 查詢姓氏非張霉撵、李的學(xué)生信息
-- 這個也可以使用NOT LIKE 來實現(xiàn),用下面方法更好洪囤。
SELECT id,name,address FROM student WHERE name LIKE '[^張李]%'
-- 或者:
SELECT id,name,address FROM student WHERE name LIKE '[!張李]%'
查詢結(jié)果

范圍查詢 BETWEEN

  • between ... and ...表示在一個連續(xù)的范圍內(nèi)
select * from score
where grade between 60 and 80;
分?jǐn)?shù)在60~80之間的數(shù)據(jù)
  • IN 操作符允許我們在 WHERE 子句中規(guī)定多個值徒坡。表示:在哪些值當(dāng)中。
    in表示在一個非連續(xù)的范圍內(nèi)
-- 查詢計算機(jī)瘤缩,英語的成績
select * from score
where c_name in ('計算機(jī)','英語');
計算機(jī)喇完,英語的成績

邏輯運(yùn)算符

  • AND 在 WHERE 子語句中把兩個或多個條件結(jié)合起來。表示和的意思剥啤,多個條件都成立锦溪。
-- 查詢姓張的男同學(xué)信息
SELECT name,sex FROM student WHERE sex='男' AND Name LIKE '張%'
  • OR可在 WHERE 子語句中把兩個或多個條件結(jié)合起來「樱或關(guān)系刻诊,表示多個條件,只有一個符合即可牺丙。
-- 查詢姓氏為張则涯、李的學(xué)生信息
SELECT * FROM student WHERE Name LIKE '張%' OR Name LIKE '李%'
  • NOT對于條件的否定,取非冲簿。
-- 查詢非張姓氏的學(xué)習(xí)信息
SELECT * FROM Students WHERE Name NOT LIKE '張%'

空判斷

注意:null與''是不同的
判空is null

-- 查詢沒有填寫地址的學(xué)生
select * from student where address is null;

判非空is not null

-- 查詢填寫了地址的學(xué)生
select * from students where address is not null;
-- 查詢填寫了地址的女生
select * from students where address is not null and sex='女';

聚合函數(shù)查詢

聚合函數(shù):是一個值的集合為輸入粟判,返回單個值的函數(shù)。
SQL預(yù)定義了5個聚集函數(shù):AVG(平均值)峦剔、MIN(最小值)档礁、MAX(最大值)、SUM(求和)吝沫、COUNT(計數(shù))呻澜。
具體的數(shù)據(jù)庫還會預(yù)定義一些其他常用的函數(shù),比如字符串相聚合函數(shù)野舶、時間聚合函數(shù)……易迹。

-- 查詢學(xué)生總數(shù)
select count(id) from student;
-- 分?jǐn)?shù)那一列的求和,最大值平道,最小值,平均值
select sum(grade),max(grade),min(grade),avg(grade) from score;
統(tǒng)計結(jié)果

分組查詢

按照字段分組供炼,表示此字段相同的數(shù)據(jù)會被放到一個組中
分組后一屋,只能查詢出相同的數(shù)據(jù)列窘疮,對于有差異的數(shù)據(jù)列無法出現(xiàn)在結(jié)果集中
可以對分組后的數(shù)據(jù)進(jìn)行統(tǒng)計,做聚合運(yùn)算
語法:
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...

-- 查詢各城市人數(shù)
select address as 家鄉(xiāng),count(*)
from student
group by address ;
分組后的數(shù)據(jù)篩選

語法:
select 列1,列2,聚合... from 表名
group by 列1,列2,列3...
having 列1,...聚合...;

having后面的條件運(yùn)算符與where的相同

對比where與having
where是對from后面指定的表進(jìn)行數(shù)據(jù)篩選冀墨,屬于對原始數(shù)據(jù)的篩選
having是對group by的結(jié)果進(jìn)行篩選

注意:分組之后闸衫,只能查詢被分組的列和聚合函數(shù)

-- having后面的條件運(yùn)算符與where的相同
-- 查詢男生總?cè)藬?shù)
-- 方案一
select count(*)
from student
where sex='男';
-- 方案二
select sex as 性別,count(*)
from student
group by sex 
having sex ='男';
Paste_Image.png

排序

為了方便查看數(shù)據(jù),可以對數(shù)據(jù)進(jìn)行排序
語法:

select * from 表名
order by 列1 asc|desc,列2 asc|desc,...

將行數(shù)據(jù)按照列1進(jìn)行排序诽嘉,如果某些行列1的值相同時蔚出,則按照列2排序,以此類推
默認(rèn)按照列值從小到大排列
asc從小到大排列虫腋,即升序
desc從大到小排序骄酗,即降序
除了制定某個列排序外,還能指定多列排序悦冀,每個排序字段可以制定排序規(guī)則
說明:優(yōu)先第一列排序趋翻,如果第一列相同,則按照第二列排序規(guī)則執(zhí)行盒蟆,以此類推踏烙。

-- 排序
select * from score 
order by grade;

select * from score 
order by grade asc;

select * from score  
order by grade desc;

分頁

當(dāng)數(shù)據(jù)量過大時,在一頁中查看數(shù)據(jù)是一件非常麻煩的事情
語法

select * from 表名
limit start,count```
從start開始历等,獲取count條數(shù)據(jù)
start索引從0開始

-- 分頁
-- 每頁顯示2條(pageSize)讨惩,要第4頁(pageNow) limit (pageNow-1)*pageSize,pageSize
select * from score
order by id
limit 0,3;

select * from score
order by id
limit 6,2;

####小結(jié)
完整的select語句

select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit star,count
執(zhí)行順序為:
from 表名
where ....
group by ...
having ...
order by ...
limit star,count

實際使用中,只是語句中某些部分的組合寒屯,而不是全部
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末步脓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浩螺,更是在濱河造成了極大的恐慌靴患,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件要出,死亡現(xiàn)場離奇詭異鸳君,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)患蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門或颊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人传于,你說我怎么就攤上這事囱挑。” “怎么了沼溜?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵平挑,是天一觀的道長。 經(jīng)常有香客問我,道長通熄,這世上最難降的妖魔是什么唆涝? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮唇辨,結(jié)果婚禮上廊酣,老公的妹妹穿的比我還像新娘。我一直安慰自己赏枚,他們只是感情好亡驰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饿幅,像睡著了一般凡辱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诫睬,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天煞茫,我揣著相機(jī)與錄音,去河邊找鬼摄凡。 笑死续徽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亲澡。 我是一名探鬼主播钦扭,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼床绪!你這毒婦竟也來了客情?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤癞己,失蹤者是張志新(化名)和其女友劉穎膀斋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痹雅,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仰担,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绩社。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔蓝。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愉耙,靈堂內(nèi)的尸體忽然破棺而出贮尉,到底是詐尸還是另有隱情,我是刑警寧澤朴沿,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布猜谚,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏龄毡。R本人自食惡果不足惜吠卷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一锡垄、第九天 我趴在偏房一處隱蔽的房頂上張望沦零。 院中可真熱鬧,春花似錦货岭、人聲如沸路操。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屯仗。三九已至,卻和暖如春搔谴,著一層夾襖步出監(jiān)牢的瞬間魁袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工敦第, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峰弹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓芜果,卻偏偏與公主長得像鞠呈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子右钾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容