oracle学习笔记-pl sql select
SQL的主要功能之一是实现数据库查询。
1、简单SQL查询
select t.*
from LSBZDW t
where T.LSBZDW_DWBH='01'
(1) SELECT语句的第一部分指名要选取的列。上述例子是选择了所有记录。
(2) SELECTT语句的第二部份指明要从哪个(些)表中查询数据。在此例中,要查询的表名为LSBZDW,表的别名是t 。
(3) 最后,SELECT语句的WHERE子句指明要选择满足什么条件的记录。在此例中,查询条件为只有编号列的值为01的记录才被选取。
2、操作多个表
到现在为止,只尝试了用一句SQL查询从一个表中取出数据。可以用一个SELECT语句同时从多个表中取出数据,只需在SELECT语句的FROM从句中列出要从中取出数据的表名称即可:
select * from
MATERIALS,MATERIALSORTS
这个SELECT语句执行时,同时从表MATERIALS和表MATERIALSORTS 中取出数据。从表MATERIALS中取出所有物料,从表MATERIALSORTS 中取出所物料分类。从结果中可以看出,查询出的数据没有实际意义。
要从两个表中选出有意义的记录组合,需要通过建立关联。
表MATERIALS有一个名为MATERIALSORTid的字段,表明此物料属于那个物料分类。表MATERIALSORTS 有一个名为MATERIALSORTid的字段,包含每个物料分类的唯一标识。在字段两个表的MATERIALSORTid之间建立一个关连,查询出的结果就是有意义的。
select MATERIALSORTNAME as 分类名称,materialname as 物料名称
from MATERIALS join MATERIALSORTS on MATERIALS.MATERIALSORTid=MATERIALSORTS.MATERIALSORTid
当这个SELECT语句执行时,每个物料都将与正确的物料分类相匹配。
为了区别表两个中相同的字段名MATERIALSORTid,每个字段名前面都加上了表名前缀
as关键字的作用是字段别名,在查询结果窗口将显示分类名称,物料名称而不是MATERIALSORTNAME和materialname
如果只想查询一种物料属于那种分类,只需在上面的语句后面加上where条件
select MATERIALSORTNAME as 分类名称,materialname as 物料名称
from MATERIALS join MATERIALSORTS on MATERIALS.MATERIALSORTid=MATERIALSORTS.MATERIALSORTid
where materialname='螺杆'
3、操作字段
可以通过执行运算,来操作从一个表返回的字段值。
SELECT price*2 FROM MATERIALS
当这个查询执行时,每种物料的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询:
SELECT price as 原始价格, price*2 as 新价格 FROM MATERIALS
可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。
还可以使用连接运算符来连接两个字符型字段,||操作符是pl sql的字符连接函数:
select materialname||specs from MATERIALS
在这个例子中,把字段materialname和字段specs粘贴在一起。即物料和规格型号在一起显示了。
4、排序查询结果
可以操纵一个SQL查询结果的顺序。通过使用ORDER BY子句,可以强制一个查询结果按升序排列: select materialname from MATERIALS ORDER BY materialname
当这个SELECT语句执行时,物料名字的显示将按字母顺序排列。ORDER BY子句将物料名字按升序排列。
可以同时对多个列使用ORDER BY子句:
select materialname,specs from MATERIALS ORDER BY materialname,specs
这个查询首先把结果按materialname字段进行排序,然后按字段specs排序。
select materialname,specs from MATERIALS ORDER BY materialname,specs desc
这个查询首先把结果按materialname字段进行升序排序,然后按字段specs降序排序。
不是特别需要时,不要对查询结果进行排序,因为服务器完成这项工作要费些力气。
5、取出互不相同的记录
一个表有可能在同一列中有重复的值。如果一个字段有重复的值,可以使用关键字DISTINCT关键字使每个值只被选取一次:
SELCET DISTINCT materialname FROM MATERIALS
当这个SELECT语句执行时,查询结果将过滤掉重复记录。
如同ORDER BY子句一样,强制服务器返回互不相同的值也会增加运行开销。不是必须的时候不要使用关键字DISTINCT。