ORACLE数据库学习笔记
SQL的分类
1.数据查询语言(DQL)Data QueryLanguage,只有一个select
2.数据操纵语言(DML)Data Manipulation Language,主要包括:insert(插入)/update/delete
3.数据定义语言(DDL)Data Definition Language,主要包括:create/drop/alter(更改)
表:CREATE TABLE,ALTER TABLE,DROP TABLE;
索引 :CREATE INDEX,ALTER INDEX,DROP INDEX 索引是一种数据结构
4.数据控制语言(DCL)Data Control Language,
ALTER PASSWORD 改变口令
GRANT 为用户授予特权
REVOKE 从用户处收回特权
5.事务控制语言,用户管理数据库的事务命令主要包括:commit/rollback
COMMIT 用于保护数据库的事务
ROLLBACK 用于撤消数据库的事务
SAVEPOINT 创建一组事务中的撤消点
SET TRANSACTION 给事务命名
6.数据控制语言,审计和分析对数据库的操作,并可分析系统的执行过程,主要包括授权等等
START AUDIT
STOP
SELECT
select 列名称1(,列名称2...) from 表名称
; 查询多列用逗号隔开
select * from 表名称
; 查询所有列用*
select 列名称1*n(,列名称2...) from 表名称
;` 如果某一列全为数字,则它可使用列名*n来快速计算整列与n的乘积
出现错误 ORA-01722 则说明可能在该列存在非数字的值
select 列名称1 as 其他名称(可以是中文或其他语言)(,列名称2 as 其他名称...)from 表名
;其中的as可以省略
select 列名称1 (,列名称2 ...) from 表名 where +条件
select 列名称1 (,列名称2 ...) from 表名 where 列名1/列名2... = ‘某值’
; 根据需求可改变运算符‘=’
运算法 说明
= 等于
<> 或
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
Between … and …. 两个值之间 前面值小于等于后面值
Is null 为null
null 不等于’ ’ Null为空,不是空串,为空在建立表的时候可以设置这个字段什么数据都不填,也就是这
个字段没有值,在这种情况下必须采用is null
ADN 、OR
select 列名称1(,列名称2...) from 表名 where 列名n='文本'and 列名m=数字
; 同时满足
select 列名称1(,列名称2...) from 表名 where 列名n='文本'or 列名m=数字
;满足一个即可
select 列名称1(,列名称2...) from 表名 where 列名n='文本'or 列名m=数字 and 列名K=数字
;先执行and再执行or
因此,在涉及到优先级的时候尽量使用括号。
IN
select 列名称1(,列名称2...) from 表名 where 列名n in('值1','值2')
;列出列名n中为值1或者值2的
NOT
select 列名称1(,列名称2...) from 表名 where 列名n not in('值1','值2')
;列出列名n中不为值1或者值2的
between A and B 同理 not between A and B 列出不在AB之间的
LIKE
select 列名称1(,列名称2...) from 表名 where 列名n like '%a'
;查找列n中以a结尾的
select 列名称1(,列名称2...) from 表名 where 列名n like 'a%'
;查找列n中以a开头的
select 列名称1(,列名称2...) from 表名 where 列名n like '%a%'
;查找列n中包含a的
select 列名称1(,列名称2...) from 表名 where 列名n like '
_a%'
;查找列n中第二个字母为a的
通配符’_
'通常影响查询效率,尽量少使用
添加/修改/删除
insert(注意插入非数字要加单引号)
insert into 表名 values (值1,值2...)
; 在表中添加一行
如果忽略了插入的字段,那么它会严格按照表中字段的顺序,包括类型必须符合,这种方式存在缺陷,如果表中位置发生改变,将会影响到insert语句。可以显示的设置某个值为null
insert into 表名(列名称1,列名称2...) values (值1,值2...)
; 在列名称1(,列名称2…)下添加一行
建议使用以上insert方式,此种方式存在优点,当数据库表中的字段顺序发生改变,不会影响到我们的insert语句
表内容复制
create table 表名2 as select 列名称1(,列名称2...)/* from 表名1
; 自动建立一个表,将数据拷贝到新表中
如何将查询出的数据插入到已经存在的表中(insert into 新表名 select * from 表名)
insert into 表名2 select 列名称1(,列名称2...)/* from 表名1
; ----要求表必须存在 且需要在新表中执行该命令
update
update 表名 set 列名1=新值1,... where ...
update 表名 set 列名1=新值1
; 把列名1的值更新为新值1
update 表名 set sal=sal+(sal*0.5) where job = 'MANAGER'
;如果job为MANAGER,薪水上涨50%
可以更新多个字段,字段间用逗号隔开
update 表名 set sal=10000 ,comm=5000 where job='MANAGER'
;如果job为MANAGER,sal=10000,comn=5000
delete
delete from 表名 where...;
delete from 表名 where 列名1 = 值1
;删除表中列名1为值1的行
delete from 表名
; 删除全部数据
问题总结:
select 列名称1n(,列名称2…) from 表名称 ; 如果某一列全为数字,则它可使用列名n来快速计算整列与n的乘积
问题:使用上述语句出现错误 ORA-01722
原因:在该列存在非数字的值
问题:使用between时只显示表类型不显示表内容
原因:and前的值不能大于and之后的值
问题 :A>4?
原因:使用了单引号比较的是ASCII码的大小
问题:esc 、 use、setline、l、run/r 、save、get、ed、@ 语句在PLSQL Developer中无法实现
原因:应当使用拥有更高权限的服务端进行操作 具体步骤:使用SecureCRT连接到服务端 输入命令
- su - oracle
- export ORACLE_SID=cc
- sqlplus / as sysdba
问题:怎么创建表 参数怎么设置?