SQL语句在oracle数据库中的初级应用(上)

前言:

因公司要求,因而花了约莫一周的时间来理解和记忆SQL语言,在基于实用而非完全理解的状况下,SQL语句实际上是很简单的,如今,我就把本身这段时间的整理能容放出来,供新人摸索,供大佬批判。数据库

由于是新人上路,因此可能有所不足,欢迎指正,我已经尽量的保证正确的了。bash


增添数据(插入数据):

指定插入:函数

insert into 表名 (列名1,列名2,列名3......)  values (内容1,内容2,内容3);

复制代码

默认插入:测试

insert into 表名 values (内容1,内容2,内容3);

复制代码

以上两种是直接向表中插入数据的方式,ui

第一种是照应前边的内容进行插入, 第二种方式,是默认的按照表格内容插入数据,spa

若是二者数据不足,都会在表格中以NULL的形式插入数据。code


删除数据:

指定行删除:blog

delete from table_name where 字段名=“指定值”;

复制代码

(清空数据表内容,不释放空间,即:下次插入表数据,id依然接着删除数据的id继续增长)排序

数据删除:get

(注:如下删除都不会清理掉表的形式,只会清理掉表的内容;)

delete * from table_name;

复制代码

(直接删除表格内全部的东西,不可恢复;)

truncate:truncate table 表名1;

复制代码

(清空表数据,释放空间,即:下次插入表数据,id从1从新开始)

表删除:drop:drop table 表名1;

复制代码

(整张表被删除,要使用该表必须从新建)


修改数据:

指定修改:

update  表名 set 字段名1=‘新值’,字段名2=‘新值’ where 字段名=你想要删除行的内容;

复制代码

所有修改:

update  表名 set 字段名=‘新值’,字段名2=‘新值’;

复制代码

注:若是不加where子句的话,全部内容都会被改为你指定的值;


查询数据:

所有查询:

select * from 表名;

复制代码

指定列查询:

select 指定的列名 from 表名;

复制代码

去重查询:

select distinct * from 表名;

复制代码

条件查询:

select 字段名 from 表名 where  查询条件;

复制代码

排序查询:

1,select 字段名 from 表名 order by 想要排行的字段名 desc;(倒序)
2,select 字段名 from 表名 order by 想要排行的字段名 asc;(正序,asd能够省略)

复制代码

求和查询:

select sum (字段) from table1 where 条件;

复制代码

平均值查询:

select avg (字段) from table1 where 条件;

复制代码

最大值查询:

select max (字段) from table1 where 条件;

复制代码

最小值查询:

select min (字段) from table1 where 条件;

复制代码

表关联:

(注,这里我会用column_name代替字段名这个说法,但愿不会影响阅读)

有关表关联这方面,虽然说就功能而言,这像是在查询中的内容,可是我仍是把它单独列出来了。毕竟,这当初但是困扰个人难点。

这个关键字不难,简单的来讲,就是将两张表放在一块儿,经过某一个字段的关联,来进行合并查询。如下为目前已知的关联区分;

假设要关联两张表上的ID字段进行查询,那么,如下为例子(如下语句均在ORACLE数据库中测试过,可使用)。

第一张表

左关联:

select table_name1 as a  left join  table_name2 as b  on a.id =b.id; (这个语句中,as能够省略)

复制代码

右关联:

select * from table_name1 as a  right join  table_name2 as b  on a.id =b.id;  (这个语句中,as能够省略)

复制代码

全关联:

select * from table_name1 as a full join table_name2 as b on a.id=b.id;
select * from table_name1 a join table_name2 as b on a.id=b.id;(这个语句中,full和as均可以省略)

复制代码

交叉关联:

select * from table_name1 as a cross join table_name2 as b on a.id=b.id(这个语句中,as能够省略);

复制代码

内关联:

select * from table_name1 as a inner join table_name2 as b on a.id=b.id;(这个语句中,as能够省略);

