您的位置:首页 > 其它

表的查询(双引号用于表名列名处、单引号用于显示在列数据上的字符串常量上)

2014-12-24 17:03 239 查看

表的查询

一、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

这个例子主要为了演示||的作用,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 '的意议,第一个单引号和最后一个单引号是字符串的分界。第一个单引号连续两个单引号,只是想表示一个普通意义上的单引号。

三、去除重复行

可选项 [DISTINCT] ,表示去除重行。比如说我再输入一个名字叫gyj1的人:

gyj@OCM> insert into t1 values(1,'gyj1',20000);

1 row created.

gyj@OCM> commit;

Commit complete.

这行数据和我们上面输入的有一行数据完全相同,下面我显示t1表的信息

gyj@OCM> select name from t1;

NAME

----------

gyj2

gyj3

gyj4

gyj5

gyj7

gyj6

gyj1

gyj1

有两个名为gyj1的,加上 [DISTINCT] 可选项试试:

gyj@OCM> select distinct name from t1;

NAME

----------

gyj4

gyj5

gyj7

gyj2

gyj6

gyj3

gyj1

名为gyj1的行只有一个了。这就是[DISTINCT]的作用,去除重复行。

四、NULL 空值运算

说明任何数字和NULL运算,结果仍是NULL

在我们的示例表中,gyj8的薪水为空:

gyj@OCM> select * from t1;

ID NAME SALARY

---------- ---------- ----------

2 gyj2 8000

3 gyj3 10000

4 gyj4 15000

5 gyj5 12000

7 gyj7 12000

6 gyj6 12000

1 gyj1 12000

1 gyj1 20000

8 gyj8

看gyj8的SALARY列都是空。注意,空不是零。我们可以将空理解为“未知”,就是不知道这是什么,在ORACLE中,可以用NULL表示空。如果0+1,结果是1。NULL+1呢,你用不知道是几的数,再加上1,结果还是不知道,也就是结果还是NULL。任何数据,同NULL作数学运算,结果还是NULL,比如:

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

NAME SALARY+NULL

---------- -----------

gyj2

gyj3

gyj4

gyj5

gyj7

gyj6

gyj1

gyj1

gyj8

和NULL相加后,9个人的SALARY列都显示为空了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