--================================
--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相关
分享到:
相关推荐
就是说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...
计算机后端-PHP视频教程. php与mysql基础-sql5-发送查询(select操作).wmv
sqlplus 连接本地 quit ...cd MySql cd bin cd mysql -h192.168.1.32 -uroot -p ...sql语句执行的顺序:from子句---->where子句---->select子句--->order by子句 ='2010-07-22' 或是 = To_DATE('2010-07-22')
计算机后端-PHP视频教程. php与mysql基础-sql4-发送查询(非select操作).wmv
计算机后端-PHP视频教程. php与mysql基础-sql基础8-select(只按主键查询).wmv
第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 1.2 数据库系统的结构、组成及工作流程 3 1.2.1 数据库的体系结构 3 1.2.2 数据库系统的组成 4 1.2.3 ...
ABAP中SQL语法详细介绍,包括基础语法和各种聚合函数,如MAX,MIN,AVG,COUNT,SUM,DIV,MOD,CEIL,FLOOR,DIVSION,ROUND,FOR ALL ENTRIES IN.除了各种聚合函数还有字段拆分,连接,子语句查询,字段类型转换,分情况赋值...
T-SQL表操作的基础 T-SQL表的维护 select TOP的用法
经典基础sql查询语句,适合于初学者。数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]...
教程名称:SQL数据库查询技术教学课件9讲课程目录:【】01 数据库基础【】02 设置SQL语句执行的环境【】03 SQL语言基础【】04 数据表【】05 索引【】06 查询数据----SELECT语句【】07 条件查询【】08 高级条件查询...
SQL循序渐进(2)-------表的基础知识 SQL循序渐进(3)-------数据检索 SQL循序渐进(4)-------创建表 SQL循序渐进(5)-------插入数据到表 SQL循序渐进(6)-------删除表 SQL循序渐进(7)-------更新记录 SQL...
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名 --实现代码: SELECT SN,SD FROM S WHERE [S#] IN( SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N'税收基础') 2. 使用标准SQL嵌套...
这里用了(My)SQL这样的标题,目的是介绍标准SQL的同时,也将MySQL在标准SQL上的扩展一同介绍给读者。SQL语句主要可以划分为以下3个类别.DDL(DataDefinitionLanguages)语句:数据定义语言,这些语句定义了不同的...
SQL基础语法 详细介绍SQL的基本语法结构,包括SELECT、INSERT、UPDATE等 三、学习建议 边学边练:在学习过程中,尽量多动手实践,通过编写SQL语句来加深理解和记忆。 查阅文档:遇到问题时,及时查阅相关文档或...
SQLSQLSQL--1. 使用SQL语句创建上述3个表(10)。 create database DBDEMO go use DBDEMO go if exists( select * from sysobjects where id = object_id('WL') and sysstat & 0xf = 3) drop table WL go create ...
第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ? 5、SQL 视频教程-对...
主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。 书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...
主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...
主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。 书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...