01-表空间_用户创建
sql
-- 查看当前用户
select user FROM dual;
--创建表空间
--datefile '地址'
--size
--autoextend on
--next
create tablespace test
datafile 'c:/data/test.dbf'
size 100m
autoextend on
next 10m;
--创建用户 default tablespace 默认表空间
create user c##user
identified by itcast
default tablespace waterboss;
--给新用户授权 grant dba to c##user;
grant dba to c##user;
--查看用户
select user FROM dual;
02-数据类型
sql
-- 字符串类型
-- char(10)
-- varchar(10)
-- long
-- string
-- 数字类型
-- number(5)
-- number(5,2)
-- 时间类型
-- data ==> current_date
-- timestamp ==> current_timestamp
-- 把unix类型的时间戳 转化为data时间类型
-- SELECT date '1970-01-01' + NUMTODSINTERVAL(1711361758, 'SECOND') from dual;
03-表操作
sql
-- 如果想要主键自增长 需要设置 自增序列
-- create sequence seq_userinfo
-- increment by 1
-- start with 1
-- nomaxvalue
-- nominvalue
-- cache 20;
-- 查看表结构
-- 在命令窗口 desc 表名
-- 在pl/sql中 SELECT DBMS_METADATA.GET_DDL('TABLE','XXX') FROM DUAL;
-- 注意: 表名必须大写
-- 1. 创建表(主键 没有自增长)
create table test
(
id number primary key,
name varchar2(100),
age number
);
-- 修改表结构
-- 2. 增加一个字段
-- ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...)
alter table test
add (
height number(5, 2)
);
-- 增加多个字段
alter table test
add (
height1 number(5, 2),
height2 number(5, 2)
);
-- 3. 修改字段
-- ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...)
alter table test
modify (
height1 number(10),
height2 number(10)
);
-- 4. 修改字段名
-- ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
alter table test rename column height1 to ht;
-- 5. 删除一个字段
-- ALTER TABLE 表名称 DROP COLUMN 列名
alter table test drop column height;
-- 6. 删除多个字段
-- ALTER TABLE 表名称 DROP (列名 1,列名 2...)
alter table test drop (ht,height2);
-- 7. 删除表
drop table test;
04-数据增删改
sql
-- 创建表
create table test
(
id number primary key,
name varchar2(100),
age number
);
-- 插入一条数据
insert into test values(1,'老王',18);
commit;
-- 插入多条数据
insert into test values(2,'老李',28);
insert into test values(3,'老谢',38);
-- 查看数据
select * from test;
-- 回滚
rollback;
-- 查看数据
select * from test;
-- 数据修改和mysql一样
-- 数据删除和mysql一样
-- delete可以回滚
delete from test;
select * from test;
rollback;
-- truncate table 不可以回滚
truncate table test;
select * from test;
rollback;
05-条件查询语句
sql
--1-使用DISTINCT关键字是最简单和直接的去重方法之一,它可以在SELECT语句中去重查询结果集。
SELECT DISTINCT column1, column2
FROM table_name;
--2-使用ROW_NUMBER()函数和CTE(公共表表达式)
WITH CTE AS (
SELECT column1, column2,
ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY column1, column2) AS rn
FROM table_name
)
SELECT column1, column2
FROM CTE
WHERE rn = 1;
--3-使用GROUP BY子句可以对查询结果进行分组,结合聚合函数可以实现去重。
SELECT column1, column2
FROM table_name
GROUP BY column1, column2;
06-伪列rowid和rownum的使用
在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。
ROWID
ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。它是一个字符串,包含了行所在的数据块地址、行地址以及行在数据块中的相对位置等信息。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。以下是使用ROWID的一些示例:
sql
-- 伪列 并不真实存在于表中 他是根据orcale在读取插入数据的时候 根据物理地址信息编码形成的信息
--1-查找指定行的ROWID
SELECT ROWID, column1, column2
FROM table_name
WHERE condition;
--2-根据ROWID删除行
DELETE FROM table_name
WHERE ROWID = 'AAAR8pAABAAALPwAAA';
--3-根据ROWID更新行
UPDATE table_name
SET column1 = 'new_value'
WHERE ROWID = 'AAAR8pAABAAALPwAAA';
ROWNUM
ROWNUM是Oracle中的另一个伪列,用于给查询结果集中的行分配一个行号。它在查询中的应用通常是为了限制结果集的大小或进行分页查询。以下是使用ROWNUM的一些示例:
sql
--1-限制结果集的大小
SELECT column1, column2
FROM table_name
WHERE ROWNUM <= 10;
--2-分页查询
SELECT column1, column2
FROM (
SELECT column1, column2, ROWNUM AS rn
FROM table_name
WHERE condition
)
WHERE rn BETWEEN 11 AND 20;
07-聚合函数
sql
--COUNT函数用于计算查询结果集中行的数量
SELECT COUNT(column_name) AS count
FROM table_name;
--SUM函数用于计算数值列的总和
SELECT SUM(column_name) AS total_sum
FROM table_name;
--AVG函数用于计算数值列的平均值
SELECT AVG(column_name) AS average
FROM table_name;
--MAX函数用于找到数值列的最大值
SELECT MAX(column_name) AS max_value
FROM table_name;
--MIN函数用于找到数值列的最小值
SELECT MIN(column_name) AS min_value
FROM table_name;
--GROUP BY 和聚合函数的结合使用
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
08-连接查询
在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。以下是一些常见的连接查询示例:
sql
--内连接(INNER JOIN)
--内连接返回两个表中符合连接条件的行,这是最常见的连接类型。
SELECT t1.column1, t2.column2
FROM table1 t1
INNER JOIN table2 t2 ON t1.key_column = t2.key_column;
-- 左连接(LEFT JOIN)
--左连接返回左边表中的所有行,以及右边表中符合连接条件的行。如果右边表中没有匹配的行,则返回NULL
SELECT t1.column1, t2.column2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.key_column = t2.key_column;
-- 右连接(RIGHT JOIN)
--右连接返回右边表中的所有行,以及左边表中符合连接条件的行。如果左边表中没有匹配的行,则返回NULL。
SELECT t1.column1, t2.column2
FROM table1 t1
RIGHT JOIN table2 t2 ON t1.key_column = t2.key_column;
--全连接(FULL OUTER JOIN)
--全连接返回左右两个表中的所有行,如果某个表中没有匹配的行,则返回NULL。
SELECT t1.column1, t2.column2
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.key_column = t2.key_column;
09-子查询
在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。以下是一些常见的Oracle子查询的示例:
sql
--1. 子查询作为WHERE子句的条件
--子查询可以嵌套在WHERE子句中,用于提供额外的过滤条件。
SELECT column1, column2
FROM table_name
WHERE column1 IN (
SELECT column1
FROM another_table
WHERE condition
);
--2. 子查询作为FROM子句的数据源
--子查询可以嵌套在FROM子句中,作为查询的数据源。
SELECT t1.column1, t2.column2
FROM (
SELECT column1, column3
FROM table1
WHERE condition
) t1
INNER JOIN table2 t2 ON t1.column1 = t2.column1;
--3. 子查询作为SELECT子句的列
--子查询可以嵌套在SELECT子句中,用于计算额外的列或值。
SELECT column1,
(SELECT COUNT(*) FROM another_table WHERE column2 = table_name.column1) AS count
FROM table_name;
--4. 子查询作为INSERT语句的VALUES子句
--子查询可以作为INSERT语句的VALUES子句的一部分,用于将查询结果插入到目标表中。
INSERT INTO table_name (column1, column2)
SELECT column1, column2
FROM another_table
WHERE condition;