SQL:Structured Query Language,结构化查询语言。
SQL不是Oracle的专利技术,它是关系数据库管理系统的标准语言,是应用系统与数据库进行交互操作的接口。
SQL语言特点如下:
SQL语言可以分为5类:查询语句、数据操纵语言、数据定义语言、事务控制和数据控制语言。
SELECT * FROM table_name;
在SELECT 关键字后指定列名,检索多个列的数据,在列之间使用逗号(,)隔开。
SELECT FROM table_name
WHERE expression;
比较操作符 | 含义 | 比较操作符 | 含义 |
= | 等于 | < | 小于 |
<>,!= | 不等于 | BETWEEN...AND... | 在两值之间 |
>= | 大于等于 | IN | 匹配于列表值 |
<= | 小于等于 | LIKE | 匹配于字符样式 |
> | 大于 | ISNULL | 测试NULL |
select column1,column2,... from table_name where hiredate > to_date('01-1月-02','dd-mon-yy');
select column1,column2,...from table_name where column3 between 1000 and 2000;
select column1,column2,.. from table_name where column3 like 'S%';
select column1,column2,... from table_name where column3 like '_A%';
select column1,column2,... from table_name where column3 in (100,200);
逻辑操作符 | 含义 |
AND | 如果条件都是TRUE,则返回TRUE,否则返回FALSE |
OR | 如果人一个条件时TRUE,则返回TRUE,否则返回FALSE |
NOT | 如果条件是FALSE,则返回TRUE;如果条件是TRUE,则返回FALSE |
(逻辑操作符AND、OR、NOT的优先级低于任一种比较操作符,在这3个操作符中,NOT优先级最高,AND其次,OR最低。如果要改变优先级,则需要使用括号)。如下:
select column1,column2,... from table_name where column3 = 20 and column4 = 'TOM';
select column1,column2,... from table_name where column3 = 20 or column4 = 'TOM';
select column1,column2,... from table_name where column3 not in (20,30);
在执行查询操作时,默认情况下会按照数据插入的先后顺序来显示行数据。但是在实际应用中经常需要对数据进行排序,以显示更直观的数据,数据排序是使用ORDER BY 子句来完成,其语法如下:
SELECT FROM table_name WHERE expression ORDER BY column1[,column2,...][ASC | DESC];
select column1,column2,... from table_name where column3 = 30 order by column4;
select coulumn1,column2,...from table_name where column3 = 30 order by column4 desc;
select column1,column2,... from table_name where column3 = 30 order by column4,column5 desc;
(如果在SELECT语句中同时包含有ORDER BY 、HAVING 以及 GROUP GY子句,则必须将ORDER BY子句放在最后。)
GROUP BY 子句用于对查询结果进行分组统计。GROUP BY 语法如下:
SELECT FROM table_name GROUP BY column3[,column4,...];
select column1,column2,... from table_name group by column1;
select column1,column2,... from table_name group by column1,column2 order by column1;
HAVING子句用于限制分组统计结果,并且HAVING子句必须跟在GROUP BY子句后面。如下:
select column1,column2,column3,... from table_name group by column1 having column2 > 30 ;
WHERE、GROUP BY 和HAVING子句可以在同一个查询中一起使用。这样使用时,WHERE子句首先对返回行进行过滤,然后GROUP BY 子句对保留的行进行分组,最后HAVING子句对行进行过滤。如下:
select column1,column2,column3,... from table_name where column1 > 10 group by column2 having column3 >20;
DISTINCT关键字可以取消完全重复的显示结果。(默认使用ALL关键字)
select distinct column from table_name ;
当执行查询操作时,可以在数字列上使用算术表达式(+、-、*、/),其中乘、除的优先级要高于加、减。如果要改变优先级,可以使用括号。如下:
select column1,column2*(1+0.2) from table_name where column3 > 10;
INSERT语句一般有两种:
INSERT INTO table_name [column1,column2,...] VALUES (value1,vslue2,...);
INSERT INTO table_name1 [column1,column2,...] SELECT (value1,vslue2,...) FROM table_name2;
(第一条INSERT 语句用于向table_name表中插入单条记录,第二条INSERT语句用于把从table_name2表中查询出来的数据插入到表table_name1中,实现多条记录的插入。)
注:无论是插入单条记录,还是插入多条记录,都应该注意要插入的值与要插入的字段相互对应。
UPDATE语句的语法:
UPDATE table_name SET column1=value1 [,column2=value2,column3=value3,...] WHERE espression;
DELETE语句的语法:
DELETE FROM table_name [WHERE expression];
(使用DELETE语句删除表中数据时,并不能释放被占用的数据块空间,它只是把那些被删除的数据块标记为Unused,将来还可以使用回退(Rollback)操作。)
MERGE常使用场景为,先查找是否存在旧数据,如果存在,则用UPDATE替换,否则用INSERT语句插入。MERGE语句的语法如下:
MERGE INTO table1 USING table2 ON expression
WHEN MATCHED THEN UPDATE ...
WHEN NOT MATCHEN THEN INSERT ...;
连接查询是指基于两个或两个以上表或试图的查询。
SELECT table1.column1,table2.column2 from table1,table2 WHERE table1.column3 = table2.column4;
SELECT t1.column1,t2.column2 from table1 t1,table2 t2 WHERE t1.column3 = 2.column4;
SELECT table1.column1 as "工号",table2.column2 as "姓名" from table1,table2 WHERE table1.column3 = table2.column4;
内连接用于返回满足连接条件的记录。如下:
SELECT table1.column1,table2.column2 from table1 [INNER] JOIN table2 ON table1.column3 = table2.column4;
(默认情况下,在执行连接查询时如果没有指定任何连接操作符,那么这些连接查询都属于内连接。)
外链接是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回不满足条件的记录。语法如下:
SELECT table1.column1,table2.column2 from table1 [LEFT | RIGHT] OUTER JOIN table2 ON table1.column3 = table2.column4;
(在连接条件中可以使用外链接操作符来执行一个外连接;Oracle特有的外连接操作符是:(+)。)
SELECT table1.column1,table2.column2 from table1,table2 WHERE table1.column3 = table2.column4(+);
SELECT table1.column1,table2.column2 from table1,table2 WHERE table1.column3(+) = table2.column4;
自连接是指在同一张表之间的连接查询,主要用于显示上下级关系或者层次关系。如下:
select column1,column2,... from table_name;
事务是由一系列相关的SQL语句组成的最小逻辑工作单元。Oracle系统以事务为单位来处理数据,用以保证数据的一致性。对于事务中的每一个操作要么全部完成,要么全部不执行。
要永久性地记录事务中SQL语句的结果,需要执行COMMIT语句,从而提交事务。要取消SQL语句的结果,需要执行ROLLBACK语句,从而回滚事务,将所有行重新设置为原始状态。
事务开始:
事务结束:
(事务可以是一组SQL命令,也可以是一条SQL语句,这些SQL语句只能是DML语句,而其他SQL语句,例如DDL语句和DCL语句等,一旦执行就立即提交给数据库,不能回滚。)
数据库软件支持多个用户同时与数据库进行交互,每个用户都可以同时运行自己的事务,这种事务就称为并发事务。
如果用户同时运行多个事务,而这些事务都对同一个表产生影响,那么这些事务的影响都是独立的,直到执行一条COMMIT语句时才会彼此产生影响。