3.Oracle数据表操作和查询

一、数据操纵语言(DML):

1、简单查询
数据查询是用SELECT命令从数据库的表中提取信息。SELECT语句的语法是:
SELECT *|列名|表达式 FROM 表名 WHERE 条件 ORDER BY 列名
语法解析:
(1) *表示表中的所有列。
(2)列名可以选择若干个表中的列名,各个列表中间用逗号分隔。
(3)表达式可以是列名、函数、常数等组成的表达式。
(4)WHERE子句是查询的条件。
(5)ORDER BY 要求在查询的结果中排序,默认是升序。
Oracle中可以把查询的结果根据结果集中的表结构和数据形成一张新表。
CREATE TABLE 表名 AS SELECT语句
例如: CREATE TABLE INFOS1 AS SELECT * FROM INFOS;
使用上面命令创建的新表中,不存在任何约束,并且把查询的数据一起插入到新表中。如果只复制表结构,只需使查询的条件不成立(比如where 1=2),就不会查询从出任何数据,从而复制一个表结构。
例如:复制表结构

CREATE TABLE INFOS2 AS SELECT * FROM INFOS  WHERE 1=2;

二、数据插入:

INSERT INTO 表名(列名1,列名2……) VALUES (值1,值2……)
语法解析:
(1)列名可以省略。当省略列名时,默认是表中的所有列名,列名顺序为表定义中列的先后顺序。
(2)值的数量和顺序要与列名的数量和顺序一致。值的类型与列名的类型一致。
例如:向INFOS表和SCORES表中插入数据:

INSERT  INTO    INFOS   VALUES  (   ① 2 's100102', '林冲', '男', 22, 2,
3   TO_DATE('2009-8-9 06:30:10','   YYYY-MM-DD HH24:MI:SS '),   ②
4   '西安', '1001'
5   )
6   /
1 row inserted
SQL> INSERT INTO    INFOS   VALUES  (  's100104','阮小二','男',26,3,SYSDATE,default,'1001');    ③
1 row inserted
SQL>COMMIT; ④

代码解析:
①表名后面缺省了列名,默认是表Infos中的所有列名,values中的值要与表中列一一对应,包括顺序和数据类型的对应。在SQL*Plus中一条语句可以写在多行,那么从第二行开始,sqlplus会为每一行前面给出行号。
②在Oracle中,日期是国际化的,不同的区域安装的数据库,默认的日期格式不同,因此为了程序便于移植,日期的输入要使用TO_DATE函数对日期格式化后输入,采用格式化字符串对日期进行格式化时,格式化字符串中字符不区分大小写,常见的格式化字符如下:
(1)yyyy表示四位年份
(2)mm表示两位月份,比如3月表示为03
(3)dd表示两位日期
(4)hh24表示小时从0-23,hh12也表示小时从0-11。
(5)mi 表示分钟
(6)ss表示秒
③在遇到存在默认值的列时,可以使用default值代替。
④commit是把用户操作(添加、删除、修改操作)提交,只有提交操作后,数据才能真正更新到表中,否则其他用户无法查询到当前用户操作的结果。
在Oracle中,一个INSERT命令可以把一个结果集一次性插入到一张表中。使用的语句是:INSERT INTO 表 SELECT子句,如下:

INSERT INTO INFOS2  SELECT * FROM INFOS;

这种写法,要求结果集中每一列的数据类型必须与表中的每一列的数据类型一致,结果集中的列的数量与表中的列的数量一致。

三、更新数据

例如:
小二’;
UPDATE 表名 SET 列名1=值,列名2=值…… WHERE 条件

SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山东莱芜'  WHERE STUNAME='阮
1   rows updated SQL> commit;

四、删除数据

例如:
DELETE FROM 表名 WHERE 条件

SQL> DELETE FROM INFOS WHERE STUID='s100103';
1 ROW DELETED SQL> COMMIT;

五、truncate

在数据库操作中, TRUNCATE命令(是一个DDL命令)可以把表中的所有数据一次性全部删除,语
法是:
TRUNCATE TABLE 表名

六、高级查询

(1)消除重复行
示例:
在Oracle查询中结果中,可能出现若干行相同的情况,那么可以使用DISTINCT消除重复行。

SELECT DISTINCT DEPTNO FROM EMP;

(2)NULL操作:
A、NULL值查询:

SQL> SELECT ENAME,JOB,SAL,COMM FROM EMP
2   WHERE SAL<2000 AND COMM IS NULL;

在查询条件中NULL值用IS NULL作条件,非NULL值用NOT IS NULL做条件。
(3)IN 操作:在Where子句中可以使用IN操作符来查询其列值在指定的列表中的行
例如:查询出工作职责是SALESMAN、PRESIDENT或者ANALYST的员工

