2023-06-14 11:18

Oracle DQL语句

少尉

数据库

(208)

(0)

收藏

Select distinct ...from 表名 where 条件 group by 列名 having 条件 order by 列名 desc/asc

1、distinct去重

Select distinct name from student

结果中间不会出现重复的name

两行数据  相对应的列的值相同

2、条件

算术  + - * /

关系  >  <  >=  <=  !=  = 

逻辑   and  not  or

模糊查询  like  牛%  牛_

Between...and

Is null

3、集合

1)Union并集

Select ...

Union

Select ...

可以是不同的表  上下两条语句的查询结果的列数必须相同  相对应的 列的数据类型一致  第一条语句的查询结果为列名

会自动去掉重复行

2)Union all

不自动去重

3)Intersect

交集

4)Minus

差集

4、聚合函数

Sum avg max min count

5、Group by  分组查询

(1)一旦分组 只能查询聚合函数 或者分组的列名

Select 聚合函数,分组的列名  from 表名 group by 列名

(2)Where 条件 group by 列名 having 条件

where条件属于分组之前的条件

having条件属于分组之后的条件  是由聚合函数组成的条件

6、Order by 排序

desc降序  

Asc升序 可以省略

7、子查询

从一个表查询一个结果  以结果为条件  再查询

Select ... from ... where 列名 in (select 列名 from ....)

注意:子句只能查询一列

将查询结果 临时当成一个表

Select ... from (select ....)

With 名称 as

(select ...)

,名称 as

(select ...)

,.....

多表

Select ...,(select from 表名1 条件 ......) from 表名 2

8、多表关联

Select * from 表1,表2,表3,.... where 条件

特点:

每个表的数据显示的不一定完整

9、连接查询

(1)左  left join on  /  left outer join on

(2)右  right join on  /  right  outer  join on

(3)内  join on     / inner join on

(4)全 full join  on   /full  outer join  on

10、分页

MySQL:

Select .... Limit 起点,数量

Oralce:

对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回 的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询 返回的总行数,且rownum不能以任何表的名称作为前缀。

(1) rownum 对于等于某值的查询条件

如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条 件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不 到数据。因为rownum都是从1开始,但是1以上的自然数在rownum 做等于判断 是时认为都是false条件,所以无法查到rownum = n(n>1 的自然数)

SQL> select rownum,id,name from student where rownum=1;(可 以用在限制返回记录条数的地方,保证不出错,如:隐式游标)

(2) rownum对于大于某值的查询条件

如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录 的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为 rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录 

查找到第二行以后的记录可使用以下的子查询方法来解决。注意子查询中 的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum 不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列 还是主查询的列

SQL>select * from(select rownum no ,id,name from student) wher e no>2;

(3)rownum对于小于某值的查询条件

rownum对于rownum<n((n>1的自然数)的条件认为是成立的,所 以可以找到记录

SQL> select rownum,id,name from student where rownum <3;

(4)rownum大于某值并且小于某值的查询方法

查询rownum在某区间的数据,必须使用子查询。例如要查询rownum 在第二行到第三行之间的数据,包括第二行和第三行数据,那么我们只能 写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的 rownum的别名列大于等于二的记录行。但是这样的操作会在大数据集 中影响速度。

SQL> select * from (select rownum no,id,name from student wher e rownum<=3 ) where no >=2;

(5)如何在程序中使用rownum分页

下面的语句中:

pageNum代表当前第几页

pageSize代表每一页显示多少条记录

WITH temp AS (SELECT emp.*,ROWNUM NO FROM emp WHERE ROWNUM<=pageNum*pageSize)

SELECT * FROM temp WHERE NO>(pageNum-1)*pageSize

0条评论

点击登录参与评论