`
fyd222
  • 浏览: 103960 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SQL 基础-->SELECT 查询

 
阅读更多

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

--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

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相关

分享到:
评论

相关推荐

    SQL 基础--SELECT 查询

    在逻辑运算中,空值有特殊的处理方式,如`AND`运算优先级是:F -> NULL -> T,而`OR`运算优先级是:T -> NULL -> F。 处理空值的函数包括NVL、NVL2和NULLIF以及COALESCE。NVL函数用于当表达式1为空时返回表达式2的...

    计算机后端-PHP视频教程. php与mysql基础-sql5-发送查询(select操作).wmv

    计算机后端-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')

    sql-map-2.dtd和sql-map-config-2.dtd

    例如,`<sqlMap>`元素用于包含具体的SQL语句,`<select>`、`<insert>`、`<update>`和`<delete>`元素则分别用于定义查询、插入、更新和删除操作。通过引入sql-map-2.dtd,XML编辑器可以提供代码补全和错误检查,提高...

    计算机后端-PHP视频教程. php与mysql基础-sql4-发送查询(非select操作).wmv

    计算机后端-PHP视频教程. php与mysql基础-sql4-发送查询(非select操作).wmv

    计算机后端-PHP视频教程. php与mysql基础-sql基础8-select(只按主键查询).wmv

    计算机后端-PHP视频教程. php与mysql基础-sql基础8-select(只按主键查询).wmv

    sql server 2012 T-SQl基础教程 源码和示例数据库

    《SQL Server 2012 T-SQL基础教程——源码与示例数据库》 本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程...

    Oracle sqlplus 操作实践

    - `SQL> spool filename`可以实现假脱机输出,将查询结果保存到文件,`SQL> spool off`停止假脱机输出。 最后,Java连接Oracle数据库通常涉及JDBC驱动。在Java代码中,你需要导入相应的JDBC驱动,创建数据库连接,...

    x-pack-sql-jdbc-7.4.2

    7.4.2版本确保了与多种SQL语法的兼容性,包括SELECT、INSERT、UPDATE、DELETE等基础语句,以及JOIN、GROUP BY、HAVING等复杂查询。这使得开发人员能够利用熟悉的SQL语法在Elasticsearch中进行数据操作,而无需学习新...

    oracle常用命令

    - **`startup`**:默认执行三个步骤:`startup nomount` -> `alter database mount` -> `alter database open`。 - **`startup restrict`**:此模式限制了数据库的访问权限,只有管理员可以登录。适用于维护或紧急...

    SQL语句大全

    - `SQL> SELECT * FROM all_users;` 获取数据库中所有用户的信息。 12. **新建用户并授权** - `SQL> CREATE USER a IDENTIFIED BY a;` 创建一个新的用户a,并设置密码为a。 - `SQL> GRANT connect, ...

    SQLServer-sql查询入门

    #### 二、SQL基础知识 - **SQL的重要性**:对于从事网站开发或维护数据库的人来说,熟练掌握SQL是至关重要的技能之一。无论是在ActiveServerPages中还是其他环境中,都需要使用SQL来访问和操作数据库。 - **数据存储...

    SQL基础教程-Mick-示例程序&习题答案

    本教程“SQL基础教程-Mick-示例程序&习题答案”由Mick编写,旨在为初学者提供一个实用的学习资源,帮助他们快速掌握SQL的核心概念和操作。 1. SQL基础知识: - 数据类型:SQL支持多种数据类型,如整数(INT)、...

    SQL语句基础教程

    SQL语句基础教程旨在帮助新手和需要复习SQL的资料仓储业界老将,学习SQL基础知识和语法。 SQL指令 -------- SQL指令是SQL语言的基础,用于储存、读取、处理数据库中的资料。常用的SQL指令包括: * SELECT:从...

    SERVER SQL学习教程

    - **数据查询**:掌握SELECT语句,包括投影(SELECT)、选择(WHERE)、排序(ORDER BY)、分组(GROUP BY)和聚合函数(COUNT、SUM、AVG等)。 - **数据插入、更新和删除**:理解INSERT、UPDATE和DELETE语句的...

    oracle操作命令

    - **示例**: 使用`SQL> select name from v$database;`查看当前数据库的名字。 6. **查看用户权限** - **命令**: `SQL> select * from V_$PWFILE_USERS;` - **作用**: 显示具有SYSDBA或SYSOPER权限的用户列表。 ...

    learn-sql-the-hard-way-笨方法学sql

    通过这个课程,读者将不仅学会SQL的基础语法,还能掌握处理复杂查询、优化数据库性能以及设计高效数据库结构的技能。实践是学习SQL的关键,这本书通过大量的例子和练习,鼓励读者动手操作,从而真正理解并掌握SQL这...

    SQL查询 - 复习1

    本文将对SQL查询的基础知识进行总结和梳理,涵盖select语句、where子句、group by子句、having子句、聚合函数等内容。 一、SELECT语句 SELECT语句是SQL查询中最基本的语句,它用于从数据库表中检索数据。基本语法...

    sql学习-sql练习-SQL必知必会

    首先,SQL的四大基本操作是SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)。这些操作构成了SQL的核心,是理解和应用SQL的基础。 1. **SELECT**:这是SQL中使用最频繁的命令,用于从数据库中检索...

    sql--常用sql语句查询

    ### SQL基础查询语句 1. **查找含有特定关键词的数据:** - `SELECT * FROM dictionary WHERE INSTR(comments, 'index') > 0;` 这条语句用于从`dictionary`表中筛选出`comments`字段中含有“index”关键字的所有...

Global site tag (gtag.js) - Google Analytics