oracle基础入门总结
提示:还在陆续更新中,如有问题,请指出,感谢!
文章目录
安装
没啥可说的
创建新用户并授权
1.1 打开并登录
普通登录我们看不到密码容易出错,我们直接管理员登录
sqlplus 用户名/密码 as sysdba
1.2 创建新用户
eg: 使用以下 CREATE USER 语句创建一个新用户:ot
sql> CREATE USER OT IDENTIFIED BY Orcl1234;
1.3授权
通过使用GRANT语句授权ot用户权限
sql> GRANT CONNECT, RESOURCE, DBA TO OT;
orcle基础知识
创建表
1.字符型
(1)CHAR : 固定长度的字符类型,最多存储 2000 个字节
(2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(3)LONG : 大文本类型。最大可以存储 2 个 G
2.数值型
NUMBER : 数值类型
例如:NUMBER(5) 最大可以存的数为 99999
NUMBER(5,2) 最大可以存的数为 999.99
3.日期型
(1)DATE:日期时间型,精确到秒
(2)TIMESTAMP:精确到秒的小数点后 9 位
4.二进制型(大数据类型)
(1)CLOB : 存储字符,最大可以存 4 个 G
(2)BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G
5.例子:
CREATE TABLE 表名称(
字段名 类型(长度) primary key,
字段名 类型(长度),
.......
);
create table t_pricetable
(
id number primary key,
price number(10,2),
ownertypeid number,
minnum number,
maxnum number
);
修改表
增加字段:
ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)
ALTER TABLE T_OWNERS ADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
)
修改字段
ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)
ALTER TABLE T_OWNERS MODIFY
(
REMARK CHAR(20),
OUTDATE TIMESTAMP
)
修改字段名
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE
删除字段
-- 删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名
-- 删除多个字段
ALTER TABLE 表名称 DROP (列名 1,列名 2...)
ALTER TABLE T_OWNERS DROP COLUMN REMARK
ALTER TABLE T_OWNERS DROP(REMARK,EXITDATE,KUA)
删除表
DROP TABLE 表名称
数据增删改
插入数据
INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)
INSERT INTO T_OWNERS
VALUES
( 1, ' 张 三 丰', 1, '2-2', '5678', SYSDATE, 1 );
INSERT INTO T_OWNERS
VALUES
( 2, '赵大侃', 1, '2-3', '9876', SYSDATE, 1 );
commit;
修改数据
UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;
需求:将 ID 为 1 的业主的登记日期更改为三天前的日期
UPDATE T_OWNERS
SET adddate = adddate - 3
WHERE
id = 1;
commit;
删除数据
DELETE FROM 表名 WHERE 删除条件;
需求:删除业主 ID 为 2 的业主信息
DELETE
FROM
T_OWNERS
WHERE
id = 2;
### 查询
精准查询
需求:查询水表编号为 30408 的业主记录
SELECT
*
FROM
T_OWNERS
WHERE
WATERMETER = '30408'
模糊查询
需求:查询业主名称包含“刘”的业主记录
SELECT
*
FROM
T_OWNERS
WHERE
NAME LIKE '%刘%'
and运算符
需求:查询业主名称包含“刘”的并且门牌号包含 5 的业主记录
SELECT
*
FROM
T_OWNERS
WHERE
NAME LIKE '%刘%'
AND HOUSENUMBER LIKE '%5%'
or运算符
需求:查询业主名称包含“刘”的或者门牌号包含 5 的业主记录
SELECT
*
FROM
T_OWNERS
WHERE
NAME LIKE '%刘%'
OR HOUSENUMBER LIKE '%5%'
and 与 or 运算符混合使用
需求:查询业主名称包含“刘”的或者门牌号包含 5 的业主记录,并且地址编号
为 3 的记录
SELECT
*
FROM
T_OWNERS
WHERE
( NAME LIKE '%刘%' OR HOUSENUMBER LIKE '%5%' )
AND ADDRESSID =3
范围查询
需求:查询台账记录中用水字数大于等于 10000,并且小于等于 20000 的记录
我们可以用>= 和<=来实现,语句
SELECT
*
FROM
T_ACCOUNT
WHERE
USENUM >= 10000
AND USENUM <= 20000
空值查询
需求:查询 T_PRICETABLE 表中 MAXNUM 为空的记录
SELECT
*
FROM
T_PRICETABLE
WHERE
MAXNUM IS NULL
去掉重复记录
需求:查询业主表中的地址 ID,不重复显示
SELECT DISTINCT
ADDRESSID
FROM
T_OWNERS
排序查询
升序排序
需求:对 T_ACCOUNT 表按使用量进行升序排序
SELECT
*
FROM
T_ACCOUNT
ORDER BY
USENUM
升序排序
需求:对 T_ACCOUNT 表按使用量进行升序排序
SELECT
*
FROM
T_ACCOUNT
ORDER BY
USENUM DESC
伪列
表中的每一行在数据文件中都有一个物理地址,ROWID 伪列返回的就是该行的
物理地址。使用 ROWID 可以快速的定位表中的某一行。ROWID 值可以唯一的
标识表中的一行。由于 ROWID 返回的是该行的物理地址,因此使用 ROWID 可
以显示行是如何存储的。
select rowID,t.* from T_AREA t
ROWNUM
在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回 1,
第二行返回 2,以此类推。通过 ROWNUM 伪列可以限制查询结果集中返回的行
数。
select rownum,t.* from T_OWNERTYPE t
聚合查询
求和
需求:统计 2012 年所有用户的用水量总和
SELECT
SUM( USENUM )
FROM
T_ACCOUNT
WHERE
YEAR = '2012'
平均
需求:统计 2012 年所有用水量(字数)的平均值
SELECT
AVG( USENUM )
FROM
T_ACCOUNT
WHERE
YEAR = '2012'
求最大值
需求:统计 2012 年最高用水量(字数)
SELECT
MAX( USENUM )
FROM
T_ACCOUNT
WHERE
YEAR = '2012'
统计记录个数 count
需求:统计业主类型 ID 为 1 的业主数量
SELECT
COUNT( * )
FROM
T_OWNERS T
WHERE
OWNERTYPEID =1
分组查询
需求:按区域分组统计水费合计数
SELECT
AREAID,
SUM( MONEY )
FROM
T_ACCOUNT
GROUP BY
AREAID
分组后条件查询 having
需求:查询水费合计大于 16900 的区域及水费合计
SELECT
AREAID,
SUM( MONEY )
FROM
T_ACCOUNT
GROUP BY
AREAID
HAVING
SUM( MONEY ) > 16900
链接查询
日期
日期添加
INSERT INTO T_ACCOUNT ( METERDATE ,ID)
VALUES
( TO_DATE( '2008-05-05 13:13:13','YY-MM-DD HH24:MI:SS'),'77' );
//同时添加了id是因为id不能为空
日期增加
分组后条件查询 having
需求:查询水费合计大于 16900 的区域及水费合计
SELECT
AREAID,
SUM( MONEY )
FROM
T_ACCOUNT
GROUP BY
AREAID
HAVING
SUM( MONEY ) > 16900
链接查询
日期
日期添加
INSERT INTO T_ACCOUNT ( METERDATE ,ID)
VALUES
( TO_DATE( '2008-05-05 13:13:13','YY-MM-DD HH24:MI:SS'),'77' );
//同时添加了id是因为id不能为空