一个乐于分享的博客
关注互联网折腾服务器分享码农的日常

[汇总]10分钟速成Oracle基础语法入门教程

[汇总]10分钟速成Oracle基础语法入门教程

岩兔站是学过SQL Server的,Oracle其实很少接触,但是因为工作需要必须要学习一下,一边学习一边整理。希望能帮到初学Oracle的同学。

管理表

创建表

使用CREATE TABLE 语句创建表,创建表时通常需要设置4个属性,包括表名、数据类型、约束及表的参数设置。

语法

CREATE TABLE table_name (
  clumn_name datatype [column_level_constraint]
  ...
  [,table_level_constraint])
[parameter_list];

常见数据类型

CHAR(n) 存储固定长度的内容
VARCHAR2(n) 存储可变长度字符串
NUMBER(p,s) 可存储0、正数和负数。p表示精度,s表示刻度
DATE 存储日期和时间
TIMESTAMP(n) 表示时间戳,是DATE数据类型的扩展
RAW(n)/LONG RAW 存储可变长的二进制数据

示例:创建用户表

CREATE TABLE user(
  id NUMBER(6,0) PRIMARY KEY,
  name VARCHAR(20));

修改表

增加列

ALTER TABLE user ADD(phone_number VARCHAR2(20));

修改列名和字段类型

ALTER TABLE user RENAME CLUMN name TO first_name;
ALTER TABLE user MODIFY first_name CHAR(25);

删除列

ALTER TABLE user DROP(phone_number);

删除表

DROP TABLE user;

数据操作

数据插入

使用INSERT INTO语句进行单条插入:

语法:
INSERT INTO table_name [(column1[,column2...])]
VALUES (value1[,value2...]);
示例:
INSERT INTO user VALUES ('岩兔站','男');

将查询结果插入表中

INSERT INTO user SELECT * from user_profile;

多表插入

语法:
INSERT 
INTO table1 (column1[,column2...])
INTO table2 (column1[,column2...])
...
subquery;
示例:
INSERT [ALL]
INTO table1 (name,gender)
INTO table2 (first_name,gender)
AS
SELECT name,gender FROM user;

数据修改

利用UPDATE语句进行内容修改,如:

UPDATE user SET age = age+1;

删除数据

利用DELETE语句进行内容修改,如:

DELETE FROM user WHERE id = 2;

数据查询

无条件查询

--查询所有字段
SELECT * FROM user;
--查询指定字段
SELECT name,gender FROM USER;
--别名查询
SELECT name new_name FROM USER;
--使用函数和运算
SELECT UPPER(name),salary*0.8 FROM user;

条件查询

查询条件 运算符
关系运算符 =, <, >, <=, >=, <>, !=
确定范围 BETWEEN AND, NOT BETWEEN AND
确定集合 IN, NOT IN
字符匹配 LINE, NOT LINE
空值判断 IS NULL, IS NOT NULL
逻辑操作 NOT, AND, OR

示例:

SELECT * FROM user WHERE age >= 18;
SELECT * FROM user WHERE age BETWEEN 18 AND 30;
SELECT * FROM user WHERE id in (1,3,5);
--查询第二个字母为s的所有用户
SELECT * FROM user WHERE name LIKE '_s%';
SELECT * FROM user WHERE age IS NOT NULL;
SELECT * FROM user WHERE age BETWEEN 18 AND 30 AND name LIKE '_s%';

查询排序

使用ORDER BY语法,可同时使用DESC和ASC进行降度和升序排列。

SELECT * FROM user ORDER BY id DESC;
SELECT * FROM user ORDER BY id ASC;

查询统计

包括COUNT,AVG,MAX,MIN,SUM等聚集函数。

--查询总数,平均,最大,最小年龄
SELECT COUNT(*),AVG(age),MAX(age),MIN(age) FROM user;

分组查询

使用GROUP BY语句进行分组,HAVING子句限制分组的返回结果,WHERE子句对表中的记录进行过滤

--以部门进行分组并查询平均年龄
SELECT dept_id,count(*),avg(age) FROM user
GROUP BY dept_id

--进行条件限制:在所有男性用户中,查询平均年龄大于10岁的部门
SELECT dept_id,count(*),avg(age) FROM user
where gender = '男'
GROUP BY dept_id
HAVING avg(age) > 18;

多表查询

两个有关联的表进行统一查询,语法为:

SELECT t1.column,t2.column[,...] FROM t1,t2[,...]
WHERE condition;

如:有用户表和部门表,用户表中只储存部门id,部门表中储存部门名称,如果要得到用户名和部门的集合,可以用以下语句:

SELECT u.name,d.dept_name FROM user u,dept d
WHERE u.dept_id = d.id;

视图创建与管理

视图是从数据表中虚拟出来的表,它实际上并不存在的。视图可以将多个表进行关联,并且生成一个新“表”,以方便查询和调用。

创建视图

语法:

CREATE [OR REPLACE] view [(alias[,...])]
AS
Subquery;

例:如果不存在视图则创建,如果存在则修改

CREATE OR REPLACE newview (id,name,gender)
AS
SELECT user_id,first_name,gender FROM user;

删除视图

删除视图后,原始数据不受影响

DROP VIEW view_name;

数据格式转换

Oracle中有很多数据类型,不同类型之间如何转换呢?主要包括to_data()、to_char()、to_number()等。

示例:

SELECT to_date('2018-05-25','yyyy-mm-dd'); 25-5月-18
SELECT to_char(sysdate,'yyyy-mm-dd'); --2018-05-25
SELECT to_number('$123.45','$9999.99'); --123.45

总结

基本上所有数据库的语法都大同小异,掌握了Oracle的语法,会很容易学会SQL Server或MySQL。

以上列举的只是最基础的语法,但是能满足多数情况下的需求,岩兔站也是边学边写,等学到了新的语法,会再更新上。

有什么疏漏或错误的,欢迎留言指正,咱们共同进步。

转载务必注明出处:岩兔站 » [汇总]10分钟速成Oracle基础语法入门教程
赞 (7) or 打赏

讨论区 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址