当前位置:   article > 正文

Oracle入门——基础语法篇_oracle语法教程

oracle语法教程

01-表空间_用户创建

  1. -- 查看当前用户
  2. select user FROM dual;
  3. --创建表空间
  4. --datefile '地址'
  5. --size
  6. --autoextend on
  7. --next
  8. create tablespace test
  9. datafile 'c:/data/test.dbf'
  10. size 100m
  11. autoextend on
  12. next 10m;
  13. --创建用户 default tablespace 默认表空间
  14. create user c##user
  15. identified by itcast
  16. default tablespace waterboss;
  17. --给新用户授权 grant dba to c##user;
  18. grant dba to c##user;
  19. --查看用户
  20. select user FROM dual;

02-数据类型

  1. -- 字符串类型
  2. -- char(10)
  3. -- varchar(10)
  4. -- long
  5. -- string
  6. -- 数字类型
  7. -- number(5)
  8. -- number(5,2)
  9. -- 时间类型
  10. -- data ==> current_date
  11. -- timestamp ==> current_timestamp
  12. -- 把unix类型的时间戳 转化为data时间类型
  13. -- SELECT date '1970-01-01' + NUMTODSINTERVAL(1711361758, 'SECOND') from dual;

03-表操作

  1. -- 如果想要主键自增长 需要设置 自增序列
  2. -- create sequence seq_userinfo
  3. -- increment by 1
  4. -- start with 1
  5. -- nomaxvalue
  6. -- nominvalue
  7. -- cache 20;
  8. -- 查看表结构
  9. -- 在命令窗口 desc 表名
  10. -- 在pl/sql中 SELECT DBMS_METADATA.GET_DDL('TABLE','XXX') FROM DUAL;
  11. -- 注意: 表名必须大写
  12. -- 1. 创建表(主键 没有自增长)
  13. create table test
  14. (
  15. id number primary key,
  16. name varchar2(100),
  17. age number
  18. );
  19. -- 修改表结构
  20. -- 2. 增加一个字段
  21. -- ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...)
  22. alter table test
  23. add (
  24. height number(5, 2)
  25. );
  26. -- 增加多个字段
  27. alter table test
  28. add (
  29. height1 number(5, 2),
  30. height2 number(5, 2)
  31. );
  32. -- 3. 修改字段
  33. -- ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型 [DEFAULT 默认值]...)
  34. alter table test
  35. modify (
  36. height1 number(10),
  37. height2 number(10)
  38. );
  39. -- 4. 修改字段名
  40. -- ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
  41. alter table test rename column height1 to ht;
  42. -- 5. 删除一个字段
  43. -- ALTER TABLE 表名称 DROP COLUMN 列名
  44. alter table test drop column height;
  45. -- 6. 删除多个字段
  46. -- ALTER TABLE 表名称 DROP (列名 1,列名 2...)
  47. alter table test drop (ht,height2);
  48. -- 7. 删除表
  49. drop table test;

04-数据增删改

  1. -- 创建表
  2. create table test
  3. (
  4. id number primary key,
  5. name varchar2(100),
  6. age number
  7. );
  8. -- 插入一条数据
  9. insert into test values(1,'老王',18);
  10. commit;
  11. -- 插入多条数据
  12. insert into test values(2,'老李',28);
  13. insert into test values(3,'老谢',38);
  14. -- 查看数据
  15. select * from test;
  16. -- 回滚
  17. rollback;
  18. -- 查看数据
  19. select * from test;
  20. -- 数据修改和mysql一样
  21. -- 数据删除和mysql一样
  22. -- delete可以回滚
  23. delete from test;
  24. select * from test;
  25. rollback;
  26. -- truncate table 不可以回滚
  27. truncate table test;
  28. select * from test;
  29. rollback;

05-条件查询语句

  1. --1-使用DISTINCT关键字是最简单和直接的去重方法之一,它可以在SELECT语句中去重查询结果集。
  2. SELECT DISTINCT column1, column2
  3. FROM table_name;
  4. --2-使用ROW_NUMBER()函数和CTE(公共表表达式)
  5. WITH CTE AS (
  6. SELECT column1, column2,
  7. ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY column1, column2) AS rn
  8. FROM table_name
  9. )
  10. SELECT column1, column2
  11. FROM CTE
  12. WHERE rn = 1;
  13. --3-使用GROUP BY子句可以对查询结果进行分组,结合聚合函数可以实现去重。
  14. SELECT column1, column2
  15. FROM table_name
  16. GROUP BY column1, column2;

06-伪列rowid和rownum的使用

        在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。

