分组查询与内外连接查询

一. 分组查询

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 课程名称 from Subject,Result
    where Subject.SubjectId=Result.SubjectId group by Subject.SubjectName order by 平均分

3.多列分组

--查询每学期男女同学的总人数
    select COUNT(*) as 学生人数,GradeId as 年级编号,Sex as 性别 from Student group by GradeId,Sex

4.使用having字句帮助group by进行分组条件筛选,注意:条件必须在聚合函数内或者查询的分组条件内

--查询学生总人数超过5人的年级
    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId having COUNT(*) >5

二. 内连接 inner join on

1.内连接可以不用区分表与表之间的顺序,但是要指定好关系
   2.内连接可以将inner省略
   3.通where语句效果相同

select stu.StudentName,res.StudentResult,res.SubjectId from Student as stu inner join Result as res on (stu.StudentNo=res.StudentNo)

4.在查询不同记录时,会将表与表中的记录数相乘然后减去相同的记录数

select stu.StudentName,res.StudentResult,res.SubjectId from Result as res  inner join Student as stu on (stu.StudentNo<>res.StudentNo)

例如:12*10-10

三. 外连接

1.左外连接 LEFT JOIN 左边的表作为主表

select StudentName,StudentResult,Student.StudentNo from Student LEFT JOIN Result on Student.StudentNo=Result.StudentNo

2.右外连接  RIGHT JOIN 右边的表作为主表

select StudentName,StudentResult,Student.StudentNo from Student RIGHT JOIN Result on Student.StudentNo=Result.StudentNo

原文地址:https://www.cnblogs.com/yjc1605961523/p/9380575.html

时间: 2024-07-29 09:45:08

分组查询与内外连接查询的相关文章

MySQL学习——SQL查询语句(连接查询&amp;子查询)(三)

一:连接查询: 连接查询是将俩个或者俩个以上的表按照某个条件连接起来,从中选择需要的数据,连接查询同时查询俩个或者俩个以上的表时使用,当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表,例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号,那么可以通过学生表中的course_id字段与课程表中的num字段来进行连接查询,连接查询包括内连接查询和外连接查询. 1.1 内连接查询 内连接查询是一种常用的连接查询,内连接查询可以查询俩个或者以上

003.分组统计查询和表连接查询

--分组统计查询 group by having 1 select 分组字段 ,聚合函数 2 having 后常跟聚合函数,也可以跟分组字段 3 where 后不可以直接跟聚合函数 4 where(筛选行) -group by (分组) -having (筛选组) --表连接查询 1 笛卡尔积 (交叉连接 cross join) a*b A) SELECT * FROM A,B B) SELECT * FROM A CROSS JOIN B 2 内连接 原理: 将两个表中关联字段相等的行查询出来

Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计

一.分组查询 1.语法:group by 分组字段1[,分组字段2,.........] [having 分组后的筛选条件]2.注意:分组字段应该与select后的查询字段一致,否则查询结果无意义3.分组查询经常会与聚合函数一起使用例:(1)先建一张商品表(以此表为例进行分组查询) (2)插入记录 (3)查询:#1.计算每一种商品单价的平均价格 查询结果:#2.计算日用品种类的平均价格 查询结果:二.连接查询1.等值连接语法:select 字段1,字段2,........ from 表A,表B,

【学亮开讲】Oracle内外连接查询20181119

--内连接查询 --需求:查询显示业主编号.业主名称.业主类型名称 select os.id 业主编号,os.name 业主名称,ot.name 业主类型名称 from t_owners os,t_ownertype ot where os.ownertypeid=ot.id --需求:查询显示业主编号.业主名称.地址和业主类型 select ow.id 业主编号,ow.name 业主名称,ad.name 地址,ot.name 业主类型 from t_owners ow,t_ownertype

菜鸟笔记——纠结的左外连接查询和右外连接查询

1.前言 外连接查询也是很基础的知识,可是我也花了几个小时才理解透.在本文不太过多用书本语言来描述,我会以自己的思维理解和描述该知识 2.引出  首先,连接查询的方法也有很多.但是有些知识点学了,我们必须清楚会在什么情况下用到. 例:查询没有参加考试的学生信息.  按常规的做法内连接查询是无法得到的,为什么?因为内连接查询时,数据结果集是匹配条件列相等的数据.如果某行数据匹配的列的值不相等,那么行 数据将不会显示.这时候就需要用到外连接查询. 3.什么是做表?什么是右表? 写在关键字Left j

有时候子查询比左连接查询速度快

最近几天在优化数据库,有些数据表因为建立时候不合理导致查询的时候速度比较慢,比如三个表,三个表中数据最少的都是十万条,这些表在左联或者右联的时候速度可能需要几秒钟,再加上where条件,条件中再加or,这时候速度是非常的慢的,往往需要10秒以上,这时候可以用子查询或者union 或者union all 代替,根据情况而定 比如这个语句用子查询速度就比较快 原来的语句: select K.EmployeeNumber, K.PositionName, K.Name, K.SkillWages, k

MySQL查询速度测试-&gt;连接查询

快速生成大量数据 INSERT INTO tableName1(pn_code,belong_id,factory_number) SELECT pn_code,belong_id,factory_number FROM tableName1 四张表合计4000万条数据, 如果不带where,联查的速度是非常快的,前提是需要带limit,limit越小越快, 如果联查后带where 筛选,速度会非常慢,所以大数据量下,有where根据实际情况,可以分批进行查询 下面附带记得函数和存储过程备用 1

将子查询改为连接查询

例:select * from score where event_id in(select event_id from grade_event where catagery='T'); 转换为简单的连接操作 select * from score whre event_id inner join grade_event on score_id=grade_eventId where catagery='T' union:默认情况下进行的是连接操作,默认情况union会去除掉重覆的语句行 uni

mysql查询、子查询、连接查询

mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默