Oracle表的查询

一、SELECT
1、了解| [ ] {}在命令介绍中的意义,以及基本的SELECT查询表中数据,主要使用SELECT命令。
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;
在这种命令描述方式中:| :表示或者,像上面的*|{……},也就是你可以使用*,它表示显示所有列,也可以使用大括号中的内容。
{}:表示必选项。[ ]:表示可选项,也就是中括号中的内容,可要可不要。当然选择与否中括号中的命令,表示了不同的意义。
{[DISTINCT] column|expression [alias],...}这一串的意义是,[DISTINCT]是可选项,可以不加。column|expression [alias] ,上面已经说过了,要么使用column ,它是列的名字,如select id,name from t1(试一下)。要么使用expression [alias],expression这个单词通常是表达式的意思。表达式通常指一些加减运算式:select salary+1000 from t1(试一下), salary+1000 就是一个表达式。额外说一点啊,表达式这个词,我们在以后的命令中,会经常的用到。它可以代表一切,数据、运算式子等等。

2、在一条命令中,我们可以在某处使用column,在别一处使用expression [alias],比如:
select name,salary+1000 from t1(试一下); name是直接使用列名,salary+1000是表达式。这条命令的显示结果如下:

gyj@OCM> select name,salary+1000 from t1;

NAME       SALARY+1000
---------- -----------
gyj2              9000
gyj3             11000
gyj4             16000

3、我们还可以为表达式指定别名,expression [alias]中,可选项[alias]就是别名。我们上面的命令就省略了。下面加上别名试试:

gyj@OCM> select name,salary+1000 salary from t1;

NAME           SALARY
---------- ----------
gyj2             9000
gyj3            11000
gyj4            16000

注意显示出来的表头,变成了别名。如果别名中包含空格或有特殊的符号,要加双引号:
gyj@OCM> select name,salary+1000  "My Salary" from t1;

NAME        My Salary
---------- ----------
gyj2             9000
gyj3            11000
gyj4            16000

gyj@OCM> select name,salary+1000  "Salary(bonus)" from t1;

NAME       Salary(bonus)
---------- -------------
gyj2                9000
gyj3               11000
gyj4               16000

二、常用运算符
了解||的使用,还有单、双引号的区别
在表达式中,常用的运算符有+,-,*,/ 和(),这些大家看PPT即可我就不多说了。这些都是针对数字型的。
1、针对字符,还有一个常用的连接符:|| 。它可以把两个字符连在一起:

gyj@OCM> select 'www.'||name||'.com'  from t1;
'WWW.'||NAME||'.CO
------------------
www.gyj2.com
www.gyj3.com
www.gyj4.com

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

这个例子主要为了演示||的作用,www. 和 name列的值,和com连在了一起。
注意这里单、双引号的使用,如果将www. .com外的单引号换为双引号,结果如下:
gyj@OCM> select "www."||name||".com"  from t1;
select "www."||name||".com"  from t1
                    *
ERROR at line 1:
ORA-00904: ".com": invalid identifier
我们刚才在列别名"My Salary" 中使用了双引号,如果换为单引号:
gyj@OCM>  select name,salary+1000  'My Salary' from t1;
select name,salary+1000  'My Salary' from t1
                         *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
一样会报错,这说明单、双引号并不通用。到底什么时候该用单引号,什么时候用双引号呢?区分起来很简单。如果你的显示结果,是针对表头部分的,那么就用双引号。"My Salary"就是只显示在表头中,下面的列数据中没有"My Salary"。而’www.’、’.com’,则是显示在下面的列数据中,这就要加单引号了。

2、还有一点关于 || ,它并不只能连接字符,它也可以对数字和时间也发挥作用:

gyj@OCM>  select name||'''s salary is '||salary||' at '||to_date(sysdate,'yyyy-mm-dd')  from t1;

NAME||'''SSALARYIS'||SALARY||'AT'||TO_DATE(SYSDATE,'YYYY-MM-DD')
-------------------------------------------------------------------------------
gyj2's salary is 8000 at 13-FEB-20
gyj3's salary is 10000 at 13-FEB-20
gyj4's salary is 15000 at 13-FEB-20

