什么是数据库?数据库就是用来存储和管理数据的仓库。首先我来简单介绍一下各数据库的背景,常见的数据库如下,oracle:甲骨文公司(市场占用率最高),oracle也是一个公司名,翻译过来就是甲骨文的意思。sql server:微软公司(大学课堂经常用到)。DB2:IBM公司,mysql:甲骨文公司,Sysbase:赛尔斯公司。

  关于mysql这里有个小插曲,不妨来说一下。最早mysql是个开元的项目,08年Sun公司把他收购了,在泡沫经济最厉害的时候,价值达到2000亿美金。由于经营不善,加上mysql开元免费,最后坚持不下去了。Sun公司跟IBM公司关系非常好,打算把mysql卖给IBM。但是呢IBM出的价钱没有达到Sun要求的价钱,好像是每股差1毛钱,不欢而散。这时候oracle说了,我多给你一毛。最后,Sun一生气,得,我就跟他成交了,我就不跟你IBM成交。最后核算下来是74亿美金,IBM的开价是73亿美金,差了一亿。2000亿的东西卖了70多亿。(PS:大家看看就好啦~别太认真,权当了解一下。)

  我所在的公司用的是oracle数据库,也是这几天才开始学习,持续更新。有很多需要思考的地方。

  i.专业术语:

    RDBMS:关系型数据库管理系统。

    ddl:对数据库或表的结构操作。

    dml:对表的记录进行更新。

    dql:对表的记录查询。

    dcl:对用户的创建及授权。

  ii.数据类型:

    double:浮点型。例如double(5,2)表示最多五位,其中必须有两位小数,最大值为999.99。

    decimal:浮点型。本意是十进制的意思,不会出现精度缺失,多用来表示与钱相关的。

    int:整型;char:固定长度字符串类型;varchar:可变长度字符串类型。

    clob:表示大字符;blob:表示二进制字符,用来存储电影音频等;

    date:日期类型,格式为:yyy--mm--dd;

    time:时间类型,格式为:hh:mm:ss;

    timestamp:时间戳类型,年月日分时秒。

  注意:在数据库中所有的字符串类型必须使用单引号,不能使用双引号,日期类型也用单引号。

  (一)ddl:对表的操作。

    1.创建表:create table 表名(列名 列类型,列名 列类型);

    2.查看数据库中所有表名称:show tables;

    3.删除表:drop table 表名;

    4.对表添加列:alter table 表名 add(列名 列类型,列名,列类型,...);//赋值用[default 列值]

    5.改变表的列类型:alter table 表名 modify 原列名 新列类型;

    6.更改表名: alter table 表名 rename to 新名;

    7.删除列:alter table 表名 drop column 列名;

    8.修改列名:alter table 表名 rename column 原列名 to新列名;

  (二)dcl(理解):对用户的创建及授权:

    创建用户:create user 用户名@IP地址 IDENTIFIED BY'密码',用户只能在指定IP上登录。

         create user 用户名@'%' IDENTIFIED BY'密码',用户可以在任意IP上登录。

    给用户授权:grant all on 数据库 .* to 用户名@IP地址;

    撤销授权:REVOKE 权限1 ON 数据库 .* from 用户名@IP地址;

    查看权限:show grants for 用户名@IP地址;

    删除用户:drop user 用户名@IP地址;

  (三)dml:数据库操作语言,它是对表记录的操作(增、删、改)。

    1.插入数据:insert into 表名 (列名1,列名2,...)values(列值1,列值2,...)。

            >在表名后给出要插入的列名,其他没有指定的列等同于插入Null值,所以插入数据都是一行,没有半行。

            >在values后给出列值,值的顺序和个数必须与前面指定的列相同。

          insert into 表名 values(列值1,列值2)。

            >没有给出要插入的列,那么表示要插入所有列。

            >值的个数必须是该表列的个数,值的顺序必须与表创建时给出的列顺序相同。

    2.修改数据:update 表名 set 列名1 = 列值1,列名2=列值2,......where 条件。

      //注意:update修改值后必需使用commit提交,否则只在当前session有效。而且在给列值修改为Null时也用=,而不用is;

    3.删除数据:*delete from 表名 where 条件;  * truncate table 表名; //truncate是ddl语句,它是先drop该表,再create该表,而且无法回滚!

  (四)dql:对表的记录查询 :

    i.基本查询:

      1.查询所有列:select * from 表名;

      2.查询指定列:select 列名1,[列名2,...,列名N]from 表名;

      3.完全重复记录只一次:select distinct * | 列名1,[列名2,...,列名N]from 表名;

        例如select  distinct sal from emp;查询员工表的工资,如果存在完全相同的工资只显示一次!

      4.列运算:1)数据类型相同的列可以做加减乘除运算。这只是一种查询手段,不修改数据库的值,只在查询结果后追加一列。

              select sal *1.5 from emp; select sal+com from emp;        emp是员工表,sal表示工资,com表示佣金;

          2) 转换NULL值:有时需要把null值转换成其他值,例如com+1000时,如果com列存在null值,那么null+1000还是null,而我们希望把null值当成0来运算。

              select NVL(com,0)+1000 from emp;  -->NVL(com,0)如果com中存在null值,那么当成0来运算。

           3)给列起别名:你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列起个别名,这样结果集中就能显示别名

              select NVL(com,0)+1000 as 奖金 from emp;--->其中as可以省略。

    ii.条件查询:与前面介绍的update和delete语句一样,select语句也可以使用where子句来控制记录。

          select empno, sal from emp where sal>15000;

          练习:找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。

          select * from emp where (deptno = 10 and job='经理') or (deptno=20 and job='销售员');

          练习:找出部门编号为10中所有经理,和部门编号为20中所有销售员,还有既不是经理又不是销售员但其工资大于或登陆20000的所有员工的详细资料。

          select * from emp where (deptno =10 and job='经理') or (deptno=20 and job='销售员') or(job not in('经理',‘销售员’) AND sal >=20000);

          练习:无奖金或奖金低于1000的员工;

          select * from emp where com is null or com<1000;//注意这里条件后面的null用is来赋值。

    iii.模糊查询:当你想查询姓张,并且名字一共由两个字组成时,就可以使用模糊查询。

          select * from emp where name like '张_';-->模糊查询需要使用like运算符,其中'_'匹配一个字符,注意,只匹配一个而不是多个。

          当你想查询姓张,名字几个字都行的时候,就要使用'%'了。

          select * from emp where name like '%张%';-->其中%可以匹配0到多个字符。

  排序:

     规则: order by 列 序, 列 序;

    1.升序:select * from emp order by sal ASC;-->按sal排序,升序!其中,ASC可以省略,省略默认升序。

    2.降序:select * from emp order by sal DESC;-->按sal降序排序。DESC不能省略。

    3.使用多列作为排序条件:select * from emp order by sal ASC ,com DESC;

  聚合函数:聚合函数用来做某列的纵向运算。

    1.count(*):计算所有行不为空的数。()中可传入参数

      select count(*)  from emp;计算emp表中所有列不为Null的记录的行数。

      select count(com)from emp;计算emp表中com列不为null的记录的行数。

    2.sum():

      select  sum(sal) from emp;查询工资和;

    3.max():

      select max(sal) from emp;查询最高工资;

    4.min():

      select min(sal) from emp;查询最低工资;

    5.avg():

      select avg(sal) from emp;查询平均工资;

  分组查询:group by。

  举个通俗的例子,全班的同学站排,男生站一排,女生站一排,这就是用性别来分组。当然,用来分组的列必需有重复列才有意义,如果按名字或者身份证号来分,会分出很多单一的组,这样是毫无意义的。分完组之后,还要相应的查询组信息。组信息跟单行记录的信息是不同的,比如分好组之后,你属于男生这排还是女生这排,这就是在问你组信息。而你这个人的信息就是单行记录的信息。总之记住一句话,分组查询查的是组信息,不能 携带个人信息。组信息有个特点,就是都用聚合函数来表示。

  select job,count(*) from emp ;没分组之前。

  select job,count(*) from emp group by job;分组之后。逗号之前的字段也就是红色字体必需跟group by后面的字段一一对应。

    例:select deptno,count(*)from emp where sal>15000 group by deptno having count(*)>=2;

    注:前置条件用where,后置条件用having;emp是员工表,deptno是该表的列表示部门编号,sal是员工表的列表示薪水。

      以部门分组,查询每组记录数。前置条件为工资大于15000,后置条件为记录数大于等于2。这句话的意思是,查询员工工资大于15000且员工数量超过2个的部门编号。

  总结一下sql语句执行顺序。select from where, group by, having, order by。先执行where条件,筛选完之后分组,分完组执行having条件,最后在进行排序。

  

