天天看點

【資料庫】select、from、where、group by、having、order by、limit的組合用法

         select、from、where、group by、having、order by、limit組合用法

一、關鍵詞意義

【1】select 用來指定查詢哪些列,可以使用聚合函數。

【2】from 用來指定查詢哪張表。

【3】where用來指定過濾條件,針對原表,那麼條件中的列名隻能是是原表的列名,不可以是别名或者使用聚合函數。

【4】group by 用來對結果集進行分組,條件中的列可以使用原名,也可以使用别名。

【5】having 用來指定對分組後的資料進行再次過濾的條件,條件中的列可以使用原名,也可以使用别名。

【6】order by 對結果集中某一列進行排序,預設降序。有 asc 升序,desc 降序兩種選擇。條件中的列可以使用原名,也可以使用别名。

【7】limit 用來取出結果集中的某些行.limit m,n取出的是從第m+1行開始一共n行的資料。limit n相當于limit 0,n

oracle中傳回前10條資料不用limit,而是用where rownum<=10;

二、sql語句編寫順序

select .. from ..是必須的,其他的關鍵詞可選。

那麼他們的組合順序為

select ... from ..  where ... group by ... having ... order by ... limit ...

三、sql語句執行順序

【1】from 用于指定待查詢的表

【2】where 由where後面的送出過濾表中的資料,形成結果集1

【3】group by 由後面的列對結果集1中的資料進行分組,形成結果集2

【4】having 對結果集2再次進行過濾,形成結果集3

【5】order by 對結果集3進行排序操作,形成結果集4

【6】limit 取結果集4中的某些行,傳回最終結果集

四、一個簡單的例子

(1)資料庫建表語句

CREATE TABLE `t_score` (
  `sc_id` int(11) NOT NULL auto_increment COMMENT '自增序号',
  `sc_student_id` varchar(20) NOT NULL COMMENT '學号',
  `sc_student_name` varchar(20) NOT NULL COMMENT '姓名',
  `sc_course_name` varchar(50) NOT NULL COMMENT '課程名稱',
  `sc_course_credit` double(3,1) NOT NULL COMMENT '課程學分',
  `sc_course_nature` varchar(10) NOT NULL COMMENT '課程性質',
  `sc_score` varchar(10) NOT NULL COMMENT '總評成績',
  `sc_remark` varchar(20) default NULL COMMENT '備注',
  `sc_gpa` double(3,1) default NULL COMMENT '績點',
  `sc_make_up_score` varchar(10) default NULL COMMENT '補考成績',
  `sc_rebuild_score` varchar(10) default NULL COMMENT '重修成績',
  `sc_class_name` varchar(20) NOT NULL COMMENT '班級',
  `sc_class_belong` varchar(10) default NULL COMMENT '課程歸屬',
  `sc_rebuild_mark` int(11) default NULL COMMENT '重修标記',
  `sc_select_course_id` varchar(50) NOT NULL COMMENT '選課課号',
  `sc_edu_year` varchar(12) NOT NULL COMMENT '學年',
  `sc_edu_term` varchar(2) NOT NULL COMMENT '學期',
  `sc_academy_name` varchar(20) NOT NULL COMMENT '學生所屬學院',
  PRIMARY KEY  (`sc_student_id`,`sc_select_course_id`),
  KEY `sc_id` (`sc_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;      

(2)資料截圖,資料量還是比較大的,有15萬條資料。

【資料庫】select、from、where、group by、having、order by、limit的組合用法

(3)查詢嵌入式1511這個班級中,平均績點高于2.6前三位同學以及他們的平均績點

select sc_student_name as name,avg(sc_course_credit) as avg_credit from t_score where sc_class_name='嵌入式1511' group by name having avg_credit>2.6 order by avg_credit desc limit 0,3;      

查詢結果:

【資料庫】select、from、where、group by、having、order by、limit的組合用法

五、幾點注意

【1】count 

count(*)會傳回結果集中的所有行數,即使有一行全為null,也會參與行數計算。

count(列名)當列名出現null值時,不會參與行數計算。

select 課程類别 ,sum(人數) from 選課表 where 班級='嵌入式1511' group by 課程類别;      

繼續閱讀