前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL 基础-->SELECT 查询

SQL 基础-->SELECT 查询

作者头像
Leshami
发布于 2018-08-07 02:18:14
发布于 2018-08-07 02:18:14
9850
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界

--================================

--SQL 基础-->SELECT 查询

--=================================

/*

一、SQL 结构化查询语言

包括DDL(数据定义语言)、DCL(数据控制语言)、

DQL(数据查询语言)、DML(数据操纵语言)

二、SQL的特点

SQL 语句不区分大小写

SQL 语句能输入一行或多行

关键字不能整行缩写或分离

子句通常被放置在分开的行上

缩进可提高可读性

在SQL 开发工具,SQL 语句能选择分号结束(;) .当你运行多个SQL 语句的时候,需要分号

在SQL*Plus中, 你要用一个分号结束每个SQL 语句.(;)

三、SQL*PLUS特征:

字符日期左对齐

数字右对对齐

列名默认大写

SQL PLUS 自己的命令不需以分号“;”结束

四、SQL查询时,数字和日期类型的数据可用算术运算符

+ 加

- 减

* 乘

/ 除

( ) 用于改变运算符的优先级

五、空值

空值一般用NULL表示

一般表示未知的、不确定的值,也不是空格

一般运算符与其进行运算时,都会为空

空不与任何值相等

表示某个列为空用:IS NULL 不能使用COMM=NULL这种形式

某个列不为空:IS NOT NULL 不能使用COMM != NULL 这种形式

空值在作升序排列时,空值会放到最后。

相反作降序排列时,空值会放在最前。

空值作逻辑运算时:

AND运算:

F AND F =F F AND T =F F AND NULL =F

T AND F =F T AND T =T T AND NULL IS NULL

NULL AND F =F NULL AND T IS NULL NULL AND NULL IS NULL

就是说AND的优先级是:F ->NULL ->T

OR运算:

T OR T =T T OR F =T T OR NULL =T

F OR T =T F OR F =F F OR NULL IS NULL

NULL OR T =T NULL OR F IS NULL NULL OR NULL IS NULL

OR运算优先级:T ->NULL ->F

NOT运算:

NOT T =F

NOT F =T

NOT NULL IS NULL

与空值相关的函数:

NVL 函数

格式:NVL(表达式1,表达式2)

作用:测试表达式的值,如果表达式1为空,则返回表达式2的值;不为空,返回表达式1的值。

NVL2 函数

格式:NVL2(表达式1,表达式2,表达式3)

作用:测试表达式的值,表达式1不为空,返回表达式2的值,如果为空,则返回表达式3的值。

NULLIF 相等为空

格式:NULLIF (表达式1,表达式2)

作用:比较表达式1和表达式2的值,如果两个相等则返回为空,否则返回表达式1的值。

COALESCE 找非空

格式:COALESCE (表达式1,表达式2,表达式3,...,表达式n)

作用:返回第一个不为空的值,如果所有的都为空,则返回NULL。

六、SELECT语句的用法

SELECT *|{[DISTINCT] column|expression [alias],...}

FROM table;

七、演示 */

--选择所有字段

SQL> SET LINESIZE 200

SQL> SELECT * FROM SCOTT.EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7369 SMITH CLERK 7902 17-DEC-80 800 20

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

--选择部分字段

SQL> SELECT EMPNO,ENAME,SAL FROM SCOTT.EMP;

EMPNO ENAME SAL

---------- ---------- ----------

7369 SMITH 800

7499 ALLEN 1600

7521 WARD 1250

--算术加减运算

SQL> SELECT EMPNO,ENAME,SAL + 300 FROM SCOTT.EMP;

EMPNO ENAME SAL+300

---------- ---------- ----------

7369 SMITH 1100

7499 ALLEN 1900

7521 WARD 1550

--优先级

SQL> SELECT EMPNO,ENAME,12 * (SAL + 300) FROM SCOTT.EMP;

EMPNO ENAME 12*(SAL+300)

---------- ---------- ------------

7369 SMITH 13200

7499 ALLEN 22800

7521 WARD 18600

SQL> SELECT EMPNO,ENAME,12 * SAL + 300 FROM SCOTT.EMP;

EMPNO ENAME 12*SAL+300

---------- ---------- ----------

7369 SMITH 9900

7499 ALLEN 19500

7521 WARD 15300

--NULL,记录中COMM存在为NULL的情况

SQL> SELECT EMPNO,ENAME,SAL,COMM FROM SCOTT.EMP;

EMPNO ENAME SAL COMM

---------- ---------- ---------- ----------

7369 SMITH 800

7499 ALLEN 1600 300

7521 WARD 1250 500

7566 JONES 2975

--与NULL运算,结果为NULL

SQL> SELECT EMPNO,ENAME,SAL,COMM + 300 FROM SCOTT.EMP;

EMPNO ENAME SAL COMM+300

---------- ---------- ---------- ----------

