exist count(1) left join 常用函数


select s.student_id,s.name,count(*)

from students,students_grade sg

where s.student_id=sg.student_id

group by s.student_id,s.name

having count(*)>1

order by s.student;

1.select 1 from table  增加临时列,每行的列值是写在select后的数,这条语句中是1

 注:exists(select 1 from table )只是看结果集是否存在,无关乎select后的数值是多少;

2.select  count(1) from table 不管count(a)a的值如何变化,得出来的始终都是table的行数;

3.select  sum(1) from table 计算临时列的和;

4.exists  :强调的是是否返回结果集,不要求知道返回什么

      exists:    sql返回的结果集为真

    not  exists:  sql返回的结果集不为真

------------------------------------------------------------------------------------------exists,not exists举例------------------------------------------------------------------

方法:按照exists的思路来写sql,最后再取not exists数据

如下:

表A:  ID    NAME

            1       A1

            2      A2

            3      A3

表B:    ID     AID    NAME

          1          1       B1

          2          2        B2

          3          2         B3

表A和表B的关系是一对多的关系  A.ID=>B.AID

SELECT ID,NAME  FROM A  WHERE EXISTS (SELECT  *FROM B   WHERE A.ID=B.AID)

执行结果为:

                   1    A1

                   2   A2

NOT  EXISTS   就是反过来

SELECT  ID,NAME  FROM A WHERE NOT EXISTS (SELECT *FROM B WHER A.ID=B.AID)

执行结果为:

                  3    A3

-------------------------------------------------------------------------------INNER JOIN ,LEFT LEFT JOIN -----------------------------------------------------------------------

内连接: A   inner join   B   表示取满足条件的A,B表中的共同条件数据;

外链接:   包括左外链接  left outer join   或者left join

                        右外链接  right  outer join 或者 right join

                        全外链接   full outer join  或者 full  join

                A   LEFT JOIN  B  :取A中的所有数据,满足条件的B中的部分数据,B中不满足条件的用空值填充;

               A   right join B   :    取B。。。。。。。。。。。。。A。。。。。。。A...........................................;

               A  full join   B   :  取A,B表满足条件的所有数据,包括填充的空值部分,等价于:

                                           A   LEFT JOIN  B

                                            UNION

                                          A   RIGHT  JOIN B;

------------------------------------------------------------------------------------常用函数------------------------------------------------------------------------------------------------------

1.concat(x,y)字符连接;

   instr (x,y,n,m):在x中查找y,n为查找的起始位置,m为Y中第几次出现的位置;

   lpad(x,n,y):在x的左边补充y字符,得到总长度为n个字符的字符串;

   nvl(x,y):x为空,返回y,否则返回x;

  nvl2(x,y,z):x不为空,返回y,否则返回z;

   substr(,n[m]):从第n个字符开始截取m个字符;

2、

rank()/ dense_rank()  over (partion by   e.deptno  order by e.sal   desc)  语法

over:在什么条件之上;

partion by :  按照什么字段分区,分类

oeder by e.sal  desc:按照工资从高到底进行排序

注意:使用rank()/dense_rank()时,必须要带order by,否则非法;

          over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用;

          带order  by的是连续求和/排名,不带oeder  by的是不连续的;

          rank():分级

整条语句的意思:在按照部门划分的基础上,按照工资的高低对雇员进行分级排序,级别由小到大的数值表示(最小值一定为1)

rank():跳跃排序,如果有两个第一级时,接下来就是第三极;

dense——rank():连续排序,如果有两个第一级时,接下来仍然是第二级;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值