数据库

一 基本概念

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

 

原文地址:https://www.cnblogs.com/javaxiaobu/p/11055304.html