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

来源:互联网 发布:电脑画画软件 编辑:程序博客网 时间:2024/05/06 05:26

表的查询


一、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列都显示为空了。

0 0
原创粉丝点击