zoukankan      html  css  js  c++  java
  • 数据库

    一 基本概念

    1数据库(Database)     数据库管理系统DBMS(Database Management System)

    2标准数据查询语言SQL((Structured Query Language)

    主要包括DDL(数据定义语言),DML(数据管理语言),DCL(数据库控制语言)

    3 DML(数据管理语言)中DQL(数据查询语言)最重要

    2   表从属于用户,查询表采用(用户名.表名)

    用户访问自己的表可省略用户名

    其他用户若存在访问权限,访问表需要写明用户名

    4 oracle 命令不区分大小写

    二 表结构

    主体结构

    表名

    字段名

    字段类型

    number(长度,[精度])   char(定长长度) varchar2(变成长度) data timestamp

    字段约束

    记录

    三范式

        每一列都是不可分割的基本数据项定义每一列唯一性

        非主属性依赖于主键            定义主键

        非主键属性依赖于主键          定义外键,便于拆分表,避免冗余

    DQL(数据查询语言)

    1   基本格式

    SELECT       (distinct)  列名|* |表达式

    FROM        表名

    WHERE       行过滤条件

    GROUP BY     分组字段1,分组字段2  分组

    HAVING      组过滤条件

    ORDER BY    排序条件

    执行顺序(from—where—group by—having—select—order by ) 注意之后定义的内容不能之前使用

    查询逻辑(查询的内容  来源  条件)

    列名表示需要的字段,通过逗号分隔

    别名定义列的显示名称

    表名表示锁查询的表

    distinct去重  null也会进行去重

    --表示注释

    Order by 指定字段排序

    2   运算符与比较

    表达式根据计算结果生成一个列,可定义别名,表达式可以包含类名运算

    = 、>、 <、 >=、 <=、 !=(不等于)、 <>(不等于)  not

    and且、 or或、 not非

        between (较小值)and(较大值)   范围区间

        in (值1,值2 )        多个定值满足任意一个,可为值和字符串

        Union      对两个结果集求并集(去重)

        Union All 对两个结果集求全集(不去重)

        Minus      对两个结果集求差集(获取内容不重复的部分)

        Intersect     对两个结果集求交集(去重)

        Is         判断属性是否相同,=判断值是否相同  is和is not用于对null的判断

       

    3   字符串

    3.1基本概念

    1字符串用单引号扩住

    2字符串中小写自动转为大写 空格为非标准写法

    3通过””双引号扩住,能够保证非标准写法和小写原样输出

    4字符字符串拼接采用 || 实现

    3.2字符串模糊查找

        like 关键字进行查找 查找对象 % 表示若干任意字符  _ 表示一个任意字符

    基本结构 like ‘%呵呵_%’ escape(‘A’)   通过escape定义转义字符

    3.3null

    Null为空串,只能进行字符串拼接,无法进行计算

    null处理 nvl(列名,null的设定值) 若该列的值不为null不该变,若为null则设为设定值

    null值比较通过 is和is not执行

    3   子查询

    通过子查询获取结果集,结果集可以作为数据来源

    --查询工资比SMITH高的同一部门的员工信息

    select empno, ename, deptno, sal

      from (select *    --结果集

              from emp

             where sal > (select sal from emp where ename = 'SMITH')

               and deptno = (select deptno from emp where ename = 'SMITH'));

    在条件判断中通过子查询获取值,通过子查询结果进行条件判断

    --查询工资比SMITH高的同一部门的员工信息

    select *

      from emp

     where sal > (select sal from emp where ename = 'SMITH')

       and deptno = (select deptno from emp where ename = 'SMITH');

        子查询能够使用外查询定义的表

    4   exsit 存在即合法

        select * from emp where exsit(内部为一个存在判断) 

        作用1判断是否满足条件,若满足则全部显示

    作用2执行动态查找 外部存在

    --查询'SALES', 'ACCOUNTING'部门的员工信息

    select *

      from emp

     where exists (select deptno

              from dept

             where dname in ('SALES', 'ACCOUNTING')      --执行子查询

               and emp.deptno = dept.deptno);   --将子查询的内容与外部查询关联

    若是子查询与主查询都查的一个表,可以通过别名 进行区分

    5   别名

    as关键字   字段别名之前可以使用as 表别名不能使用as

     双引号原样输出,可以存在 空格与区分大小写

     

    7   获取所有记录

    select * from 表

    select * from 表 where 1+1 (推荐 便于程序后续处理,拼接and…)

    select * from 表 where 任意字段 like ‘%’

    8   Order By结果排序

    asc升序(默认) desc降序 null last null first升序

        格式 order by 字段1 desc(asc) , 字段2 desc(asc) null last

     

    5   时间对象

    SYSDATE CURRENT_DATA 当前时间

    字符串转换

        将字符串转为时间对象to_data('2019/6/18 14:20:13','yyyy/mm/dd hh24:mi:ss')

        将时间对象转为字符串to_char(时间对象, 'yyyy”年”mm/dd hh24:mi:ss')可部分获取

    时间+(int) 对天数进行更改,可为负数

    add_months(时间对象,变化月) 对月份进行修改

    months_between(时间对象1,时间对象2) 获取月份差(大月前,小月后)

    last_day(时间对象)        获取当月最后一天

    next_day(时间对象,’星期几’) 获取下一周的指定日的时间  

     

    6   decode case 选择处理

    结构 decode(字段,1,结果1,2,结果2…,默认值)

    对字段值进行判断,根据内容赋给不同的对应值 值可以为其他字段/字符串/数字

        结构 case 字段 when then (重复when,then)结果1 else 默认值 end

    对字段值进行判断,根据内容赋给不同的对应值 值可以为其他字段/字符串/数字

    11  事务与回滚

        commit 对数据增加,删除,修改的时候,会自动开启事务 

    rollback 取消当前事务的修改内容

    12  伪列和虚表

    伪列: 表中不存在的列 可以是计算公式可以是字符串

    SELECT 1+1 FROM EMP 获取1+1的伪列

    虚表:dual表中没有任何数据

    SELECT 1+1 FROM DUAL 获取生成1+1伪劣的DUAL的虚表

      聚合函数  

        常用名称:函数|组函数|组合函数|聚合函数

        max()最大  min()最小  avg()平均 sum()求和  count(字段|1|*)计数

        null不会导致报错

    -- 计算20部门每个月的工资花销和平均工资

    select sum(sal),avg(sal) from emp where deptno=20;

        聚合函数只能和组函数或者分组字段共同使用不能直接使用在where

        能够通过子查询间接使用

    select ename,sal from emp where sal=(select max(sal) from emp);

        聚合函数能够嵌套

    select min(avg(sal)) from emp group by deptno

      分组

        group by …having…

    --找出20部门和30部门的最高工资

    select max(sal) ,deptno

    from emp

    group by deptno

    having deptno in(20,30);

     

    select max(sal), deptno

    from emp

    where deptno in(20,30)

    group by deptno;

        聚合函数和分组字段混用

    select max(sal),deptno from emp group by deptno;

      行转列 

    Id

    Name

    Course

    Score

    1

    张三

    语文

    81

    2

    张三

    数学

    75

    3

    李四

    语文

    81

    4

    李四

    数学

    90

    5

    王五

    语文

    81

    6

    王五

    数学

    100

    7

    王五

    英语

    90

     

    select name,

    min(decode(course, '语文', score))              --语文

    min(decode(course, '数学', score))               --数学

    min(decode(course, '英语', score))             --英语

    from tb_student

    group by name;

    张三 81 75 李四 81 90 王五 81 100 90

    张三

    81

    75

     

    李四

    81

    90

     

    王五

    81

    100

    90

     

  • 相关阅读:
    calendar的用法
    为什么要初始化变量呢
    什么情况下,if()后面的else可以省略不写
    new 对象的时候,括号里有值和无值的区别
    if...else...;if..else if...else
    java-csv导出-导出文件显示的日期格式不正确
    使用Navicat连接MySQL,连接失败(报1064错误)
    MySQL下载安装详解(win10)
    Syntax error, parameterized types are only available if source level is 1.5 or greater
    eclipse ant出错问题
  • 原文地址:https://www.cnblogs.com/javaxiaobu/p/11055304.html
Copyright © 2011-2022 走看看