7369 SMITH 800

7499 ALLEN 1600 600

7521 WARD 1250 800

7566 JONES 2975

--将COMM不为NULL的记录的COMM乘以

SQL> SELECT EMPNO,ENAME,SAL,COMM * 12 FROM SCOTT.EMP WHERE COMM IS NOT NULL

EMPNO ENAME SAL COMM*12

---------- ---------- ---------- ----------

7499 ALLEN 1600 3600

7521 WARD 1250 6000

7654 MARTIN 1250 16800

7844 TURNER 1500 0

--字段别名,字段后用AS 别名,AS可以省略

SQL> SELECT EMPNO,ENAME AS EmpName,SAL Salary FROM SCOTT.EMP;

EMPNO EMPNAME SALARY

---------- ---------- ----------

7369 SMITH 800

7499 ALLEN 1600

7521 WARD 1250

7566 JONES 2975

--DISTINCT,过滤重复行

SQL> SELECT DISTINCT EMPNO,ENAME FROM SCOTT.EMP;

--连接操作符,通过二个垂直的条描述(||),注意,日期和文字数值一定嵌入在单引号里面

SQL> SELECT EMPNO,ENAME || ' IS A ' ||JOB AS POSITION FROM SCOTT.EMP;

EMPNO POSITION

---------- -------------------------

7369 SMITH IS A CLERK

7499 ALLEN IS A SALESMAN

7521 WARD IS A SALESMAN

--DESC table_name,显示表结构信息

SQL> DESC SCOTT.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)

--NVL的用法

SQL> SELECT EMPNO,ENAME,NVL(TO_CHAR(COMM),'Not Applicable') FROM SCOTT.EMP;

EMPNO ENAME NVL(TO_CHAR(COMM),'NOTAPPLICABLE')

---------- ---------- ----------------------------------------

7369 SMITH Not Applicable

7499 ALLEN 300

7521 WARD 500

7566 JONES Not Applicable

--NVL2的用法

SQL> SELECT empno,ename,sal,NVL2(TO_CHAR(comm),12 * (sal + comm),sal) AS Income FROM scott.emp;

EMPNO ENAME SAL INCOME

---------- ---------- ---------- ----------

7369 SMITH 800 800

7499 ALLEN 1600 22800

7521 WARD 1250 21000

7566 JONES 2975 2975

--NULLIF的用法

--等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

SQL> SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID"

2 FROM hr.employees e, hr.job_history j

3 WHERE e.employee_id = j.employee_id

4 ORDER BY last_name, "Old Job ID";

LAST_NAME Old Job ID

------------------------- ----------

De Haan AD_VP

Hartstein MK_MAN

Kaufling ST_MAN

Kochhar AD_VP

Kochhar AD_VP

Raphaely PU_MAN

Taylor SA_REP

Taylor

Whalen AD_ASST

Whalen

--下面是使用CASE WHEN的等价用法

SQL> SELECT e.last_name, CASE WHEN e.job_id = j.job_id THEN NULL ELSE e.job_id END AS "Old Job ID"

2 FROM hr.employees e, hr.job_history j

3 WHERE e.employee_id = j.employee_id

4 ORDER BY last_name, "Old Job ID";

LAST_NAME Old Job ID

------------------------- ----------

De Haan AD_VP

Hartstein MK_MAN

Kaufling ST_MAN

Kochhar AD_VP

Kochhar AD_VP

Raphaely PU_MAN

Taylor SA_REP

Taylor

Whalen AD_ASST

Whalen

--COALESCE的用法

--当COALESCE(exp1,exp2)包含两个表达式时,等价于CASE WHEN exp1 IS NOT NULL THEN exp1 ELSE exp2 END

--COALESCE (expr1, expr2, ..., exprn), for n>=3

--当n >= 3时,等价于

--CASE WHEN expr1 IS NOT NULL THEN expr1

-- ELSE COALESCE (expr2, ..., exprn) END

SQL> SELECT product_id, list_price, min_price,

2 COALESCE(0.9*list_price, min_price, 5) "Sale"

3 FROM oe.product_information

4 WHERE supplier_id = 102050

5 ORDER BY product_id, list_price, min_price, "Sale"

PRODUCT_ID LIST_PRICE MIN_PRICE Sale

---------- ---------- ---------- ----------

1769 48 43.2

1770 73 73

2378 305 247 274.5

2382 850 731 765

3355 5

八、更多

SQLPlus 常用命令

Oracle相关

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010年04月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle学习(一):基本操作和基本查询语句
文中以"--"开头的语句为注释,即为绿色部分 1.知识点:可以对照下面的录屏进行阅读 SQL> --录屏工具spool,开始录制,并指定保存路径为c:\基本查询.txt SQL>spool c:\基本查询.txt SQL> --清屏 SQL> host cls SQL> --查看当前用户 SQL> show user USER 为 "SCOTT" SQL> --查询当前用户下的表 SQL> select * from tab; SQL> -- tab数据字典(管理员提供的表) SQL> des
Java架构师必看
2021/05/17
5270
Oracle 数据库入门之----------------------多表查询
  SUM(SAL)                                                                                                                                                                                              
