一.查询操作(这是学习sql中最重点的)
基本查询
语法:select 列名1,列名2.... from 表名;
查询别名
语法:select 列名1 as 别名1,列名2 as别名2 from 表名;
(注意 ,在取别名的时候关键字as是可以省略不写的)
去重查询
语法:select distinct 列名1,列名2...from 表名 ;
(注意 distinct去重的关键字 写在你要查询的列名前)
排序查询
单列语法:selec 列名1,列名2...from 表名 order by 排序的列名 排序规则;
多列语法:selec 列名1,列名2...from 表名 order by 排序的列名1 排序规则,排序的列名2 排序规则;
排序规则:ase是升序(注意升序是默认的可以不用写)
desc是降序
条件查询
语法:select *from 表名 where查询条件
(注意:其中*号是代表全是列,也相当于整张表)
查询条件
1.关系条件:> , < , >= , <= ,= , != ,<> 。
(注意:其中不等于有两个符号!=,<>均可)
2.逻辑条件:and(且),or(或),not(非)。
3.区间条件:between 起始值 and 结束值 (注意:在sql中这是包含起始值跟结束值的)
4.枚举条件:in(值1,值2,....)
not in(值1,值2,....)
(注意:这个枚举条件是在条件存在多个的时候使用)
5.空值条件:is null 是空值
is not null 不是空值
(注意:是在查询表中某些数据存在空值时使用)
6.模糊查询:like
not like
在模糊查询中的占位符:
%;表示0个或者多个字符
_:表示一个字符
(注意:模糊查询是在一些查询比较模糊的时候使用)
分组查询
语法:select 聚合函数()列名 from 表名;
主要的聚合函数有这几种
sum() 求表中列的和
avg() 平均值
max() 最大值 min () 最小值
count () 求总行数
分组查询
语法:select 列名1,列名2....from 表名 where 条件 group by 分组列名 having 分组过滤条件
分组查询注意以下几点:
1.在没有group by 子句的时候 不能出现任何列名。
2.在使用group by 子句的时候 ,只允许出现分组列名和聚合函数。
3.聚合函数可以嵌套使用,但是嵌套之后,select 子句不能出现其他列名,只能使用嵌套函数。
注意:where和having的区别
1.都是用于条件过滤
2.where 中不能使用聚合函数,而having中可以使用聚合函数
3.where 是在分组之前过滤,而having是在分组之后过滤
4.where可以单独使用,而having必须使用在group by 中使用
基本查询的总结
主要有以下语句:
select 从句;from从句;where从句;group by 从句;having从句 order by从句;
编写顺序:select from where group by having oederby;
执行顺序;from where group by having select order by;
数据库函数
字符串函数
1.大小转换函数 :
upper(列中数据),lower(列中数据)
2.首字母大写
initcap(列中数据)
3.字符串长度
length(列中数据)
4.字符串替换
raplace(列中数据,替换数据,新数据)
5.字符串的截取
1.substr(列中数据,开始截取位置)
2.substr(列中数据,开始截取位置,截取长度)
数值函数
1.四舍五入函数
round(列中数值{保留小数位})
(注意:不写小数位则不保留,如果小数位为负数,则从小数点左边开始计算)
2.截取小数位
trunc(列中数值{保留小数位})
(注意:直接截取小数位,默认不保留小数位,如果是负数直接整数位为0)
3.数值判断
nvl(列中数据,如果为空的时候转化的值)
4.取模
mod(列1的数值,列2的数值)
日期函数
1.获取系统当前时间
select sysdate from 表名;(注意 :sysdate是获取年月日的)
2.获取系统当前时间戳
select systimestamp from 表名;(注意:时间戳是指到1970年到现在此时的毫秒数)
3.时间计算
mohths_between (日期1,日期2)两个日期间的相隔的月份
add_months (日期,月数) 在指定的日期上增加月数
last_day(日期)指定日期的最后一天(注意:就是定时)
next_day(日期,周几)
转化函数
to_char(列中数据,转换格式)(注意:主要是将日期转换成字符串,数字转成字符串)
to_dare(字符串,时间格式)
(注意:字符串转化成日期,在oracle中默认的时间格式是日-月-年)
to_number(列中数据)(注意:主要是将字符串转化成数字)
关联查询(多表连查)( 重点)
关联查询的具体分析
1.先确定那几张关联表
2.确定好表之前的关系(注意:连表查询主要是消除表与表之间的笛卡尔积)
关联查询的分类
1.内连接
2.外连接(左外连接,右外连接)
(注意:左外学会就可以 ,右外就是把表调换一下位子)
内连接
语法1:select 列名1,列名2...from左表,右表 where 左表.关联分组=右表.关联分组;
语法2:select 列名1,列名2...from 左表inner join 右表 左表.关联分组=右表.关联分组;
(注意:在内连接中 关键字 inner 是可以省略的)
外连接
语法:select 列名1,列名2...from 左表left join 右表 左表.关联分组=右表.关联分组;
(注意:左外连接就在join前面加left的 ,右外就在join前加right就行了
其实所有右外连接都可以转化成左外,我们只要表左表跟右表换一下位置即可,所以我们学会左外即可)
(注意:当谁是主表时,主表的所有数据都会被查询出来,与之对应的附表的数据有些就会被null代替)
自关联连接
在多表查询的过程中,有的一张表里面也存在关联关系
我们可以在这一张表里将一张表的的关联用连表查询的方式给他查询
合并查询
1.union:得到两个结果合并到一起,但是会去除重复数据
2.union all:得到两个结果合并到一起,不会去除重复数据
3.intersect:得到两个结果的交集
4.minus:得到第一个结果减去第二个结果的差集
子查询
子查询:就是在一个查询语句中嵌套一个查询语句
子查询的位置:
可以在where从句中使用
可以在from从句中使用
可以在having从句中使用
(提示:从句就是值的后面可以跟语句)
(注意:子查询中不允许返回null空值,如果子查询返回空置,则不会返回任何结果)
DML操作
增加操作
语法1:insert into 表名 (列名1,列名2....)values(值1,值2....)
语法2:insert into 表名 values(值1,值2....)
(注意:在语法2中values框号中的每个字段都要给值,且给值的顺序要跟表的列名顺序一样)
修改操作
语法:update 表名 set 要修改的列名1=修改的值1,要修改的列名2=修改的值2..where 过滤条件;
(注意:在修改操作中如果不写where过滤条件,那么这个修改就是全表修改)
删除操作
语法:delete from 表名 where 过滤条件
(注意:如果不写where过滤条件那么就是全表删除)
DDL操作
数据类型
在Oracle中常见的数据类型
1.字符串类型
char(长度确定)
varchar(长度不定)
(注意:已知字符串长度的数据可以使用char类型,不知道的可以使用varchar类型)
2.数值类型
number(M,N) M表示总长 N表示小数点位数
int 整数
float 浮点数 也就是小数
3.日期类型
date 日期(通常存储的格式是年月日时分秒)
timestamp 日期 (和date相比这个可以精确到纳秒)
4.其他类型
clob 存文本
blob 存对象
(注意:其他类型了解即可,一般数据库内存比较珍惜,只会存一些文本,对像地址)
数据库表的操作
创建表
语法:create table 表名 (
列名 数据类型 [约束];
列名 数据类型 [约束];
....
);
表的操作
desc 表名;查看表结构
select * from tab; 查看当前用户下所有表
drop table 表名 purge; 删除表 (purge的作用是清楚数据库缓存数据)
复制表
1.create table表名 as子查询
2.creat table 表名 as 子查询(注意:复制表结构只要设置一个不能成立的条件即可复制表结构)
修改表
1.增加列
alter table 表名 add(列名 数据类型);
2.修改列类型
alter table 表名 modify (列名称 数据类型);
3.删除列
alter table 表名 drop column 列名;
表的约束
约束:用于限制加到表中的数据的类型和规范
1.数据类型(必须)
2.非空约束
not null
(如果字段设置为非空,则插入数据不能插入null)
3.唯一约束
unioue
(如果字段设置唯一,则插入的数据不能重复插入)
4.主键约束
primary key
(主键特点 非空且唯一)
5.外键约束
foreigh key
即子表中的外键为父表中的主键
--外键约束特点:
-- 限制条件1:如果要删除父表,必须先删除子表。
-- 限制条件2: 父表中的外键关联字段必须是主键或者唯一字段
-- 限制条件3: 如果父表中有对应的字表的数据,则要先删除子表数据
--数据的级联操作
-- 1、级联删除 (在外键约束后加入ON DELETE CASCADE)
-- 2、级联更新 当父表中的内容删除后字表中对应的数据设置为null(在外键约束后加入 ON DELETE SET NULL)
6.唯一约束
序列
创建序列
CREATE SEQUENCE 序列名
[INCREMENT BY 步长]
[START WITH 开始值]
[MAXVALUE 最大值|NOMAXVALUE]
[[MINVALUE 最小值|NOMINVALUE]
[CYCLE | NOCYCLE] 循环
序列操作
1.序列名.nextval; 当前序列的下一个值
2.序列名.currval; 当前序列的值
删除序列
drop sequence 序列名称;
(注意:序列只能在insert中使用,不能在create中使用)
分页操作
-- oracle分页查询公式
SELECT *
FROM (SELECT ROWNUM RN,*
FROM 表名称
WHERE RN < (pagesize*currpage)) TEMP
WHERE TEMP.RN > (pagesize-1)*currpage;