SQL> SELECT ENAME,JOB,SAL FROM EMP

2 WHERE job IN (‘SALESMAN’, ‘PRESIDENT’, ‘ANALYST’);
(4)BETWEEN…AND…
在WHERE子句中,可以使用BETWEEN操作符来查询列值包含在指定区间内的行。比如,查询工资从1000 到2000之间的员工。可以使用传统方法:
WHERE SAL>=1000 AND SAL<=2000
也可以使用:
WHERE SAL BETWEEN 1000 AND 2000
BWTWEEN操作所指定的范围也包括边界。

扫描二维码关注公众号,回复: 927138 查看本文章
SQL> SELECT ename,job,sal FROM EMP WHERE sal BETWEEN 1000 AND 2000;

(5)LIKE模糊查询
在一些查询时,可能把握不准需要查询的确切值,比如百度搜索时输入关键字即可查询出相关的结果,这种查询称为模糊查询。模糊查询使用LIKE关键字通过字符匹配检索出所需要的数据行。字符匹配操作可以使用通配符“%”和“_”:
%:表示零个或者多个任意字符。
_:代表一个任意字符。
例如:

SQL> SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'J%S';

七、Oracle中的伪列:

在Oracle的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。接下来学习两个伪列:ROWID和ROWNUM。

1、ROWID
表中的每一行在数据文件中都有一个物理地址,ROWID伪列返回的就是该行的物理地址。使用ROWID可以快速的定位表中的某一行。ROWID值可以唯一的标识表中的一行。由于ROWID返回的是该行的物理地址,因此使用ROWID可以显示行是如何存储的。
例如:

SQL> SELECT ROWID,ENAME FROM EMP WHERE SAL>2000;

2、ROWNUM
在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。通过ROWNUM伪列可以限制查询结果集中返回的行数。

注意:ROWNUM与ROWID不同,ROWID是插入记录时生成,ROWNUM是查询数据时生成。ROWID标识的是行的物理地址。ROWNUM标识的是查询结果中的行的次序。

例如:查询出员工表中前5名员工的姓名,工作,工资

SQL> SELECT ROWNUM,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=5;

八、Oracle函数:

1、单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果,比如:MOD(x,y)返回x除以y的余数(x和y可以是两个整数,也可以是表中的整数列)。常用的单行函数有:
字符函数:对字符串操作。
ASCII(x):返回字符x的ASCII码
CONCAT(x,y):连接字符串x和y
INSTR(x, str [,start] [,n):在x中查找str,可以指定从start开始,也可以指定从第n次开始
LENGTH(x):返回x的长度LOWER(x):x转换为小写UPPER(x):x转换为大写
LTRIM(x[,trim_str]):把x的左边截去trim_str字符串,缺省截去空格
RTRIM(x[,trim_str]):把x的右边截去trim_str字符串,缺省截去空格TRIM([trim_str FROM] x):把x的两边截去trim_str字符串,缺省截去空格
REPLACE(x,old,new):在x中查找old,并替换为new
SUBSTR(x,start[,length]):返回x的字串,从staart处开始,截取length个字符,缺省length,默认到结尾
示例:

SELECT ASCII('a') FROM DUAL
SELECT CONCAT('Hello', ' world') FROM DUAL SELECT LTRIM('===HELLO===', '=') FROM DUAL SELECT '=='||LTRIM('  HELLO===') FROM DUAL
SELECT RTRIM('===HELLO===', '=') FROM DUAL

数字函数:对数字进行计算,返回一个数字。
ABS(x):x绝对值
CEIL(x):大于或等于x的最小值 ->CEIL(5.4)=6
FLOOR(x):小于或等于x的最大值 ->FLOOR(5.8)=5 MOD(x,y):x除以y的余数
转换函数:可以将一种数据类型转换为另外一种数据类型。
(1)TO_CHAR(d|n[,fmt]):把日期和数字转换为制定格式的字符串。fmt是格式化字符串
例:

SQL> SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date"
    FROM DUAL;

(2)TO_DATE(x [,fmt]):把一个字符串以fmt格式转换为一个日期类型
(3)TO_NUMBER(x[,fmt]):把一个字符串以fmt格式转换为一个数字。
例:

SQL> SELECT TO_NUMBER('-$12,345.67','$99,999.99') "NUM"
2   FROM DUAL
3   /

2、聚合函数:聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值等。

名称 作用 语法
AVG 平均值 AVG(表达式)
SUM 求和 SUM(表达式)
MIN、MAX 最小值、最大值 MIN(表达式)、MAX(表达式)
COUNT 数据统计 COUNT(表达式)

猜你喜欢

转载自blog.csdn.net/hqh1129/article/details/80254809