互联网CEO
2018/12/11
6190
【DB笔试面试478】树形查询(层次查询)可用于哪些场景?
在实际开发中,如果表中数据具有逻辑上的层次结构,那么可以使用层次查询以更直观地显示查询结果(包括数据本身以及数据之间的层次关系)。树形结构的关系可以控制遍历树的方向,是自上而下,还是自下而上,还可以确定层次的开始点(ROOT)的位置。层次查询语句正是从这两个方面来确定的,START WITH确定开始点,CONNECT BY确定遍历的方向。
AiDBA宝典
2019/09/30
1.1K0
【赵渝强老师】Oracle数据库的闪回查询
Oracle数据库的闪回查询(Flashback Query)是对查询语句select的扩展,它会从还原数据中提取所需要的历史数据以反映数据在历史的某个时间段上的状态。
赵渝强老师
2025/03/28
960
【赵渝强老师】Oracle数据库的闪回查询
day43_Oracle学习笔记_02
八、子查询 示例代码如下: 子查询.txt SQL> --rownum 行号 SQL> select rownum,empno,ename,sal from emp;     ROWNUM      EMPNO ENAME             SAL                                                                                                                                
黑泽君
2018/10/11
7810
day43_Oracle学习笔记_02
oracle最强大函数之一decode函数的使用[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,…,else) 含义为 IF 条件=值1 THEN     RETURN(value 1) ELSIF 条件=值2 THEN     RETURN(value 2)     …… ELSIF 条件=值n THEN     RETURN(value 3) ELSE     RETURN(default) END IF
全栈程序员站长
2022/09/16
5640
Oracle 数据库入门之----------------------,多行函数
  SUM(SAL)                                                                                                                                                                                        
互联网CEO
2018/12/11
5870
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
--======================================================
Leshami
2018/08/07
5000
Oracle学习(二):过滤和排序
1.知识点:可以对照下面的录屏进行阅读 SQL> --字符串大小写敏感 SQL> --查询名叫KING的员工信息 SQL> select * 2 from emp 3 where ename = 'KING'; SQL> --日期格式敏感 SQL> --查询入职日期为17-11月-81的员工 SQL> select * 2 from emp 3 where hiredate='17-11月-81'; --正确例子 SQL> ed 已写入 file afiedt.buf 1
Java架构师必看
2021/05/17
7470
小知识:Oracle中的层次查询
使用Oracle中的start with .. connect by prior ..语句可以轻松实现。 下面通过scott用户下的emp来做演示,使用自己的一个19c测试环境,结果发现默认并没有scott用户及其测试表,我们需要使用自带脚本添加:
Alfred Zhao
2021/06/10
7360
SQL 基础--> 集合运算(UNION 与UNION ALL)
--=============================================
Leshami
2018/08/07
6720
SQL基础-->过滤和排序
--=======================================
Leshami
2018/08/07
6690
CHECKSUM 分析函数
本文概述了Oracle database 21c中引入的 CHECKSUM 分析函数。可以用于检查表的内容是否已变更。
Yunjie Ge
2022/04/24
9840
Oracle 数据库入门之----------------------基本查询
TNAME                          TABTYPE  CLUSTERID                               
互联网CEO
2018/12/11
5830
SQL*Plus break与compute的简单用法
   在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现。这个两个命令简单易用,可满足日常需求,其实质也相当于在编写SQL语句时使用分组及聚合函数。不同的是在报表中的分组的最下方或整个报表的最下方我们可以得到如sum,avg以及自定义的聚合字样。见下面的演示。
Leshami
2018/08/14
5060
MySQL 多表查询与复杂查询技巧实战
实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。
用户11286421
2025/03/24
1290
MySQL 多表查询与复杂查询技巧实战
day42_Oracle学习笔记_01
虚拟机上的orcl数据库,所在位置:C:\app\Training\oradata\orcl
黑泽君
2018/10/11
9350
day42_Oracle学习笔记_01
SQL 层级查询(二)
在上一篇文章里,我们介绍了在 MySQL 中实现层次查询的两种方式。前文举的示例是获取从叶子点到根节点的路径,今天我们要实现的是从根节点找到所有叶子节点。
白日梦想家
2020/12/14
9410
SQL 基础-->常用函数
lpad | rpad(x,width [,pad_string]) 字符定长,(不够长度时,左|右填充)
Leshami
2018/08/07
1.2K0
【MySQL】查询语法简介
本篇文章主要简介下MySQL中where,group by ,order by ,limit,join,union ,union all,子表等查询语法。
MySQL技术
2019/09/08
1.7K0
相关推荐
Oracle学习(一):基本操作和基本查询语句
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文