ROWID

        ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。它是一个字符串,包含了行所在的数据块地址、行地址以及行在数据块中的相对位置等信息。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。以下是使用ROWID的一些示例:

  1. -- 伪列 并不真实存在于表中 他是根据orcale在读取插入数据的时候 根据物理地址信息编码形成的信息
  2. --1-查找指定行的ROWID
  3. SELECT ROWID, column1, column2
  4. FROM table_name
  5. WHERE condition;
  6. --2-根据ROWID删除行
  7. DELETE FROM table_name
  8. WHERE ROWID = 'AAAR8pAABAAALPwAAA';
  9. --3-根据ROWID更新行
  10. UPDATE table_name
  11. SET column1 = 'new_value'
  12. WHERE ROWID = 'AAAR8pAABAAALPwAAA';

ROWNUM

        ROWNUM是Oracle中的另一个伪列,用于给查询结果集中的行分配一个行号。它在查询中的应用通常是为了限制结果集的大小或进行分页查询。以下是使用ROWNUM的一些示例:

  1. --1-限制结果集的大小
  2. SELECT column1, column2
  3. FROM table_name
  4. WHERE ROWNUM <= 10;
  5. --2-分页查询
  6. SELECT column1, column2
  7. FROM (
  8. SELECT column1, column2, ROWNUM AS rn
  9. FROM table_name
  10. WHERE condition
  11. )
  12. WHERE rn BETWEEN 11 AND 20;

07-聚合函数

  1. --COUNT函数用于计算查询结果集中行的数量
  2. SELECT COUNT(column_name) AS count
  3. FROM table_name;
  4. --SUM函数用于计算数值列的总和
  5. SELECT SUM(column_name) AS total_sum
  6. FROM table_name;
  7. --AVG函数用于计算数值列的平均值
  8. SELECT AVG(column_name) AS average
  9. FROM table_name;
  10. --MAX函数用于找到数值列的最大值
  11. SELECT MAX(column_name) AS max_value
  12. FROM table_name;
  13. --MIN函数用于找到数值列的最小值
  14. SELECT MIN(column_name) AS min_value
  15. FROM table_name;
  16. --GROUP BY 和聚合函数的结合使用
  17. SELECT department, AVG(salary) AS avg_salary
  18. FROM employees
  19. GROUP BY department;

08-连接查询

        在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。以下是一些常见的连接查询示例:

  1. --内连接(INNER JOIN)
  2. --内连接返回两个表中符合连接条件的行,这是最常见的连接类型。
  3. SELECT t1.column1, t2.column2
  4. FROM table1 t1
  5. INNER JOIN table2 t2 ON t1.key_column = t2.key_column;
  6. -- 左连接(LEFT JOIN)
  7. --左连接返回左边表中的所有行,以及右边表中符合连接条件的行。如果右边表中没有匹配的行,则返回NULL
  8. SELECT t1.column1, t2.column2
  9. FROM table1 t1
  10. LEFT JOIN table2 t2 ON t1.key_column = t2.key_column;
  11. -- 右连接(RIGHT JOIN)
  12. --右连接返回右边表中的所有行,以及左边表中符合连接条件的行。如果左边表中没有匹配的行,则返回NULL。
  13. SELECT t1.column1, t2.column2
  14. FROM table1 t1
  15. RIGHT JOIN table2 t2 ON t1.key_column = t2.key_column;
  16. --全连接(FULL OUTER JOIN)
  17. --全连接返回左右两个表中的所有行,如果某个表中没有匹配的行,则返回NULL。
  18. SELECT t1.column1, t2.column2
  19. FROM table1 t1
  20. FULL OUTER JOIN table2 t2 ON t1.key_column = t2.key_column;

09-子查询

        在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。以下是一些常见的Oracle子查询的示例:

  1. --1. 子查询作为WHERE子句的条件
  2. --子查询可以嵌套在WHERE子句中,用于提供额外的过滤条件。
  3. SELECT column1, column2
  4. FROM table_name
  5. WHERE column1 IN (
  6. SELECT column1
  7. FROM another_table
  8. WHERE condition
  9. );
  10. --2. 子查询作为FROM子句的数据源
  11. --子查询可以嵌套在FROM子句中,作为查询的数据源。
  12. SELECT t1.column1, t2.column2
  13. FROM (
  14. SELECT column1, column3
  15. FROM table1
  16. WHERE condition
  17. ) t1
  18. INNER JOIN table2 t2 ON t1.column1 = t2.column1;
  19. --3. 子查询作为SELECT子句的列
  20. --子查询可以嵌套在SELECT子句中,用于计算额外的列或值。
  21. SELECT column1,
  22. (SELECT COUNT(*) FROM another_table WHERE column2 = table_name.column1) AS count
  23. FROM table_name;
  24. --4. 子查询作为INSERT语句的VALUES子句
  25. --子查询可以作为INSERT语句的VALUES子句的一部分,用于将查询结果插入到目标表中。
  26. INSERT INTO table_name (column1, column2)
  27. SELECT column1, column2
  28. FROM another_table
  29. WHERE condition;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/810429
推荐阅读
相关标签
  

闽ICP备14008679号