Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement
admin
2023-05-08 10:01:56
0次

SELECT能干什么?

Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement

Projection:查询表中指定列。

Selection:查询表中指定行。

Join:表与表之间做连接,要查看的数据放在多张表中,并且表与表之间的数据有关系。


SELECT 语句的基本语法:

Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement

SELECT 关键字后指定需要显示的列。

FROM 关键字后面指定包含这些列的表。

Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement

为了演示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 可以在×××或者日期类型的字段上做算术运算,日期类型只支持+ - 运算

Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement


SQL> select ename,sal,sal+300 from emp;

运算符的优先级

跟数学中的概念一样,乘除优先于加减,可以使用括号改变优先级

示例四、

SQL> select ename,sal,sal*12+300 from emp;

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

ENAME				      SAL SAL*(12+300)
------------------------------ ---------- ------------
SMITH				      800	249600
ALLEN				     1600	499200
WARD				     1250	390000
JONES				     2975	928200
MARTIN				     1250	390000

NULL值

SQL> select ename,sal,comm from emp;

ENAME				      SAL	COMM
------------------------------ ---------- ----------
SMITH				      800
ALLEN				     1600	 300
WARD				     1250	 500
JONES				     2975
MARTIN				     1250	1400
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				     1600	1900	   1300     480000
WARD				     1250	1750	    750     625000
JONES				     2975
MARTIN				     1250	2650	   -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、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...