oracle中文字段名怎么查询_[中文字幕].脱何

44944f5540dc8ce8eb6f58ec8b839e40.png

(CSDN博主:写代码也要符合基本法)

各位看官老爷大家好,上堂课我们一起了解了SQL语言的历史和基本语法,今天我们一起来学习一下怎么写出一条简单的查询语句

69a773424a87cf84236309b689bbd9fc.png

PL/SQL基础教程第二课:简单SQL查询!上篇!

首先我们从最最简明的一个SQL查询说起

71bec789e7eeac35e8bc73ed6571a174.png

这是查询语句SELECT最简单的应用,但也展示出了查询语句最不可或缺的两个关键字和两个元素

两个必需关键字是SELECT和FROM,其作用可以简单介绍为:FROM指明要从哪个表中读取数据,SELECT则指示需要读取表中哪些字段的数据

两个必需元素则是分别跟随在SELECT和FROM关键字后面的字段列表和表,上图中的*表示要取出表中所有的列

另外需要注意的一点是,使用分号标记语句的结尾是一个好习惯,有时在语法中也是必要的

SQL> SELECT * FROM emp;EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH      CLERK      7902 1980/12/17     800.00               20 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10 7788 SCOTT      ANALYST    7566 1982/12/9     3000.00               20 7839 KING       PRESIDENT       1981/11/17    5000.00               10 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30 7876 ADAMS      CLERK      7788 1983/1/12     1100.00               20 7900 JAMES      CLERK      7698 1981/12/3      950.00               30 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20 7934 MILLER     CLERK      7782 1982/1/23     1300.00               1014 rows selected
事实上,无论多么复杂的查询语句也可以被划分出这个最基本的结构,只不过这里所说的“字段列表”并不一定只是表中的字段,也可以是各种标量表达式,甚至另外一个附加的查询语句

同样的,FROM后面的“表”也并不局限于数据表,它可以是任意形式的整齐矩阵或者说数据集合(Set)

9dafe745706034fc0e54f60ecbe7d7c0.png

这种最简的SQL查询对于我们来说是远远不够用的,下面我们在看一些例子,学习一些查询语句中常用到的技巧

SQL> SELECT e.empno 工号, e.ename 姓名, e.sal * 1.2 薪水, nvl(e.comm, 0) 绩效  2    FROM emp e;   工号 姓名               薪水         绩效----- ---------- ---------- ---------- 7369 SMITH             960          0 7499 ALLEN            1920        300 7521 WARD             1500        500 7566 JONES            3570          0 7654 MARTIN           1500       1400 7698 BLAKE            3420          0 7782 CLARK            2940          0 7788 SCOTT            3600          0 7839 KING             6000          0 7844 TURNER           1800          0 7876 ADAMS            1320          0 7900 JAMES            1140          0 7902 FORD             3600          0 7934 MILLER           1560          014 rows selected
在这个例子中展示了“字段列表”中,字段之间应使用逗号分隔,字段列表中列举了哪些字段,最终查询结果就按顺序展示哪些字段

另外查询语句中表名和字段名均可附加“别名”,这里的表emp e其中e即表别名,表别名在其出现的查询语句结构中是有作用域范围的,这个我们以后会接触到,比如例子中就在字段列表中使用了表别名,表别名后的点号(.)代表对表结构的访问,“表别名.字段名”则是指示从哪张表中取出哪个字段,这种写法在多表查询中尤为高效

除了表别名,还有列别名,即为SELECT字段列表中的列附加的别名,这个别名将会覆盖原本的列名或者表达式,出现在查询结果的“头部”

本例中,如“e.empno 工号”,e.empno是原本的字段名,而“工号”则是其列别名

这里需要强调的是,严格来讲,中文字符属于标准SQL字符集以外的字符,使用中文作为别名时其实是“引征标识符”,应当用双引号括起来标记

另外,如果遵循更为传统的语法,别名和列名或者表名之间还应该用关键字AS来连接

502a47900277c4f1ee367e46505351b9.png

字段列表中还可以将原本的列进行加工,实现以某种表达式组成一个新列,如本例中的e.sal*1.2就使用了乘法,把每行中的sal字段的值提高了20%

请注意这里的乘法仅仅影响查询结果,不会对表中原本的数据造成任何改变;事实上加减乘除等算术运算符均可使用在列的表达式中

