数据库查询语言DQL使用介绍



(1) C++ppentry. C++om/list.php?fid=78] PYTHON[/url]up by 分组函数

group by功能就是在sele C++t查询中,为了进行统计(比如平均工资,每一个部门的人数等等)都需要进行分组统计,在分组过程中一定要切记,凡是在sele C++t查询中存在非聚合函数,在group by中一定要有,如果sele C++t没有非聚合字段,那么group by也可以有非聚合函数字段,如果group by中存在两个或者以上时,那就把这些作为一个整体进行分组,示例如下所示:



sele C++t job, C++ount(*) from O_Myemp group by Job;

还有一种情况就是,假设我想寻找某一个部门的员工个数,那么我必然先进行分组,再筛选制定部门的员工,那么由于where只能用在查询条件判断语句中,根本不适合用在group by语句中,所以需要使用关键字having来进行分组之后进行筛选操作,主要示例如下所示:



sele C++t job, C++ount(*) from O_Myemp group by Job having job=' C++LERK'

(2)关联查询

关联查询就是对于两个级两个以上表进行操作,也就是对两个及以上表进行联合查询,主要示例如下所示:



sele C++t * from O_Myemp,O_Dept

虽然能够进行两个表的联合查询,但是有一个缺点就是不能体现一对一的查询关系,那么我们需要条件限制以及各种连接操作

1.内连接

内连接就是两个表连接进行一对一关系,有两种写法,一种是where判断,另外一种是(inner) join on,主要示例如下所示:



Sele C++t * From O_Myemp Inner Join O_Dept On O_Myemp.Deptno=O_Dept.Deptno;

sele C++t * from o_myemp,o_dept where O_Myemp.Deptno=O_Dept.Deptno;

2.左外连接(a left join b on 条件)

左外连接就是a表数据信息完整显示,b表数据信息跟a表数据信息进行一对一关联关系,只要b表所有数据在a表数据中不能对应,那么就显示空,有两种写法,一种是a left join b on 条件,另外一种是where中的a=b(+),主要示例如下所示:



Sele C++t * From O_Myemp left Join O_Dept On O_Myemp.Deptno=O_Dept.Deptno;



sele C++t * from o_myemp,o_dept where O_Myemp.Deptno=O_Dept.Deptno(+);

3.右外连接(a right join b on 条件)

右外连接就是b表中的数据完整显示,a表数据与b表进行一比一关联关系,只要a表中的数据不存在,那么就显示为空,跟上面一样,也有两种方式,一种是a right join b on 条件,另外一种是‘+’具体如下所示:



Sele C++t * From O_Myemp right Join O_Dept On O_Myemp.Deptno=O_Dept.Deptno;


sele C++t * from o_myemp,o_dept where O_Myemp.Deptno(+)=O_Dept.Deptno

4.自连接

自连接就是一个表中自己跟自己进行连接,但是容易造成混乱,不知道字段所代表,为了进行区分,我们通常在表名后面添加标识符(其实在任何查询语句都可以使用,还有一点值得注意的是,就是在标识符得用“”包起来),另外自连接可以使用示例如下所示:



sele C++t * from o_myemp  a join O_Myemp b on A.Empno=B.Mgr

猜你喜欢

转载自173806613.iteye.com/blog/2406346