SQL定义
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统【1】。
SQL历史
SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机工业界和计算机用户的欢迎。1980年10月,经美国国家标准局(ANSI)的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL。
SQL 分类
- DQL(Data Query Language)
SELECT - DML(Data Manage Language)
INSERT、UPDATE、DELETE - DDL(Data Define Language)
Create,Alter,Drop,Rename,Truncate,Comment - DCL(Data Control Language)
Grant,Revoke - TCL(Transaction Control Language)
commit,rollback,savepoint
运行环境
- Sqlplus
Oracle客户端 - Sqldeveloper
Oracle的UI客户端 - PL/SQL
第三方UI客户端
时间
时间受限于环境变量。
ALTER SESSION SET NLS_DATA_FORAMT='yyyy-mm-dd';
列的缺省格式
- 缺省的对齐方式
- 左部对齐:日期,字符数据
- 右部对齐:数字格式数据
SQL> select * from employee;
ENO ENAME SAL BIRTH_DAY
---------- ---------- ---------- ---------
1 Kobe 1000 03-FEB-20
- 缺省的显示方式:大写
SQL语句的使用
在SQL语句中运用数学表达式
SQL> select ename, sal, sal+300 from employee;
ENAME SAL SAL+300
---------- ---------- ----------
Kobe 1000 1300
定义空值(Null)
空值是一个表达不可用、未分配、未知、或者不适用等意义的值。空值与零和空格的概念不同,应该严格区分。
Null.png
定义一个列别名
- 重新命名一个列的名字时很有用。
- 可以用
AS
关键字为列取一个别名。 - 如果别名中包含空格,或者其他特殊字符,则需要用引号(“”)将别名包含起来。
select ename, sal+300 as "new salary" from employee;
ENAME new salary
---------- ----------
Kobe 1300
1300
1300
1300
数学表达式中空值的处理
如果数学表达式中包含一个空值,那么该数学表达式的结果为空值。
select ename, sal+300 from employee;
ENAME SAL+300
---------- ----------
Kobe 1300
Ross
使用连接运算符和文字字符串
SQL> select 'Dear '||ename||': your salary is '||sal from employee;
'DEAR'||ENAME||':YOURSALARYIS'||SAL
------------------------------------------------------------------------
Dear Kobe : your salary is 1000
Dear Ross : your salary is
消除掉重复行
在SELECT语句中用DISTINCT关键字来消除所有重复的行。
SELECT DISTINCT ENAME FROM EMPLOYEE;
dual表
SQL> SELECT 1111111/2222 FROM dual;
1111111/2222
------------
500.049955
dual是数据字典表,只有一行一列,通常提供杠杆作用。
选择查询出的行
- 用where子句限定查询出的行:
SELECT [DISTINCT] [ * | column [alias], ...]
FROM table
[WHERE condition(s)] - WHERE子句中,数字不用引号
字符串和日期
- 字符串和日期值应当用单引号括起来
- 字符串值大小写敏感,日期值对于日期的格式敏感
- 例如,23-Jul-14,为14年7月23日
比较操作符
操作符 | 含义 |
---|---|
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于或等于 |
<> | 不等于 |
比较操作符忽略空值。
其他比较操作符
操作符 | 含义 |
---|---|
BETWEEN...AND... | 在两个值之间(包含边界值) |
IN(list) | 在列出的值中 |
LIKE | 与输出的字符串匹配 |
IS NULL | 是一个空值 |
使用LIKE操作符
可以用LIKE进行某个字符串的通配符匹配,来选出某些行。查询条件中既可以包含字符,也可以包含数字:
- %代表0个或者多个字符
- _代表一个字符
- 使用escape进行特殊字符转义说明
SQL> select * from employee where ename like '%be%';
ENO ENAME SAL BIRTH_DAY
---------- ---------- ---------- ---------
1 Kobe 1000 03-FEB-20
SQL> select * from system.employee where ENAME like 'O\%%' escape '\';
ENO ENAME SAL BIRTH_DAY
---------- ---------- ---------- ---------
6 O% 03-FEB-20
逻辑操作符
操作符 | 含义 |
---|---|
AND | 两个条件都为TRUE ,则返回TRUE
|
OR | 两个条件中任何一个为TRUE ,则返回TRUE
|
NOT | 如果条件为FALSE ,返回TRUE
|
优先级顺序
用圆括号可以改变操作符的优先级次序。
顺序 | 操作符 |
---|---|
1 | 所有比较操作符 |
2 | NOT |
3 | AND |
4 | NOT |
ORDERBY 子句
ORDER BY 子句跟在SELECT语句之后,对行进行排序:
- ASC:升序,缺省
- DESC:降序
可以按照多个列进行排序,用于排序的列甚至可以不出现在SELECT的列中。
排序时,如果升序,默认Null在最后;如果降序,默认Null在最开始。
SQL 语句编码基本规范
- SQL语句不是大小写敏感的
- SQL语句可以分布在一行或者多行中
- 关键字不能进行缩写,也不能分布在两行
- 一般地,不同的子句写在不同的行为宜
- 经常用跳格或者缩进来增强可读性
- 建议在一个开发项目中统一大小写和换行规范
【1】结构化查询语言
网友评论