除了使用算术表达式,还可以调用标量函数,例如nvl(e.comm,0),这里的NVL就是数据库的一个标准内置函数,它可以将输入的空值替换成另一个值,当然如果输入的值不是空值,则不会发生替换

所谓函数(Function)可以理解为一个黑盒,对外提供输入端子和输出端子,而将其内部运作隐藏起来,以后我们在深入了解函数时会知道,函数可以没有输入端子,但必须有输出,哪怕是输出空值

Emp表中comm字段的实际情况是,个别没有绩效的人员,其对应行中这个字段是空的,我们这里就将空字段转换成0,以便查询结果更有意义

03625193cf4eca01fda81f349b21c071.png

关于空值也是一个可以展开讨论的话题,几乎所有的编程语言中都有NULL这个概念

在SQL中,NULL不是实实在在的量值,它既不是0,也不是没有内容的字符串(虽然在Oracle数据库中可以将空字串默认做NULL处理),严格上来说没有内容的字符串也是实在的量值,因为它已经拥有了数据类型的属性,而数字0就更不必说,0本身就是一个数值

NULL代表不确定,既不代表有,也不代表没有,它表示未知,表示此时不知道这个“东西”有没有内容、是什么类型,甚至不知道它到底存不存在

过分强求理解NULL的含义会给我们带来困扰,实际上NULL这个概念可以算作编程语言避免不了的一个BUG,我们最需要牢记的就是:任何数值与NULL进行数学运算,其结果还是NULL

至于算术表达式,并不局限于一个列与常量数值的运算,多个列也可组合成为算术表达式,例如e.sal+nvl(e.comm,0)就可以表达将薪资和绩效相加后,组合为一个列来显示在结果当中

8020baf98a57a915d5c1231cdaf2c5f5.png

查询语句默认会将结果集数据全部返回,在一些情况下,就可能包含重复的数据,这里的重复的数据是本来就存在的,不是SQL伪造的

SQL> SELECT e.deptno  2    FROM emp e;DEPTNO------    20    30    30    20    30    30    10    20    10    30    20    30    20    1014 rows selected
例如员工表中,只检索部门编号列的话就会出现重复数据,因为一个部门往往会有多个员工

如果我们想从这张表中总结有多少个部门的时候,就可以使用DISTINCT关键字来标记,指示数据库在得到完整的结果集之后并将之输出之前做一步加工,去除重复的数据行,只保留唯一的结果

SQL> SELECT DISTINCT e.deptno  2    FROM emp e;DEPTNO------    30    20    10
注意DISTINCT是一个语法关键字,不是函数,所以不需要在DISTINCT后面将列用括号括起来,而且只能紧跟SELECT之后出现,不能写在字段列表的中间或结尾。另外DISTINCT作用于整个字段列表,或者说结果集的整个行, 只有所有对应字段都一致的若干行才会被视作重复行处理
SQL> SELECT DISTINCT e.deptno  2                 ,e.empno  3    FROM emp e;DEPTNO EMPNO------ -----    20  7369    30  7499    30  7521    20  7566    30  7654    30  7698    10  7782    20  7788    10  7839    30  7844    20  7876    30  7900    20  7902    10  793414 rows selected

08e966dffffd0be5274f2fe16124c130.png

为了控制篇幅,达到最舒适的阅读效果,最后我们简简单单认识一个表来告一段落

在Oracle数据库中有一张公共表DUAL,我们通常称之为虚拟表,事实上它是sys用户下的一张表,它只有一个字段dummy,并且只有一行

Oracle会保证检索该表时只返回一行数据,这个表在将来会有很多用处

SQL> SELECT 'Hello World!' str FROM dual;STR------------Hello World!SQL> SELECT * FROM dual;DUMMY-----X
截至目前,我们对SQL查询语言的认识还停留在数据集横向的层面,下堂课我们将深入了解查询语句中WHERE的使用,它可以在查询中起到纵向控制结果数据的作用

f75b7510ad35d8d19dfb21ade39e954f.png

今天的分享就到这里了,第三十一次发推没有经验,不会排版,行文也没有条理,以后估计也不会有什么长进,感谢朋友们的鼓励与支持,以后我会坚持下去,求求你们不要取关fccf9b6e3724f5e937738b61a0c33d78.png

46dda81621e084a2d451b7a06f3d9662.gif

1a8c9b0f7bc86538289970d9de827d8a.png

c1df64a02abcd924d2703cec35914b77.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值