SQL 基础-- SELECT 查询

本文介绍了SQL的基础,特别是SELECT查询的使用。内容涵盖了SQL的结构化查询语言分类、特点、SQL*PLUS特性,以及如何对数字和日期类型进行算术运算。还详细讲解了与空值相关的操作,如NULL的表示、空值处理的规则以及相关函数如NVL、NVL2、NULLIF和COALESCE。最后通过示例展示了如何使用SELECT语句选择全部或部分字段,并进行算术运算和处理空值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

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

--SQL 基础-->SELECT 查询

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

/*

一、SQL 结构化查询语言

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

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

 

二、SQL的特点

    SQL 语句不区分大小写

    SQL 语句能输入一行或多行

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

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

    缩进可提高可读性

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

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

 

三、SQL*PLUS特征:

    字符日期左对齐

    数字右对对齐

    列名默认大写

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

 

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

    +  

     

     

     

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

 

五、空值

    空值一般用NULL表示

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

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

    空不与任何值相等

 

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

    某个列不为空: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值