SELECT 查询_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1897 | 回复: 0   主题: SELECT 查询        下一篇 
5家肯德基jkjkj
注册用户
等级:新兵
经验:66
发帖:3
精华:0
注册:2012-11-28
状态:离线
发送短消息息给5家肯德基jkjkj 加好友    发送短消息息给5家肯德基jkjkj 发消息
发表于: IP:您无权察看 2015-7-22 14:34:15 | [全部帖] [楼主帖] 楼主

一、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的优先级是:->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运算优先级:->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 ISNOTNULL
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>SELECTDISTINCT 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
NameNull?    Type
----------------------------------------- -------- ----------------------------
EMPNO                                     NOTNULL 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     ORDERBY 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,CASEWHEN e.job_id = j.job_id THENNULLELSE e.job_id ENDAS "Old Job ID"
2  FROM hr.employees e, hr.job_history j
3  WHERE e.employee_id = j.employee_id
4  ORDERBY 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  ORDERBY 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


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论