设为首页 收藏本站
查看: 872|回复: 0

[经验分享] Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement

[复制链接]

尚未签到

发表于 2018-10-22 11:26:29 | 显示全部楼层 |阅读模式
  SELECT能干什么?
DSC0000.jpg

  Projection:查询表中指定列。
  Selection:查询表中指定行。
  Join:表与表之间做连接,要查看的数据放在多张表中,并且表与表之间的数据有关系。
  SELECT 语句的基本语法:
DSC0001.jpg

  SELECT 关键字后指定需要显示的列。
  FROM 关键字后面指定包含这些列的表。
DSC0002.jpg

  为了演示SELECT命令,我们需要使用sqlplus登录到数据库。
  切换到Oracle用户,用如下命令解锁scott用户并将密码设置成tiger
[root@11gdg1 ~]# su - oracle  
11gdg1-> sqlplus / as sysdba
  

  
SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 14 09:59:36 2015
  

  
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
  

  

  
Connected to:
  
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  
With the Partitioning, OLAP, Data Mining and Real Application Testing options
  

  
SQL> alter user scott account unlock identified by tiger;
  

  
User altered.
  以下所有演示都是使用scott用户,登录scott用户。
SQL> conn scott/tiger  
Connected.
  选择所有列
SQL> select * from dept;  

  
    DEPTNO DNAME      LOC
  
---------- ------------------------------------------ ---------------------------------------
  10 ACCOUNTING      NEW YORK
  20 RESEARCH      DALLAS
  30 SALES      CHICAGO
  40 OPERATIONS      BOSTON
  选择指定列
SQL> select deptno,dname from dept;  

  
    DEPTNO DNAME
  
---------- ------------------------------------------
  10 ACCOUNTING
  20 RESEARCH
  30 SALES
  40 OPERATIONS
  列与列之间用逗号隔开,结果显示的顺序与SELECT后字段的顺序一致。
  SQL语句编写规则

  •   大小写不敏感。
  •   语句可以占用一行或者多行。
  •   关键字不能被省略,或者拆分成多行。
  •   通常情况子句独占一行。
  •   使用缩进增加语句的可读性。
  •   在sqlplus或者其他工具中,每个语句结束需要加上一个分号。告诉客户端,你的语句结束了。
  算术运算符
  SELECT 可以在整形或者日期类型的字段上做算术运算,日期类型只支持+ - 运算
DSC0003.jpg

SQL> select ename,sal,sal+300 from emp;  运算符的优先级
  跟数学中的概念一样,乘除优先于加减,可以使用括号改变优先级
  示例四、
SQL> select ename,sal,sal*12+300 from emp;  

  
ENAME      SAL SAL*12+300
  
------------------------------ ---------- ----------
  
SMITH      8009900
  
ALLEN     1600      19500
  
WARD     1250      15300
  
JONES     2975      36000
SQL> select ename,sal,sal*(12+300) from emp;  

  
ENAME      SAL SAL*(12+300)
  
------------------------------ ---------- ------------
  
SMITH      800249600
  
ALLEN     1600499200
  
WARD     1250390000
  
JONES     2975928200
  
MARTIN     1250390000
  NULL值
SQL> select ename,sal,comm from emp;  

  
ENAME      SALCOMM
  
------------------------------ ---------- ----------
  
SMITH      800
  
ALLEN     1600 300
  
WARD     1250 500
  
JONES     2975
  
MARTIN     12501400
  
BLAKE     2850
  
CLARK     2450
  
SCOTT     3000
  
KING     5000
  
TURNER     1500   0
  
ADAMS     1100
  
JAMES      950
  
FORD     3000
  
MILLER     1300
  我们看到COMM列下的数据有些是空着的。这个是一个特殊的值,我们称之为NULL。
  null可以理解成一个不确定的、不可得的、未知的数。这个数不等于任何数,包含null自身。
  null并不是0或者空格。
  null作用于任何算术运算符后,其结果都是null
