SELECT能干什么?Projection:查询表中指定列。Selection:查询表中指定行。Join:表与表之间做连接,要查看的数据放在多张表中,并且表与表之间的数据有关系。SELECT 语句的
SELECT能干什么?
Projection:查询表中指定列。
Selection:查询表中指定行。
Join:表与表之间做连接,要查看的数据放在多张表中,并且表与表之间的数据有关系。
SELECT 语句的基本语法:
SELECT 关键字后指定需要显示的列。
FROM 关键字后面指定包含这些列的表。
为了演示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 可以在×××或者日期类型的字段上做算术运算,日期类型只支持+ - 运算
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)
--结束END--
本文标题: Oracle 学习之SQL(一) Retrieving Data Using the SQL SELECT statement
本文链接: https://lsjlt.com/news/39052.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0