Oracle复习(二)SQL查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39424143/article/details/89308380

Oracle复习(二)SQL查询

SQL高级查询技术(一) :

SQL基础:
  • SQL是一种介于关系代数与关系演算之间的结构化查询语言。SQL是一个通用的、功能极强的数据库语言。
  • SQL集数据查询(data query)、数据操作 (data manipulation)、数据定义(data definition)、数据控制(data control)于一体。
  • SQL语言包括:
1. SQL DDL:定义关系模式、删除关系、建立索引 以及修改关系模式; 
2. SQL DML:查询、插入、删除和修改; 
3. 嵌入式DML:嵌入在Pascal、C等宿主语言; 
4. 视图定义:创建视图; 
5. 权限管理:对关系和视图的访问进行授权; 
6. 完整性:定义数据必须满足的完整性约束条件; 
7. 事务控制:定义事务的开始、提交、和结束等。 
  • SQL数据定义语言
基本的数据库对象: 表(table)、视图(view)、索引(index) 
表的创建:
CREATE TABLE table_name   (
    col_name datatype [column level constraint]   
    [,col_name datatype [column level constraint]   ,...]  
    [,table level constraint]   
);  
建表的同时可以定义与该表相关的完整性约束(会被存入数据库系统中,当用户操作表时,DBMS会自动检查该 操作是否违背完整性约束条件

建立约束的考虑:如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上;否则既可以定义在列级上也可以定义在表级上。 

 表名、列名是不区分大小写的。 
 
 对一个用户而言,表名必须唯一;一个表中,列名必须唯 一。
 
 表名、列名必须以字母开头,长度不超过30个字符。 
 
 eg:创建一个学生表 建立一个“学生”表Student,它由学号Sno、姓名 Sname、性别Ssex、年龄Sage、所在系Sdept五个属性 组成。其中学号不能为空,值是唯一的,并且姓名取 值也唯一。 
  CREATE TABLE   Student(  
         Sno CHAR(9) NOT NULL UNIQUE,  
         Sname CHAR(20) UNIQUE,  
         Ssex CHAR(2),  
         Sage NUMERIC(2,0),  
         Sdept CHAR(20)  
   ); 
 
  • 常用的完整性约束:
主码约束: PRIMARY  KEY 
唯一性约束:UNIQUE
非空值约束:NOT NULL 
参照完整性约束:FOREIGN KEY 
  • 删除表
将表 放入回收站 并不是真正意义上的删除
drop table

查看表的数目,可以看到数目并未改变
select * from tab;

从回收站中恢复表(只能恢复最近的一个表)
FLASH BACK TABLE 表名  TO BEFORE DROP;

查看回收站里面的表
select object_name, original_name ,operation,type from  recyclebin

删除表不经过回收站
drop table 表名 purge;

从回收站中删除某个表
purge table 表名;

清空回收站
purge recyclebin;
  • 修改表
增加新的列
alter table 表名  add (列名,数据类型[default 默认值], 列名.....);
desc 查看表

修改列的数据类型
alter table 表名 modify(ename varchar(8));

修改列名
alter table 表名  rename column 现列名 to 新名;

删除列 (不可同时删除多个列)
alter table 表名 drop column  列名;

表的重命名
rename 旧名 to 新名;

更改列状态(改为不使用状态)
alter table 表名 set unused column 列名;

删除无用的列
alter table 表名 drop unused columns;

为表添加注释
comment on table 表名  is '注释内容'
  • 插入:
插入单值:
INSERT INTO 表名(列名1,列名2,...)VALUES(值1,值2....)

子查询
INSERT INTO (SELECT 列名 FROM 表名) VALUES (......)

临时表
INSERT INTO 表名(列名1, 列名2.....) select ..... from dual

子查询进行批量插入
eg: 向myemp表中插入一条数据,员工号为1122,员工姓名为‘tom22’ 其他信息与员工7369的信息相同
INSERT INTO myemp SELECT 1122,  'tom22', JOB,MGR FROM emp WHERE empno = 7369;
如果要进行大量数据的装载操作可以利用
insert /*+append*/ into myemp(列名1,列名2) select
eg:
INSERT /*+append*/ INTO myemp (empno, ename) SELECT 2233,'tom33' FROM dual;

向多个表插入数据
无条件多表插入
INSERT ALL INTO 表1 VALUE (值1, 值2)
                INTO 表2 VALUES(列1,列2)
                子查询;

有条件 向 多个表中插入
INSERT ALL/FIRST 
WHEN 条件1 THEN INTO 表1 VALUES(列1,列2) 
WHEN 条件2 THEN INTO 表2 VALUES(列1,列2) 
ELSE INTO 表(列1,列2)
子查询;
ALL全部都插
FIRST只插入第一个条件(避免重复)
  • 修改数据:
全部修改
update 表名 set 列 = 值,列 = 值

局部修改
update 表名 set 列 = 值,列 = 值 where......

子查询:
update 表名(列名1,列名2) = (子查询 from dual) where 。。。

将部门30的员工工资修改为部门20员工的平均工资
update myemp set sal = sal + (select avg(sal) from emp where deptno = 20) where deptno = 30

  • 删除数据:
全部删除
delete from 表名
from 可以省略 但是不规范
只删除所有数据 表的结构依然在

局部删除
delete from emp where .....

子查询
删除和Smith相同岗位的人的信息
delete from emp where job = (select job from emp where ename = 'Smith')
  • 查询
格式:
select 列名 from 表名

算数运算符  + - * / :
select date+1 日期也可以进行相应的加减 前一天 后一天

别名:
select 列名 (as) 列别名 from 
但是如果想要使用as作为列名,就需要将as打上双引号 'as', 但是列名不可以是双引号

空值:null
空值不是0
空值不可以参与运算
nvl(可能产生空值的列名,指定值)

连接符:
列与列的连接
select ename || job as info from emp

字符串连接:
oracle 使用单引号进行字符串连接
select 'id:' || ',name is' || ename

去重:distinct

排序:order by
order by 列名 desc降序 
order by 列名 asc 升序

条件: where
日期需要加单引号 默认是 日月年 
用where的时候 注意大小写 列名不区分大小写,但是数据区分大小写 
逻辑运算符:
AND, OR, NOT 

(not) in是否在集合中
between and 两边都是闭区间
like:
    % 任意数量的字符
    _表示一个字符

  • 连接:
左右连接
列名 (+) =   右连接
= 列名 (+) =  左连接
select 列名
from 表1 right outer join 表名2 on 条件;

select 列名
from 表1 left outer join 表名2  on 条件;

交叉连接:
将返回被连接的两个表的笛卡尔积
select 列
from 表名1 cross join 表名2;

自然连接:
select 列
from 表名1 natural join 表名2;

using子句:
select 列名
from 表名1 join 表名2 using (列名)

on子句:
using 子句 
select 列名
from 表名1 join 表名2 on 条件
  • 组函数:
count 

可以用于数字,日期等的大小比较
max
min

sum
avg

group by
having 
  • rollup 小计
select 
from 
group by
roll up
  • 集合运算
并集
union 去重
union all 不去重

交集
intersec

差集
minus

猜你喜欢

转载自blog.csdn.net/qq_39424143/article/details/89308380
今日推荐