这里有两个知识点,一是SALARY是数字型的列,sysdate是系统时间,它们都也可以和字符一起连接。还有就是单引号已经是一种特殊的字符了,它不再是一般意义上的单引号,它是ORACLE的字符分界标志。但像gyj2's salary is 8000这串英文中的’,却是一个普通意义上的引号。在以单引号括起来的字符串中,又出现单引号时,就像'gyj2's salary is 8000',为了避免ORACLE将这个单引号误认为是字符串的结束,需要将单引号连打两次,即'gyj2's salary is 8000',这样就可以了。这就是'''s salary is '的意议,第一个单引号和最后一个单引号是字符串的分界。第一个单引号连续两个单引号,只是想表示一个普通意义上的单引号。

时间: 2024-10-27 06:26:12

Oracle表的查询的相关文章

Oracle 表空间查询与操作方法_oracle

一.查询篇 1.查询oracle表空间的使用情况 select b.file_id 文件ID, b.tablespace_name 表空间, b.file_name 物理文件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.

oracle表空间表分区详解及oracle表分区查询使用方法_oracle

此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念2.表分区的具体作用3.表分区的优缺点4.表分区的几种类型及操作方法5.对表分区的维护性操作.(1.) 表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间. 分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间

oracle两表连接查询问题

问题描述 oracle两表连接查询问题 有两张表,一张是个人信息表包括考生姓名,年龄,性别等一系列个人信息和一些其他信息: 第二张表是成绩表,其中也包括部分考生信息和分数: 现在想要在打开成绩表的时候,个人信息字段就已经对应上第一张表了,不需要自己填写, 这个应该怎么实现,代码应该怎么写? 解决方案 http://zhidao.baidu.com/link?url=Rb77btoUtGFpnDID8qotZfN3TTQcPVhzseA4ecOHNZLznZB3bx89MUzJSOR29sNpFM

oracle 对一张表频繁查询会导致性能下降或者锁表吗??

问题描述 如题,如果对同一张表的查询很频繁,会导致与这个对这个表的查询功能性能下降,或者锁表操作吗?我有一个查询功能,偶尔会出现性能很差的情况,但是只是偶尔,查看后台发现一张表的查询很频繁,而且好像导致很大I/O.会是这个原因引起的吗? 解决方案 不会,但更新会.当你频繁查询,同时数据有更新,就会.如果你的更新不能马上完成,需要很长的时间,就可能出现上述问题解决方案二:怎么不会呢,大量查询的情况下 ,数据库要去查询结果集,建立很多连接,再来个排序什么的也有很大的影响啊解决方案三:除了select

《Oracle SQL疑难解析》——1.1 从表中查询数据

1.1 从表中查询数据 Oracle SQL疑难解析 1.1.1 要解决的问题 如何从一个表中查询特定行和列的数据. 1.1.2 解决方法 用包含WHERE子句的SELECT语句.下面的SELECT 语句可以从数据库表中查询符合条件的行的列值: select employee_id, first_name, last_name, hire_date, salary from hr.employees where department_id = 50 and salary < 7500; 上述SE

Oracle多表连接查询

多个表之间关系:一对多|(多对一)  多对多 一对一 3种 关系的完整性约束:实体完整性.参照完整性.用于定义的完整性. 必须满足实体完整性和参照完整性. 实体完整性:规定了字段|属性的约束 参照完整性:关系与关系之间的引用 某个字段的约束  外键   一.笛卡尔集  笛卡尔集会在下面条件下产生: •  省略连接条件 •  连接条件无效 •  所有表中的所有行互相连接 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. //查询员工及部门的详细信息  但是会产生一个笛卡尔积的效果 SQ

Mybatis oracle多表联合查询分页数据重复的问题

Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于多个排序字段不唯一,同样的排序顺序每次运行返回的结果顺序不一致,导致这样的现象出现. SELECT TEMP_.* FROM (select temp.*, ROWNUM ROWNUM_ from (SELECT t2.ID FROM tableA t, tableB t2 WHERE t.ID =

oracle语句-有关两张表关联查询的sql问题

问题描述 有关两张表关联查询的sql问题 各位大神,一个sql问题请教下 有两张表,分别如下: 充值表t_recharge字段: userId.recharge_money.recharge_count 消费表t_consume字段: userId.consume_money.consume_count 现在的情况是用户可能只存在充值记录或者只存在消费记录,只存在充值记录时,消费记录显示0,只存在消费记录时,充值记录显示0 现在想查出这种结果: userId recharge_money rec

Oracle表连接方式概述

Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. 自连接(同一张表内的连接) SQL的标准语法: select table1.column,table2.column from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2; in