Oracle学习总结(三)——SQL基础

(SQL是一门语言,基础不好的同学建议还是详细去看书,我这里主要进行一个总结。)

一、SQL简介

SQL标准由美国国家标准学会订立。主要用于存取数据及查询、更新和管理关系数据库系统。现行所有数据库基本都支持SQL语言,但又对各自SQL语言进行了改进。ORACLE使用的是PL\SQL语言。

二、SQL语言本身的分类

a)定义要在数据库存储那些信息的数据库定义语言(DDL)
b)对数据库中的表进行操作的数据操纵语言(DML)
c)对数据库中的表进行检索的数据查询语言(DQL)
d)对数据库中的对象进行权限管理的数据控制语言(DCL)

三、常用数据类型

  1. 字符型
数据类型取值范围(字节)说明
Varchar20~4000可变长度的字符串
Nvarchar20~1000用来存储Unicode字符集的变长字符串
char0~2000用于描述定长的字符型数据
nchar0~1000用来存储Unicode字符集的定长字符串
long0~2GB用来存储变长的字符串

2. 数字型

数据类型取值范围(字节)说明
Number(p,s)P最大精度是38位(十进制)P代表精度,s代表的是保留的小数位数;可以用来存储定长的证书和小数
float用来存储126位数据(二进制)存储的精度是按二进制计算的,精度

3. 日期类型

数据类型说明
date用来存储时间和日期,范围在公元前4712年1月1日到公元9999年12月
timestamp用来存储日期和时间,与date类型的区别就是在显示日期和时间时更精确,date类型的时间精确到秒,而timestamp的数据类型可以精确到小数秒。此外,使用timestamp存放日期和时间还能够显示当前是上午还是下午

4. 其他数据类型

数据类型取值范围(字节)说明
blob最多可以存放4GB存储二进制数据
clob最多可以存放4GB存储字符串数据
bfile大小与操作系统有关用来把非结构化的二进制数据存储在数据库以外的操作系统文件中

四、数据定义语言(DDL)

1. DDL主要包括数据库对象的创建、删除、输给、修改的操作。
2. 使用CREATE创建表
CREATE TABLE table_name
(
column_name datatype [null|not null]
column_name datatype [null|not null]
...
[constraint]
)

说明:
table_name:在数据库中创建的数据表的名称,在一个数据库中数据表名是不能重复的。
column_name:表中的列名,列名在一个表中也是不能重复的。
datatype:该列存放数据的数据类型。
[null|not null]:允许该列为空或者不允许为空,创建表时默认为不允许。
[constraint]为表中的列设置约束。

3. 使用Alter语句修改表
ALTER TABLE table_name
ADD column_name | MODIFY colmun_name | DROP COLUMN column_name;

说明:
ADD:用于向表中添加列。
MODIFY:用来修改表中已经存在的列的信息。
DROP COLUMN:删除表中的列,在删除表中的列时经常要加上CASCADE CONSTRAINTS,是要把与该列有关的约束也一并删除掉。

4. 使用DROP语句删除表
DROP TABLE table_name;

五、约束的使用

1.主键约束

主键约束在每个表中只有一个,但是一个主键约束可以有数据表中多个列组成。

  • 例子:创建表时设置主键
create table categoryinfo
(CategoryId varchar2(10),
CategoryName varchar2(30),
CategoryName varchar2(30),
primary key(CategoryId));
  • 例子:使用ALTER TABLE语句为表添加主键约束
ALTER TABLE table_name
ADD CONSTRAINTS constraint_name PRIMARY KEY (column_name);

说明:
constraint_name:约束的名称。
column_name:主键约束指定数据表中的列名。

  • 移除主键约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

说明:
constraint_name:要移除的约束名称,这个约束可以是在表中任意约束的名称。
所有约束移除的方法相同,以下省去。

2. 外键约束:

外键约束可以保证使用外键约束的数据库列与其所引用的主键约束的数据库列一致。在一个数据表中可以有多个。

  • 例子:创建表时添加外键约束。
CONSTRAINT constraint_name FROEIGH KEY (column_name)
REFERENCE table_name (column_name)
ON DELETE CASCADE

说明:
constraint_name:创建的外键约束名字。
FROEIGH KEY (column_name):指定外键约束的列名。
PEFERENCE:要引用的表名(列名)。
ON DELETE CASCADE:设置级联删除。当主键的字段被删除时外键也被同时删除。

  • 例子:在修改数据表时添加外键约束。
ADD CONSTRAINT constraint_name FOREIGN KEY (column_name)
REFERENCE table_name (column_name)
ON DELETE CASCADE;
3. CHECK约束

CHECK约束是检查约束,能够规定一个列能够输入的值,以保证数据的正确性。

  • 例子:创建表时添加CHECK约束:
    加入:CONSTRAINT constraint_name CHECK(condition);
  • 例子:修改时添加CHECK
    加入:ADD CONSTRAINT constraint_name CHECK(condition);
4. UNIQUE约束

UNIQUE约束称为唯一约束,可以设置在表中输入的字段值都是唯一的。
- 创建:CONSTRAINT constraint_name UNIQUE(column_name);
- 修改:ADD CONSTRAINT constraint_name UNIQUE(column_name);

5. NOT NULL约束

称为非空约束

  • 创建表时加入:直接在要加约束的字段后标注NOT NULL
    例子:
CREATE TABLE table
(a1 varchar2(10),
a2 varchar2(10) NOT NULL);
  • 修改表时设置:
ALTER TABLE table_name
MODIFY column NOT NULL;
  • 取消NOT NULL约束:
    与其他约束移除方式不同,按上一条,用MODIFY关键字将字段非空约束标注为NULL即可。

六、数据操纵语言(DML)和数据查询语言(DQL)

1. 添加数据:INSERT
  • 直接添加数据:
INSERT INTO table_name(column_nmae1,column_name2,...) VALUE (data1,data2...);
  • 通过其他表向表中加数据:
INSERT INTO table_name1 (column_nmae1,column_name2,...) select column_name2... FROM table_name2;
  • 创表同时通过其他表向表中加数据:
CREATE TABLE table_name AS SELECT column_name1, column_name2,... From source_table;
2. 修改数据:UPDATE
UPDATE table_name SET column_name1=data1,column_name=data2,...[where condition];
3. 删除数据:DTLETE
DELETE FROM table_name [where condition];
4. 查询数据:SELECT
SELECT column_name1, column_name2,... FROM table_name WHERE [condition];
5. 删除表中全部数据:TRUNCATE
TRUNCATE TABLE table_name;
6. 修改或者添加数据数据:MERGE
MERGE [INTO] table_name1
USING table_name2
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

说明:
table_name1:要修改或添加的表。
table_name2:参照的更新的表。
Condition:table_name1和table_name2之间的一些关系,或其他的一些条件。
Merge_update_clause:如果和参照表table_name2中的一些条件匹配,那么就执行的更新操作SQL语句。
merge_insert_cluse:如果条件不匹配,就执行增加操作的SQL语句。
类似于WIN的复制粘贴功能的“覆盖”,即如果有了就覆盖,如果没有就增加,这样的操作。但是可以通过省略 merge_update_clause或merge_insert_clause中的一个来达到其他的目的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值