收藏本站 收藏本站
積木網首頁 - 軟件測試 - 常用手冊 - 站長工具 - 技術社區
首頁 > 數據庫 > MySQL > 正文

首頁 - PHP - 數據庫 - 操作系統 - 游戲開發 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell編程 - DOS命令 - jQuery - CSS樣式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

詳解MySQL中的分組查詢與連接查詢語句

分組查詢 group by
group by 屬性名 [having 條件表達式][ with rollup]
“屬性名 ”指按照該字段值進行分組;“having 條件表達式 ”用來限制分組后的顯示,滿足條件的結果將被顯示;with rollup 將會在所有記錄的最后加上一條記錄,該記錄是上面所有記錄的總和。

1)單獨使用
group by 單獨使用,查詢結果只顯示一個分組的一條記錄。
實例:

select * from employee group by sex;

將只顯示男女兩條記錄。

2)與group_concat()函數一起使用
每個分組中指定字段值都顯示出來
實例:

select sex,group_concat(name) from employee group by sex;

顯示結果中“女”會顯示所有sex為“女”的名字name

sex | group_concat(name)
女 | 小紅,小蘭
男 | 張三,王五,王六

3)與集合函數一起使用
實例:

select sex,count(sex) from employee group by sex;

結果:

sex | count(num)
女 | 1
男 | 3

count()為計算個數的方法。

4)與having一起使用
“having條件表達式”,可以限制輸出結果。只有滿足條件表達式的結果才顯示。
實例:

select sex,count(sex) from employee group by sex having count(sex) >= 3;

結果:

sex | count(sex)
男 | 3

“having條件表達式”作用于分組后的記錄。

5)按多字段進行分組

select * from employee group by d_id,sex;

查詢結果先按d_id分組,再按sex進行分組

6) 與with rollup一起使用
使用with rollup將會在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和
實例:

select sex,count(sex) from employee group by sex with rollup;

結果:

sex | count(sex)
女 | 1
男 | 5
null | 6

如果是字符串的話,比如姓名就會生成“張三,李四,王五”這種類型的結果,即name總和。

連接查詢
將兩個及兩個以上的表連接起來選取所需數據。

1)內連接查詢:
當兩個表中具有相同意義的字段值相等時,就查詢出該條記錄。
實例:

select num,name,employee.d_id,age,d_name from employee,department where employee.d_id = department.d_id

因字段名相同,所以取d_id字段值時最好指定哪張表的字段。

2)外連接查詢
select 屬性名列表 from 表名1 left|right join 表名2 on 表名1.屬性名1=表名2.屬性名2;
左連接查詢:
進行左連接查詢時,可以查出表名1中所指的表中所有記錄。而表名2所指表中,只能查詢出匹配的記錄。
實例:

select num,name,employee.d_id,age,d_name from employee left join department on employee.d_id = department.d_id;

右連接查詢:
與左連接相反,可以查詢出表名2中的的所有記錄,而表名1中所指的表中,只查詢出匹配的記錄。


PS:使用集合函數查詢
集合函數包括count(),sum(),avg(),max()和min()。
1)count()函數
統計記錄條數
實例:

select count(*) from employee;

與group by一起使用

select d_id,count(*) from employee group by d_id;

上述語句會先分組后統計。

2) sum()函數
sum()函數是求和函數
實例:

select num,sum(score) from grade where num= 1001;

select num,sum(score) from grade group by num;

sum()只能計算數值類型字段。
3)avg()函數
avg()函數是求平均值函數。
實例:

select avg(age) from employee;

select course,avg(score) from group by course;

4)max(),min()函數
求最大值和最小值。
實例:
select max(age) from employee;
select num,course,max(score) from grade group by course;
對于字符串的最大值問題,max()函數是使用字符對應的ascii碼進行計算的。

linux下安裝升級mysql到新版本(5.1-5.7)
今天需要把linux服務器上的mysql版本從5.1更新到5.7,那么以下內容作為記錄,提供以后安裝使用手冊第一步:檢查linux的操作系統版本cat/etc/issue第二步:

MySQL備份時排除指定數據庫的方法
使用mysqldump命令備份時候,--all-databases可以備份所有的數據庫。使用ignore-table還可以排除制定的表。但是,mysqldump沒有參數可以排除數據庫的。要備份

Mysql數據庫之索引優化
MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經成為絕大多數互聯網公司的首選關系型數據庫。雖然性能出色,但所謂好馬配好鞍,如何能夠更

本周排行

更新排行

強悍的草根IT技術社區,這里應該有您想要的! 友情鏈接:b2b電子商務
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP備05050695號
上海时时乐基本走势综合版