复制代码

有关表关联这里,我在第一遍看的时候,很闹不明白,也许是我悟性太差,后来查了好几人的博客,才弄清楚这里是怎么一回事,那么,在这里稍微说一下我的的看法吧。

(这里提早放一下大佬的连接:www.cnblogs.com/thomasguan/…若是有兴趣,能够直接看,下边的我的看法能够跳过了。)

关联,就是以你肯定的字段名,进行链接,而后对应的开始查询,通常关联的字段名是有必定的相关性的。

经过关联字段名,你就能够作到一种对比显示,而要作到对比显示,就会有如下几种可能性:

1,左关联:以左表为主显示,而右表不显示左表中没有的字段;

2,右关联:以右表为主显示,不显示左表中没有的字段;

3,全关联:两个表所有对比,一一对应,不管两个表中是否有此行,都显示;

4,内关联:仍旧是一一对应,可是和上边正好相反,两个都没有的,他就都不显示;

5,交叉关联:拿其中的一个表的一行,去对应另外一个表中的全部行,而后将以上对应执行到这个表的最后一个。

以上就是关联查询的几个常见形式了,固然,用文字看可能对初学者来讲有点绕,这里我图省事,就没有放图,实际上,要是看结果图,会很是轻松的明白关联这一块。

因为刚开始的时候,踩了很多坑,因此我对这里其实有点打怵。不过过来以后,发现其实也就是那么一回事,太简单了,简直是傻子都能懂的东西(等等,这样会不会说我本身是傻子了?emmmm。。。。)

分组:

group by

(这个关键字用起来很简单,就是经过字段名来将表的内容进行分类)

select column_name1, column_name2 from table_name group by column_name3;

复制代码

例子:

select XB 性别 ,count(1) 总数 from CET_01 group by XB;

复制代码

以上,我经过group by 分组统计了男女生人数,经过字段的内容进行分组查询;

having

同where用法,having与group by连用。where是筛选单个记录,having是筛选分组记录(先分组,后筛选);

select XB 性别 ,count(1) 总数 from CET_01  group by XB having count(1)>300;

复制代码

仍是接着上一个例子,这里咱们想让知道男生和女生中哪一个大于300人,咱们只须要用having子句,筛选出来就能够了。

注意,这里有个坑,有的新手不熟悉,会觉得这里能够用where进行筛选,可是实际上,这里由于group by的分组,where是没有法使用的,因而便有了having子句。

结语:

说一个悲哀的事实,我本觉得本身把SQL的基础语句看的如此扎实了,应该也没什么大事了,就算有问题,凭借我如今的能力,至少可以看懂吧?

可是两天以后,我才有些闹心的发现,真正的遇到问题的时候,本身的这点水准依旧只是个打杂的,有不少地方的查询,不是难在语句上,而是难在想法和对表的熟悉程度上。

真正在用到的时候,更多的是对表关联查询的使用,还有有别名用法,和关联符的使用。

这个过程当中,真正用到最多的,是SQL中自带的函数,好比DECODE(),sum(),avg(),nvl()一类的函数。

有不少地方,我写的很重复的SQL语句,以后在大佬检查了以后,多数会被翻新重写,我就发现我写的SQL很没有灵性。。 至少,他们的SQL写得很简单,有种逻辑在里边,而不是我这种重复的基础SQL。

不得不说,路还很长,我仍是太嫩,我还须要继续努力。

最后,若是有能喷的地方,请轻喷。。。或者,能戳到痛点上,给点用处的重喷也行。。。

原本打算过两天放出本身对函数部分的理解,可是这两天在公司看了大佬的SQL语句后,瑟瑟发抖。。。神仙写法,不少时候都有种彻底没想到的感受。

等后续可以彻底适应了SQL中的函数部分,我会放出本身对SQL的理解的,谢谢。

相关文章
相关标签/搜索