数据库-04

 

--聚合函数:

返回一个值,对表中所有行进行统计,忽略NULL值

--sum:求和(只能数字类型)

select sum(age) from stuInfo

--avg:平均值(只能数字类型)

select avg(age) from stuInfo

--max:最大值(只能数字类型或者是字符串)

select max(name) from stuInfo

--min:最小值(只能数字类型或者是字符串)

select min(age) from stuInfo

--count:总个数---获取表总行数使用count(*),count(主键)

select count(id) from stuInfo   --建议使用

select count(*) from stuInfo

分组

分组使用group by 关键字

分组后如果有条件的话就要使用having关键字

条件就写在having后面

Having后面的筛选一般用聚合函数

group by使用说明:

1.select后面出现的列(除了聚合函数中的列)

  必须包含在group by中

2.where是对分组之前数据做筛选,having是对分组之后数据做筛选

  where后面一般对某个列做操作,having后面一般对聚合函数做操作

  若同时出现,必须遵守顺序:where...group by...having

表链接(联合查询)

--内联接(inner join)

--获取两个表的共有的数据

--工作原理:一个表的一行匹配另一个表的所有行(类似于双层for循环)

select name,s.stuId,labExam

from student s

inner join marks m

on s.stuId=m.stuId

 

select name,s.stuId,labExam

from student s

join marks m

on s.stuId=m.stuId

 

select name,s.stuId,labExam

from student s

inner join marks m

on 1=1    --相当于没有条件

 

--左外联接(left [outer] join)

--获取两个表共有的数据以及左表的其余数据

--工作原理同内联接

--在select查询列表中,显示关联键时,建议写成---左表.主键

select *

from student s

left outer join marks m

on s.stuId=m.stuId

 

select name,s.stuId,labExam

from student s

left join marks m

on s.stuId=m.stuId

 

select name,m.stuId,labExam

from student s

left join marks m

on s.stuId=m.stuId

 

--右外联接(right [outer] join)

--获取两个表共有的数据以及右表的其余数据

--工作原理同内联接

--在select查询列表中,显示关联键时,建议写成---右表.主键

select name,s.stuId,labExam

from marks m

right join student s

on m.stuId=s.stuId

 

select name,s.stuId,labExam

from marks m

right outer join student s

on m.stuId=s.stuId

 

--完整外联接(full [outer] join)--不要求(用得少)

--返回两个表的所有数据(共有数据,左表其余数据,右表其余数据)

select name,s.stuId,labExam

from student s

full join marks m

on s.stuId=m.stuId

 

--交叉联接(cross join)--不要少(用得少)

--左表一条匹配右表所有条,相当于没有条件的内联接

--工作原理同内联接

select *

from student s

cross join marks m

 

select * from student

select * from marks

 

--表联接有额外条件

--方式一:on后写where

select name,s.stuId,labExam

from student s

inner join marks m

on s.stuId=m.stuId

where labExam>=60

 

--方式二:on后直接跟and

select name,s.stuId,labExam

from student s

inner join marks m

on s.stuId=m.stuId

and labExam>=60

 

posted on 2014-05-28 21:08  李鹏周  阅读(159)  评论(0编辑  收藏  举报