表连接和分组查询

分组查询:分组查询就是按某一列分组,相同的列合并,得到结果可能他少于总记录

使用group by
分组查询:按什么分(年级、姓氏、地址、年龄)年级

分组查询语法:
Select * from <表名>
Where 条件
Group by 列名

Group by后的列名必须在*里面出现

Demo:
Select GradeId
From Student
Group by GradeId

--统计每学期男女同学的人数 该怎么办
select GradeId as 编号,COUNT(Sex) as 总和
from Student
where Sex = ‘男‘
group by GradeId

select COUNT(*) as 人数,GradeId as 年级,Sex as 性别
from Student
group by Sex,GradeId

Group by 分组
Order by排序(默认asc)desc
倒须
select COUNT(*) as 人数,GradeId as 年级,Sex as 性别
from Student
group by Sex,GradeId
order by GradeId desc

需求3
如何获取人数超过人的年级
select COUNT(*) as 人数,GradeId as 年级
from Student
group by GradeId
having COUNT(*) > 23
分组筛选语句Hhaving
Having 子句对分组后的数据进行筛选,将“组”看做“列”来限定条件
语法:
Select * from <表名>
Where 条件
Group by 列名
Having 函数
Having用法与where 用法类似,有三点不同
Having只能用在Group by(分组统计用语句)
Where 是用于在初始表中筛选查询,having用在where和group by结果果你中查询
Having可以使用聚合函数,where不能

Where 和Having对比
Where子句
·····用来筛选from子句中指定的操作所产生的行
Gorup by子句
·····用来分组where子句的输出
Having子句
·····用来从分组的结果中筛选行
顺序:where Group by Having
Where :子句从数据源中去掉不符合搜索的数据
Group by:子句搜索数据行到各个组中
Having:子句去掉不符合搜索条件的各个数据行

如何从两张表中的到所需的数据
常用的多表连接查询
内连接通常使用“=”“<>”比较运算符来判断两个列的数值是否相等
使用inner join…on关键字或where子句来查询
内连接(inner join)
语法:select * select
From <表名> 等价 from <表名1,2,n>
Inner join 表1 =====》 where 条件
inner join 表n
On 连接条件

select Student.StudentName as 姓名,Grade.GradeName as 年级
from Student,Grade
where Student.GradeId = Grade.GradeId

select stu.StudentName as 姓名,g.GradeName as 年级
from Student stu
inner join Grade g
on stu.GradeId = g.GradeId

--三个表Student、Subject、Result
select s.StudentName as 姓名,r.StudentResult as 成绩,j.SubjectName as 科目
from Student s
inner join Result r on s.StudentNo = r.StudentNo
inner join Subject j on j.SubjectId = r.SubjectId

--where实现三个表的连查
select s.StudentName as 姓名,r.StudentResult as 成绩,j.SubjectName as 科目
from Student s,Result r,Subject j
where(s.StudentNo = r.StudentNo) and (r.SubjectId = j.SubjectId)

外链接
左外连接(left join)
右外链接(right join)

原文地址:https://www.cnblogs.com/SFHa/p/8283524.html

时间: 2024-10-11 12:58:20

表连接和分组查询的相关文章

MySQL多表查询之外键、表连接、子查询、索引

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep

mysql表连接,子查询以及if判断

创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2) DEFAULT NULL, deptno int(2) DEFAULT NULL, age int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE dept ( deptno int(2) DEFAULT NUL

ORACLE 多表连接与子查询

Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.column2; 说明: 在where子句中指定连接条件 当被连接的多个表中存在同名字段时,必须在该字段前加上"表名"作为前缀. 连接的类型 Oracle8i之前的表连接: 等值连接(Equijoin) 非等值连接(Non-Equijoin) 外连接(Outer join):-->左外连

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

注:本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两

sql表连接去重复查询

查询公司与公司最新刷新的一条信息 select t1.userid,t1.id,t1.title,t1.RegType,t1.Salary,t1.SubjectID,t1.RefreshTime,t2.name,t2.logo,t2.[address],t2.CreateTime from info t1 inner join companyinfo t2 on t1.userid=t2.id where t1.id in ( select top 1 info.id from info whe

连表查询和分组查询

表连接和分组链接 1.分组查询 01.分组查询是按某一列分组,相同的列合并,查询出结果 02.Group by 关键字 03.分组查询支持的条件: 001.年级 002.姓氏 003.地址 004.年龄 04.语法 select 列名 from 表明 where 条件 group by 列名 *group by中查询的列,必须出现在查询列中!!! *分组的顺序为由前到后 2.having 01.对分组后的数据进行筛选,将"组"看做"列"来限定条件 02.语法 sel

分组查询与内外连接查询

一. 分组查询 1.语法 SELECT ... FROM ... GROUP BY ... --分组查询Group by    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId 2.进行多表之间的分组查询 --查询每门课程的平均分    --where 和 group by 和 order by 的顺序    select AVG(StudentResult) as 平均分,SubjectName as 课

接连查询和分组查询

一. 分组查询 1.语法 SELECT ... FROM ... GROUP BY ... --分组查询Group by    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId 2.进行多表之间的分组查询 --查询每门课程的平均分    --where 和 group by 和 order by 的顺序    select AVG(StudentResult) as 平均分,SubjectName as 课

SQL Server三种表连接原理

http://msdn.microsoft.com/zh-cn/library/dn144699.aspx 简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种.理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述. 嵌套循环连接(Nested Loop J