分组查询和连接查询
Posted 爱编程的羔羊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组查询和连接查询相关的知识,希望对你有一定的参考价值。
一.分组查询
1.多字段分组
使用group by语句
例子:select company 公司 , number 营运车辆数 , truncate(avg(miles),1) 平均营运里程
from line
group by company, number
2.使用having聚合函数在分组之后筛选表条件
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据。having 子句的位置放在 group by 子句之后,常包含聚合函数。
例子·:select company 公司 , max(miles) 最长线路里程
from line
group by company
having max(miles)>24
order by max(miles)
3.group by 子句的 with rollup 选项
group by 子句将结果集分为若干个组,使用聚合函数可以对每个组内的数据进行信息统计,有时对各个组进行汇总计算时,需要在分组
之后再加上一条汇总记录,这个任务可以通过 with rollup 选项来实现。
例子:select company 公司 , count(*) 线路数
from line
group by company with rollup
二.连接查询
1.内连接查询:
种类:交叉连接、相等连接和自然连接
(1)交叉连接(笛卡尔积)
交叉连接(Cross Join),又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”,它是所有类型的内连接的基础。
案例:select *
from line
join vehicle on line.lineID=vehicle.lineI
(2)自然连接
自然连接 (Natural Join) 是一种特殊的内连接,它要求相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。
语法:SELECT 字段名
FROM 表一 NATURAL JOIN 表二
[where 字段名]
示例:select *
from line natural join vehicle
where company=' 公交二公司 '
2.多表连接:
(1)三表查询与两表查询类似:
三表查询:
SELECT 字段名
FROM 表1 JOIN 表2 ON 表1.字段名1=表2.字段名2_1 JOIN 表3 on表2.字段名2_2=表3.字段名3
[where 字段名]
示例:
select name 司机姓名 , plateNo 车牌号 , model 型号 , lineNo 线路号 , from_station 起点站 , end_station 终点站
from vehicle V join Driver D on V.driverID=D.driverIDjoin line L on V.lineID=L.lineID
where type=' 非空调车 ';
两表查询:
SELECT 字段名
FROM 表1, 表2
WHERE 表1.字段名1=表2.字段名2 [and 其他条件]
3.外连接查询:
语法:SELECT 字段名称
FROM 表名 1 LEFT|RIGHT|FULL [OUTER] JOIN 表名 2ON 表名 1. 字段名 1= 表名 2. 字段名 2;
(1)左外连接(LEFT JOIN)
示例:
select name 司机姓名 , gender 性别 , phone 电话 , plateNo 车牌号 , model 型号 , lineNo 线路号 , from_station 起点站 , end_station 终点站
from driver D left join vehicle Von D.driverID=V.driverID left join line L on V.lineID=L.lineID
(2)右外连接(RIGHT JOIN)
示例:select name 司机姓名 , gender 性别 , phone 电话 , plateNo 车牌号 , model 型号 , lineNo 线路号 , from_station 起点站 , end_station 终点站
from driver D right join vehicle Von D.driverID=V.driverID right join line L on V.lineID=L.lineID
以上是关于分组查询和连接查询的主要内容,如果未能解决你的问题,请参考以下文章