SQL查询语句

AS用做别名,若别名中希望区分大小写,或其中包含空格,则必须用双引号引起来。

where语句如果比较的是字符或者日期类型必须用单引号引起来。数字则可以引起来和不引起来。

查询条件:>,<,>=,<=,!=,<>,= ,AND,OR,IN,Not IN,between.............and..............,is null,is not null

模糊查询:Like   其中%表示0到多个字符,_表示一个字符。例如:select job from emp where ename like '_lk%';

使用any和all提交必须和(>=,>,<,<=)配合使用。

>any:大于最小

<any:小于最大

>all:大于最大

<all:小于最小

例如:select name from emp where sal>any(4000,4500,5000)

查询条件中可以使用表达式和函数

distinct用于去掉重复的值。

排序:

order by column [asc|desc] 默认降序asc 升序排列,null值为最大。 注意多列排序时每个列都必须设置排序方式。order by deptno asc, sal desc;

聚合函数:将表中的全部数据划分为几组数据,每组数据统计出一个结果。(分组函数,多行函数,集合函数)

max()

min()

avg()

sum()

count()

聚合函数会忽略Null值,所以要与空值函数配合使用。例如:select avg(nvl(sal,0)) from emp

分组:

group by

having

order by

查询优化:

from从右到左,数据量少的表放到后面

where从右到左,将能过滤掉最大数量的记录条件写在where子句中的最右。

group by 从左到右,在group by 之前最好将不需要的记录过滤掉。

避免使用having

select 少用*号

关联查询:

笛卡尔积

等值连接:使用“=”连接相关的表

内连接:JOIN   ON 返回所有满足连接条件的记录。

外连接:有时候返回那些不满足连接条件的记录,需要使用到外连接。(Left、Right、Full JOIN........ON...........)

其中full全外连接,返回满足连接条件和不满足连接条件的所有其他行。

自连接:来源于一个表,关联关系为单个表中的多个列。

高级查询:

子查询:是嵌入在其他SQL语句中的Select语句,大部分出现在Where子句中。

根据返回结果的不同,子查询可以分为单行子查询、多行子查询及多列子查询。

例如:查找薪水比整个机构平均薪水高的员工。Select * from emp e where sal>(Select avg(sal) from emp);

如果子查询返回多行,主查询可以使用多行比较操作符包括IN、ALL、ANY。

例如:查询部门中有SALESMAN但是职位不是SALSMAN的员工信息。

Select * From emp where deptno IN (Select deptno From emp where job='SALESMAN') AND job <> 'SALEMAN';

Exists

例如:列出那些有员工的部门信息。Select * From deptno d  where exists(Select * From emp e where e.deptno=d.deptno);

子查询在Having子句中。例如:查询列出最低薪水高于部门30的最低薪水的部门信息。

Select * From dept d group by deptno having MIN(salary)>(Select salary from dept where deptno = 30);

子查询在From部分。

子查询在Select部分。可以认为是外连接的另一种表现形式。

Oracle的分页查询:

Rownum伪列,用于返回标识行数据顺序的数字。从1开始。

例子:利用Rownum截去结果集中的部分数据。Select * from(Select Rownum rn,e.* From emp e) Where rn Between 8 and 9;

Oracle的分页语句:Select * From (Select Rownum rn,e.* From e)t  Where t.rn Between ((n-1)*pageSize +1) AND (n*pageSize) ;

Decode函数:

Decode(expr,search1,result1[,result2][default]) 用于比较参数expr的值,如果匹配到哪一个search条件,就返回对应的result结果,如果没有匹配到返回default结果或null

例如:Select job ,name ,sal Decode(job,

                                                                    'MANAGER',sal*1.2,

                                                                    'SALESMAN',sal*1.5,

                                                                    sal

                                                                 )bonus

From emp ;

Case的功能和decode类似:

Select ename job case job

                                when 'MANAGER' then sal*1.2

                                when 'ANALYST' then sal*1.1

                                 ELSE sal END

                            bonus

From emp;

DECODE函数在分组查询中的应用,

一:按字段内容分组:例如:计算职位的人数,analyst/manager属于vip,其余属于operation

Select Decode(job,'ANALYST','vip','MANAGER','vip','operation') job, count(1) job_cn From emp group by Decode(job,'ANALYST','vip','MANAGER','vip','operation');

二:按字段内容排序:例如:Select * From dept Order By Decode(dname,'Operation','1','account','2');

排序函数:

Row_Number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序。

Rank() over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2给予等级标识。有重复值。

Rense_Rank() over( partition by col1 order by col2)不重复

集合操作:

UNION、UNION ALL、INTERSECT和MINUS

UNION合并,去重复记录,排序

UNION ALL 合并,不去重复,不排序

INTERSECT,交集

MINUS,差集

高级分组:

Rollup、Cube、Groupting sets运算符是GROUP By 子句的扩展。

例如:假设表test 有a、b、c      group by rollup(a,b,c)等价于group by a,b,c Union All group by a,b Union All group by a group by ..

例如:group by cube(a,b,c) 依次(a,b),(a,c),(b,c),(a),(b),(c),(a,b,c)

grouping sets可以生成与使用单个group by 、rollup或cube运算符所生成的结果集相同的结果集。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值