三, SQL语言
1, SQL标准
① SQL1992② SQL1999
2, 第四代语言
面向"问题"的语言,只需要告诉计算机做什么,而不需要管怎么做.
3, SQL语句分类
(1) 查询语句
C:\Windows\System32>sqlplus scott/tiger① desc
SQL> desc empSQL> desc dept
SQL> desc salgrade
说明:
A. 描述的内容: 名称 是否为空? 类型
B. varchar2, variable char 2, varchar2 支持国际化,而varchar不支持
② *
SQL> select * from salgrade;SQL> select * from dept;
③ dual
A. 表dual, 字段 dummy(假的, 虚设的)SQL> desc dual;
名称 类型
-------------------
DUMMY VARCHAR2(1)
B. 计算算术表达式
SQL> select 2*3 from dual;
2*3
----------
6
C. 当前系统日期
SQL> select sysdate from dual;
SYSDATE
--------------
10-8月 -13
④ 别名
SQL> select ename, sal*12 annual_sal from emp;ENAME ANNUAL_SAL
-------------------- ----------
WARD 15000
JONES 35700
MARTIN 15000
注: 当别名里有 空格 汉字 或其他特殊字符时, 需要用双引号
同时双引号能保持 原本的格式, 比如 小写不会自动变为大写.
当别名用单引号括起来时, ORA-00923: 未找到要求的 FROM 关键字
annual, 每年的; sal, salary.⑤ NULL值
SQL> select ename, sal*12 from emp;SQL> select ename, comm from emp;
SQL> select ename, sal*12+comm from emp;
注: 表达式中只要有NULL值, 则整个表达式为NULL
⑥ 字符串连接符 ||
1) 连接列名
SQL> select ename || sal from emp;ENAME||SAL
----------------------------------
WARD1250
JONES2975
MARTIN1250
2) 连接字符串
SQL> select ename || '123456' from emp;SQL> select ename || '123''A''456' from emp;
注: 使用双引号界定字符是错误的
单引号里面有单引号, 使用两个单引号表示一个单引号
⑦ distinct, 去除重复行
SQL> select distinct deptno from emp; -- deptno相同的为重复行SQL> select distinct job from emp;
SQL> select distinct deptno, job from emp; -- 去重复的组合
⑧ where
1) 等于, =
SQL> select * from emp2 where deptno = 10;
SQL> select * from emp where job = 'CLERK';
2) 大于小于, > <
SQL> select ename, sal from emp where sal > 1500;SQL> select ename, sal from emp where ename > 'CBA';
3) 不等于, <>
SQL> select deptno, dname from dept where deptno <> 10;4) between low_num and high_num
SQL> select ename, sal from emp where sal between 950 and 1500;SQL> select ename, sal from emp where sal >= 950 and sal <= 1500;
5) IS [NOT] NULL
SQL> select ename, sal, comm from emp where comm is null;SQL> select ename, sal, comm from emp where comm is not null;
注意: 如果 not in (value1, ...) 中 有 NULL值, 则返回false
6) column [not] in (value1, value2, ...)
SQL> select ename, sal from emp where sal in (950, 1250, 1500);SQL> select ename, sal from emp where sal not in (950, 1250, 1500);
SQL> select ename, sal from emp where ename in ('SCOTT', 'KING');
7) 日期
SQL> select ename, hiredate from emp where hiredate > '10-5月-81';注: 当没用使用日期函数处理日期时, 可使用字符串来比较日期.
8) 模糊查询, like
通配符:%, 0个或多个
_, 单个字符
转义字符:
使用 escape 指定
SQL> select ename from emp where ename like '123$%' escape '$';
⑨ order by
1) 升序 asc (默认)
SQL> select * from dept order by deptno;SQL> select * from dept order by deptno asc;
2) 降序 desc
SQL> select * from dept order by deptno desc;3) 多列的情况
SQL> select ename, empno, deptno from emp2 order by deptno asc, deptno desc;
⑩ 综合
SQL> select ename, sal*12 annual_sal from emp2 where ename not like '_A%' and sal > 800
3 order by sal desc;
(2) DML语句
(3) DDL语句
(4) 事务控制语句