SQL> select ename,sal,sal+comm,sal-comm,sal*comm from emp;  

  
ENAME      SAL   SAL+COMM   SAL-COMM   SAL*COMM
  
------------------------------ ---------- ---------- ---------- ----------
  
SMITH      800
  
ALLEN     16001900   1300     480000
  
WARD     12501750    750     625000
  
JONES     2975
  
MARTIN     12502650   -150    1750000
  列别名
SQL> select ename xingming,sal as gongzi,sal*12 "Annual salary" from emp;  

  
XINGMING   GONGZI Annual salary
  
------------------------------ ---------- -------------
  
SMITH      800   9600
  
ALLEN     1600  19200
  
WARD     1250  15000
  列连接
  使用||将两个字符串连接起来。
SQL> select ename||job  from emp;  

  
ENAME||JOB
  
---------------------------------------------------------
  
SMITHCLERK
  
ALLENSALESMAN
  字符串
  使用''括起来
SQL> select ename||' is a '||job as "Employee Detail" from emp;  

  
Employee Detail
  
---------------------------------------------------------------------------
  
SMITH is a CLERK
  
ALLEN is a SALESMAN
  
WARD is a SALESMAN
  那么我的字符串本身包含单引号,该怎么办呢?Oracle使用两个连在一起的单引号表示。
SQL> select ename||'''s salary is '||sal from emp;  

  
ENAME||'''SSALARYIS'||SAL
  
---------------------------------------------------------------
  
SMITH's salary is 800
  
ALLEN's salary is 1600
  
WARD's salary is 1250
  
JONES's salary is 2975
  当字符串中单引号比较多时,这样写起来很吃力,可读性也不好。Oracle 引入了q''操作符。
  格式如下
  q'#string#'  #为分割符,#中间的部分为字符串,字符串内可以包含单引号。分割符可以是单字节也可以是多字节。还可以是字符对比如[],{},,()
SQL> select ename||q'['s salary is ]'||sal from emp;  

  
ENAME||Q'['SSALARYIS]'||SAL
  
---------------------------------------------------------------
  
SMITH's salary is 800
  
ALLEN's salary is 1600
  
WARD's salary is 1250
  
JONES's salary is 2975
  
MARTIN's salary is 1250
  
BLAKE's salary is 2850
  
CLARK's salary is 2450
  
SCOTT's salary is 3000
  
KING's salary is 5000
  
TURNER's salary is 1500
  
ADAMS's salary is 1100
  重复行
  默认情况下,重复的行一起被显示。如下
SQL> select deptno from emp;  

  
    DEPTNO
  
----------
  20
  30
  30
  20
  30
  30
  10
  20
  10
  30
  20
  如果想对结果集去重,那么在SELECT 后跟上DISTINCT 关键字
SQL> select distinct deptno from emp;  

  
    DEPTNO
  
----------
  30
  20
  10
  而且,可以对多列一起去重
SQL> select distinct deptno,job from emp;  

  
    DEPTNO JOB
  
---------- ---------
  20 CLERK
  30 SALESMAN
  20 MANAGER
  30 CLERK
  10 PRESIDENT
  30 MANAGER
  10 CLERK
  10 MANAGER
  20 ANALYST
  

  
9 rows selected.
  当然也可以对全表去重
SQL> select distinct * from emp;  DESCRIBE命令
  该命令用来显示表结构,也就是表的定义
SQL> desc emp;  
Name   Null?    Type
  
----------------------------------------- -------- ----------------------------
  
EMPNO   NOT NULL NUMBER(4)
  
ENAME    VARCHAR2(10)
  
JOB    VARCHAR2(9)
  
MGR    NUMBER(4)
  
HIREDATE    DATE
  
SAL    NUMBER(7,2)
  
COMM    NUMBER(7,2)
  
DEPTNO     NUMBER(2)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624924-1-1.html 上篇帖子: MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench 下篇帖子: Win7搭建SVN server-Layne的学习园地
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表