什么是数据库?数据库就是用来存储和管理数据的仓库。首先我来简单介绍一下各数据库的背景,常见的数据库如下,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. 洛谷P1155 双栈排序(贪心)

    题意 题目链接 Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有\(40\),原因是存在需要决策的情况 比如 \(A = {10}\) \(B = {8}\) 现在进来一 ...

  2. IDEA 自动生成serialVersionUID

    场景:刚转到用IDEA,因为需要生成serialVersionUID,并没有自动生成. 转自:http://blog.csdn.net/liuzongl2012/article/details/451 ...

  3. Eclipse开发工具printf打印方法提示报错的解决方法

    最近在学习java,在练习printf方法的使用时按照书上的语法配置却出现了报错.报错内容为:The method printf(String, Object[]) in the type Print ...

  4. vs2010开发activex(MFC)控件/ie插件(二):js传参数

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50802075  js传参数给activex控件. 过程为:js变量通过activex类的属 ...

  5. Qt 之 QSS(样式表语法)

    https://blog.csdn.net/liang19890820/article/details/51691212 简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同.如果你熟悉 ...

  6. [MFC]选择目录对话框和选择文件对话框

    在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 //选择目录按钮void CDcPackerDlg::OnBnClickedDec ...

  7. How to prepare system design questions in a tech interview?

    http://blog.baozitraining.org/2014/09/how-to-prepare-system-design-questions.html 如何准备面试中的系统设计问题一直都是 ...

  8. Studying TCP's Congestion Window using NS

    Studying TCP's Congestion Window using NS How to obtain TCP's CWND value The most important value th ...

  9. U盘中毒了?教你如何删除System Volume Information这个顽固文件夹

    不得不说cmd命令很好用呢.最近我的U盘中毒了,格式化都删除不了System Volume Information这个顽固的文件夹,真心伤不起哇!还好现在解决了问题.看来以后得好好对待U盘,不能乱用了 ...

  10. Process.start: how to get the output?

    1: Synchronous example static void runCommand() { Process process = new Process(); process.StartInfo ...