【oracle笔记1】基础知识大集锦:增删改,数据类型,用户操作,持续更新中···的更多相关文章

  1. C#学习笔记(6)——大项目增删改查

    说明(2017-5-28 11:35:39): 1. 需要注意的地方很多 2. 首先是连接字符串str要直接写在类里面,不然每个按钮里面都要写一遍. 3. 查询用到sqlDataReader等三个方法 ...

  2. python 基础知识 列表的 增删改查 以及迭代取值

    """ python 列表 通用方法 元组.数组.字典 取值方法 [] 列表中可以存储不同类型的数据 函数 封装了独立的功能可以直接调用 函数名(参数) 方法 和函数类似 ...

  3. MySQL系列(一)--基础知识大总结

    MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...

  4. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  5. 转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1.     TCP/IP是 ...

  6. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  7. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  8. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  9. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

随机推荐

  1. static修饰java内部运行顺序

    package com.demo01; public class Static extends demo{ /** * @param args */ private static String str ...

  2. es6 import笔记

    export输出: // profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958; export ...

  3. 用CSS隐藏页面元素的5种方法

    1.opacity设置一个元素的透明度只是从视觉上隐藏元素,对页面布局还是有影响,读屏软件会原样读出 2.visibility设置为hidden将隐藏我们的元素,对网页布局还是起作用,子元素也会被隐藏 ...

  4. IOS如何下载旧版本应用APP

    前言 文章相对来说比较复杂,特别是查找版本ID对应的步骤,这里推荐使用另一种方案,操作起来更简单. 本文介绍如何使用Workflow及Fiddler下载IOS旧版本APP应用. 实现原理 通过Work ...

  5. 十、一行多个:使用float布局的经典方法 ---接(一)

    1.使用float必须要清除float:即在使用float元素的父级元素上清除float. 清除float的方法有三种,在父元素上加:1.width: 100% 或者固定宽度 +overflow:hi ...

  6. Oracle数据库设计实例-实时生产效率系统数据库设计

    Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...

  7. redis外网连接的一些坑

    前言 在使用阿里云和腾讯云的redis 可以减少很大的维护量.但是在我们的业务场景中遇到了一个情况,阿里和腾讯的redis均不支持外网访问.因此,正好帮人解决一个问题,就拿出来分享一下. 阿呆的故事 ...

  8. Doing Research Needs Efforts

    What is research?   From YouTube Video or baiduyun Links What does not? spend many hours before you ...

  9. unity3d中设计模式的学习<一>:泛型单例

    单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须 ...

  10. POJ-1284 Primitive Roots---原根&欧拉函数

    题目链接: https://cn.vjudge.net/problem/POJ-1284 题目大意: 就是给出一个奇素数,求出他的原根的个数. 解题思路: 由于是m是奇素数,m的欧拉函数值为m - 1 ...