您的位置:澳门新葡8455最新网站 > 数据库管理 > 数据库-个人-大杂烩

数据库-个人-大杂烩

发布时间:2019-10-05 16:07编辑:数据库管理浏览(85)

    1.数据库设计三大范式

    图片 1

    范式一:保险数据库之中表每一列的原子性{假如 某一列 出生地的剧情:云南-马尔默-望城区 ,这种数据已然背离了  第一范式,此时应该设计多张表    }

    目录

    图片 2

     

    简介

    在Android中储存数据不时会用到数据库,Android给我们提供了 一雨后春笋的API来操作数据库,特别简单,大家只必要输入相应的SQL语句,乃至不懂SQL语句,只传入对应的参数就可以使用。还会有局地第三方库,如GreenDao,OrmLite等都非常大的简化了对数据库的一些操作。那样即便我们不供给对数据库有多通晓同样能落到实处效果与利益,不过在直面目眩神摇操作时,对SQL语句的纯熟应用就显得尤为关键了。因为在Android我们只借使利用SQL语句对表操作,所以本文首要介绍SQL的接纳,只是简要介绍了数据库一些城门失火的概念,那样能有越来越清楚的认知。

    **范式一:保证数据库之中表每一列与主键有关{尽管 某一行之中数据描述的是三个上学的小孩子的实体富含   {id name sex age classid }  假如再多加一列 光照强度 这种数据已然背离了  第二范式,此时应当设计多张表    }**

    数据模型

    服从Computer种类的思想对数码开展建立模型。

     

    概念模型

    也称之为音讯模型,即根据客户的理念来对数码和新闻建立模型

    • 实体(Entity):客观存在并可互相开展区分的事物称为实体
    • 属性(Attribute):实体所独具的某一特征称为属性,叁个实体可有若干本性格来描写。
    • 键(KEY):独一标记实体的习性集称为键,日常分为超键、候选键、主键以及外键。
    • 域(Domain):属性的取值范围称为该属性的域。
    • 实体型(Entity type):用实体名以及其属性名集合来抽象和描绘同类实体称为实体型
    • 实业集:同型实体的集纳称为实体集

    范式一:保险数据库之中表每一列与主键直接有关 **{若是 某一行之中数据描述的是贰个学员的实业包括   {id name sex age classid }  如若再多加一列 classname  这种数量已然背离了  第三范式,此时应有设计多张表 }**

    具体世界的实体进入数据库

    • 1.讲现实世界中的客观对象抽象为概念模型
    • 2.把概念模型转化为某一DBMS(数据库管理种类)帮衬的数据模型

    2.数量的表征:准确,可信赖,完整

    键的定义

    • 超键(super key):在事关中能独一区分实体的品质集称为涉及格局中的超键。
    • 候选键(candidate key):不蕴含多余属性的超键(每三个天性都能分别实体)
    • 主键(primary key):客商选作区分实体发的三个候选键(foreign key)
    • 外键:在有些关系A中的主键出现在另多个关联B中,此时涉嫌A中的该主键称为关系B中的外键。

    事例表明: 职员和工人(身份ID号、姓名、年龄、性别)假使姓名也是独步一时的超键:居民身份证号、姓名、姓名+年龄、姓名+性别、居民身份证号+年龄、居民身份证号+性别候选键:身份ID号、姓名

     

    数据库设计范式

    数据库设计范式一句话来讲就是关周全据库在布署时必要根据的一种标准,数据库范式根据需求从低到高分为6大范式,即首先范式(1NF)~第六范式(6NF)。在率先范式的基本功上更为满意越来越多须求的名叫第二范式,贰次类推。越高的范式数据库冗余越小,平日的话,数据库只需求满足第三范式(3NF)就行了。

    3.数据完整性分类

    域完整性

    实业完整性

    自定义完整性

    援引完整性

     

    第一范式

    是数据库设计的最基本的渴求,不满意1NF的数据库不是关系型数据库
    所谓第一范式就是指数据库表的每一列都是不可分割的主干数据项,同一列中只可以有一个属性(也便是说贰特品质下无法再分出别的的脾性来)

    4.数据完整性保持花招:约束

     

     

    其次范式

    其次范式是在率先范式的底蕴上树立起来的,即满意2NF必需先满足1NF
    只出现在复合主键的数据库表中
    其次范式须要数据库表中的各种实例恐怕行必得能够被独一地分别,所以实体必须设置主键,而且实体的质量必得完全正视于主键,不得出现非主键属性部分信任于主键的意况。

    主键为学号+课程名称,而学分正视于学号,这就是所谓的非主键属性依赖于主键的气象,那是不适合2NF的,出现了数量的冗余(存款和储蓄多余的数据,浪费空间),化解办法正是拆成3张表。

    5.7大约束

    独一约束【允许三个空】UNIQUE

    主键约束【不容许空,起码性,牢固性】P瑞鹰IMAWranglerY KEY

    检查约束  CHECK

    自定义约束 

    默许约束  DEFAULT

    非空约束  NOT NULL

    外键约束 FOREIGN KEY

     

     

    其三范式

    务求三个数据库表中不分包已在任何表中已富含的非主关键字消息(非主键属性不可能冒出在第二张表中)

    非主键属性重复了,完全能够依附编号(主键)去查询部门简要介绍和称号

    6.T-SQL组成

    数据库设计的完整性约束

    DDL数据定义语言【create  drop  alter  declare  】

    实业完整性约束

    各种实例或然行的主键都不能够为空

    DCL数据调节语言【revoke  grant】

    参照完整性约束

    外键可感到空值;当外键不为空时,其取值只好等于参照的主键的有个别值

    DML数据管理语言【insert  update  select  delete】

    数据库的自律

    封锁是表级强制施行的法则,当表中多少有互相正视性时,能够维护数量不被删除

     

     

    封锁的连串:

    • 表级约束和列级约束,他们相互在效劳上未有任何的差别,但日常假若有些约束用于于处处叁个列时,只可以选取表级约束的款式来展开表述,固然多少个字段组成耨表的联手主键时。
    • 列级约束: 在概念列的时候:列名 约束类型 表级约束 在概念完全部的列后:列名,列名,。。。 约束类型

    6.询问方式

    选择  【int()  not in()  between   and     】

    模糊  【通配符: %   _   *     】

    筛选  【where  like  = 】

    排序  【order by  】

    聚合  【count  sum  avge  max  min   】

    分组  【group by 】

    连年  【 内连接  外接连  全连接  交叉连接  】

    子查询  【select  * from  A   where id not in (select  id from A where id>=10)】

     

     

     

     

     

     

     

     

     

     

     

     

    oracle有如下类型的羁绊:

    not null:非空
    primary key:主键约束
    foreign key:外键约束
    check:检查约束
    unique key:独一性约束

    not null(非空约束)

    create table student(
         name varchar2(10), 
         sex varchar(5) not null, 
         age integer)
    

    primary key(主键约束)

    表级格局定义主键

    create table student( 
        name varchar2(19),
        sex varchar2(10),
        age integer,
        constraint student_age_pk primary key(age)
        );
    

    把age定义为主键(student_age_pk:约束的名字有一定的行业内部:表名主键名封锁类型)

    列级格局定义主键

    create table student( 
       name varchar2(19) primary key,
       sex varchar2(10),
       age integer);
    

    foreign key(外键约束)

    create table emp(
       empno number(4), 
       ename varchar2(10) not null, 
       job varchar2(9),
       deptno number(7,2) not null, 
       constraint emp_deptno_fk foreign key(deptno) references dept (deptn)
       );
    

    --references dept (dept):外键所对应的主键所在的表 关键字 主表 主键

    SQL语句

    • 常用数据类型 2.子查询(单行子查询和多行子查询)
    • select语句 条件查询 模糊查询 轻易去掉重复的查询结果 关于空值
    • order by
    • 单行函数
    • 字符函数
    • 数值处理函数
    • 日期管理函数
    • 类型转变函数
    • 通用函数
    • 组(聚合)函数
    • 言语的施行种种
    • insert
    • detect
    • update
    • 政工与锁
    • DDL语句(数据定义语言)
    • 多表联合查询
    • 集合
    • 视图
    • 自律原则
    • 丰盛注释
    • 索引
    • 经文案例

    常用数据类型

    • varchar2(size):可变长度的字符串,最大尺寸为size个字节,size最大值为6000,最小值为1
    • char(size):固定长度的字符数据,其尺寸为size个字节,最大值为三千,最小值和暗中同意值为1,不管实际的长度为多少都会分配钦点的size个字节
    • number(p,s):有效位数为p且精度为s的数值(小数点后有s位)p的取值范围为1到38
    • date:有效日期范围从公元前4712年七月到公元后4712年三月14日
    • long:可变长度的字符数据,其长度可达2G个字节

    查询

    子查询

    • 子查询在主查询的前叁次试行
    • 主查询使用子查询的结果
    • 子查询要用括号括起来
    • 将子查询放在比较运算符的右边手
    • 子查询中永不加OGL450DE奥德赛 BY子句

    应用场景:比方那么些雇员的薪给Billing志玲的高?

    单行子查询

    • 询问结果为一行

    • 单行子查询只好利用单行比较运算符 =,>,>=,<,<=,<>

      select name,job from emp where job = (select job from emp where empno = 7369);
      select ename,job,sal from emp where sal=(select min(sal) from emp)
      

    相关子查询

    图片 3

    多行子查询

    • 询问结果为多行
    • 多行子查询只好动用多行对比运算符

      IN:等于列表中的任何值
      ANY:比较子查询再次回到的每贰个值,只要个中三个满足条件就回到true
      ALL:比较子查询重返的每三个值,要其中具备的值都满足条件才回去true

    使用IN:

    select empno,ename,job from emp where deptno in(select deptno from emp where ename = 'SMITH' or ename ='MITLER');
    

    使用ANY

    • <ANY : 指小于最大值

    • ANY : 指大于最小值

    • ANY:与IN等价

      select empno,ename,job from emp where sal <ANY (select sal from emp where job = 'clerk')
      

    使用ALL

    • <ALL : 指小于最小值
    • ">ALL" : 指大于最大值
    select empno,ename,job,sal from emp where sal > ALL(select avg(sal) from emp GROUP BY depton)
    

    SQL语句

    • select语句

    select 列名 form 表名select name from student
    select * from student :查询全数的列
    select name,sex from student

    • select name as myname from student:队列中选用外号

      • 询问结果展现的列用小名突显(as 用别名呈现)
      • 事先是结果列名字为name as后为myname
      • 不写as将在加引号或许空格:select name "myname" form student
    • 列使用算数表达式:

      • select name,sal,sal+100 from student: 查询sal和sal+100
    • 至于空值

      • 空值为不可用,不通晓,不适用的值
      • 空值不等于0或然空格
      • 包涵空值的算数表明式等于空
    • 连日来操作符

      • 可将列或许字符与别的列连接起来,用双竖线标志(||)
      • 产生的结果是三个字符表明式
      • 接纳连接操作符查询,再次来到结果是二个连接后的结果(各样结果的连天)
      • select name || sex as new from student:将name和sex的询问结果连接起来呈现并安装查询结果对应的列名字为new
    • 简言之去掉重复的询问结果

      • 选用distinct关键字能够是某列中再次的值不彰显
      • distinct操作会引起排序,通过排序去掉重复的笔录
      • distinct必需放在第一列的先头,只好促成单列去重
      • select distinct sex from student
    • 原则查询

      • select 列名 from 表名 where 条件
      • where前面不能够使用别称
    • 漏洞非常多查询

      • 使用like运算符举办通配查询
      • 查询条件得以包含文字字符或数字
      • %:表示0或三个字符
      • _:表示二个字符

      select name from student where name like 'S%' :只展现以S发轫的全名
      select name from student where name like '_A%' :只体现第3个字符为A的名字
      select naem from student where name like '%A_B%' :只展现含有A_B的名字(:转义字符)

    order by

    • 使用order by能够将记录举行排序
    • ASC:升序(私下认可的),DESC:降序排列
    • order by 只好放到全部select语句的结尾

    select name,sex,age from student order by age asc:遵照age进行降序排列
    select name,sex,age,sal from student order by age asc,sal desc:依据age降序排列,若是相等则在依照sal升序排列

    单行函数

    • 用来操作数据项
    • 还可以参数并回到一个值
    • 对每三个回来行起功效,每一行再次来到一个结出
    • 可利用调换函数修改数据类型
    • 可使用嵌套情势
    • 大范围的单行函数包含字符、数字、日期管理函数、类型转换函数、逻辑管理函数等

    字符函数

    • lower:将字符串全部产生小写

      select name,sex from student where LOWFR(name) = 'blake'; 查询姓名为blake的相应属性,不管姓名是大小写还是大小写混写的都能查出
      
    • upper:将字符串全体成为大写

    • initcap:将字符串的率先个假名变为大写

    • concat:将三个字符串拼接起来

    • substr:截取字符串

      select substr('helloword',2,5) from dual;--从第二个开始数5个
      
    • length:再次来到字符串的长短

      select length(t.empfirstname) from employee t;
      
    • instr:在三个字符串中定位子字符串的义务(未有的话重回值为0)

      select instr('hellword','w')from dual;--查询w在hellword中的位置
      
    • 左补齐函数(lpad)

    • 右补齐函数(rpad)

      select e.empfirsname,rpad(e.empfistname,10,'&') from employees e;--设置长度为10,不够的用&补齐
      
    • replace:替换函数

      select replace('ABCDFG','D','www') from dual;--用www替换D
      
    • trim(leading|trailing|both y from x):从x中截去单个字符y

    • both:截去两侧的;leading:从左侧;traiing:从左侧

      select trim(both 'h' from 'hooojdhh') from dual;--截去两边的h
      

    数值管理函数

    • 1.round:保留钦点的位数(按四舍五入)

      SELECT round(5.75), round(5.75, 1), round(15.75, -1) FROM dual;--1代表保留一位小数,-1表示个位也四舍五入
      
    • trunc:间接去掉小数点,未有四舍五入

      SELECT trunc(5.75), trunc(5.76, 1), trunc(15.75, -1) FROM dual;--1表示保留一位小数,直接去掉后面的,不四舍五入
      
    • mod:去余数

      select mod(1600,300) from dual;--返回结果为100
      
    • abs:去相对值

      select t.quotedprice -100 from order_details t where t.ordernumber =354 and t.productnumber = 13;--返回
      
    • sign(x)返回x的符号

    若x<0,返回-1;若x=0,返回0;若x>0,返回1

    • floor(x)重回小于或等于x的最大整数

      select floor(5.8),floor(-5.6) from dual;
      
    • ceil(x)重回大于或等于x的非常的小整数

      select ceil(5.8),ceil(-5.6) from dual;
      
    • power(x,y)返回x的y次幂

    日期管理函数

    • sysdate:再次来到系统的前段时间时刻

      select sysdate from dual;
      
    • add_months(x,y):重回x加上y个月的结果,假诺y为负值,正是减去

      select add_months(sysdate,10) from dual;
      
    • last_day(x):重临包涵x月的尾声一天

      select last_day(date '1993-04-28') from dual;--返回结果为1993-04-30
      
    • next_day(x,day):从x时间起始,再次回到下三个day的年华值

      select next_day(sysdate,'星期一') from dual;--从系统的当前时间开始,返回下一个星期一的日期
      
    • months_between(x,y):再次来到x和y之间有多少个月(x-y),能够是负数

      select months_between(sysdate,date '1993-04-28')/12 from dual;--计算出某个人的周岁
      
    • round(date,month/day):

    Month 1-13日算上个月,11日后算下叁个月
    Year 1-7月算下季度,7-二月算下季度

    select round(date'2014-7-16','month') from dual;--返回2014-8-1 select round(date'2014-7-16','year') from dual;--返回结果为2015-1-1
    
    • trunc

      select trunc(date'2014-7-16','month') from dual;返回结果为2014-7-1
      

    类型调换函数

    数据类型调换富含隐士类型转变和出示类型转变
    隐士类型转换:系统自动转变
    呈现类型调换:调用相应的函数调换

    TO_CHA兰德Kuga:字符串调换(其余类型转变为字符串)
    TO_NUMBECRUISER:数值转换
    TO_DATE:日期转换

    • TO_CHAR

    将日期转变为字符串格式
    不可能不用单引号括起来,大小写不灵敏
    有贰个fm成分,用于补充空格恐怕禁绝前边的零
    利用逗号分离日期
    TO_CHAR(date,'fmt')
    常用的日子格式:
    YYYY:贰人数表示的年
    YEACRUISER:拼写出的年
    MM:两位数字的月
    MONTH:全月明(例如:sepember)
    DD:两位数字代表的月
    DAY:全天名

    select name,TO_CHAR(hiredate,'fmDD Month YYYY') HIREDATE from emp
    
    • TO_NUMBELX570:将字符串转化为数值TO_NUMBER(char)

      select * from emp where deptno = TO_NUMBER('30')
      
    • TO_DATE:将字符串调换为日期TO_DATE(char,['fmt'])

      select TO_DATE('2006-05','YYYY-MM') from DUAL
      

    通用函数

    • nvl(value,srt):如若第八个参数不为null,就回来第二个参数,假如为null就赶回第1个参数

      select nvl(e.name,'name is null') from employee e;
      
    • nvl2(value,x,y):倘若value为null就回到y,不然重回x

      select nvl2(s.class_id,1,2) from students s;
      
    • nullif(x,y):假设相等重回null,不对等则重临x;

      select nullif(s.sex,'男') from students s;
      

    case表明式:(选用表明式)

    Case国际sql通用辅助的,使用case可移植更加好。相当于在SQL中实行if语句 CASE 可用于允许行使有效表明式的大肆语句或子句。 比如,能够在 SELECT、UPDATE、DELETE 和 SET 等话语以及 select_list、IN、WHERE、O智跑DER BY 和 HAVING 等子句中运用 CASE。

    select e.salary,
    case e.type_id
       when 1 then e.salary*2 
       when 2 then e.salary*3
       when 3 then e.salary*4 
        eles e.salary*5
    end 
    as new_salary from employee e;
    

    说明:当typeid为1时,薪水2,当typeid为2时,薪水3,当type_id为3时,薪水4,其余景况下薪资5;

    组(聚合)函数

    • max(),min().avg():注意单行与多行不可能放在一块儿

      select max(e.aslary),e.type_id from employee e;--会直接报错的,单行结果与多行不能放在一起
      
    • count:计算函数 : 计算字段时不总结null的

      select count(*) from employee;--统计该表一共有多少条记录(里面加任意的数字也可以count(2))
      select count(e.manager_id) from employee e;--按照某个字段统计,空值不统计
      
    • group by:分组
      构元素组函数使用
      group by前边的列能够不出新在select后面,但出现在select后边的列必需出现在group by子句里面
      倘使select列表中既有平时性列又有分组函数,则必得选用group by子句
      集中分组函数的原则限制不可能利用where,只好利用having,且用了having必得选择group by。

      select e.division*id,avg(e.salary) from employees2 e group by e.division*id;--求每个部门的工资
      

    语法的推行顺序

    1.select 2.from 3.where 4.group by 5.组函数 6.having 7.order by

    表明:having与where功用雷同,就是实施的次第区别样eg:select e.division_id,avg(e.salary) from employees2 e group by e.division_id where avg(e.salary)>1陆仟0;--会报错的,因为where比组函数(avg)先推行,在举行where的时候,avg(e.salary)还并未有算出来,所以会出错,换到having就没事了。

    • insert into(插入语句)
      布置时注意完整性约束标准(外键的取值)
      插入的时候插入到首行

      insert into 表名(插入的字段)values(字段对应的值)
      insert into student values(3,'name','sex',12); 
      insert into student(id,name) values(4,'name'); 
      insert into student values(5,'''name','sex',12);
      

    安顿的名为'name insert into student(name,sex) values(&Name,'nan');
    &:变量,在进行该语句时,会让您输入name要插入的值(Name变量名本身起的) 三次插入多条语句,要查入得值从另四个表中取多少 insert into student(name,sex,age) select name,sex,age from student2 where id>10;

    • delete(删除语句) : delect from 表名 条件

      delect from student where id=3
      
    • update(修改语句) : update 表名 set 字段名=要修改的值 条件

      update student set name=gfdd where id=2;
      update studnet set name=gggg,sex=nv where id=3;
      

    事务

    一组sql语句一块施行,要么一齐成功,要么一同失利 以commit早先

    • commit:提交eg:commit

    • rollback:回滚(撤销)eg:rollback

      commit;select * from customers;insert into customers values(6,'gfd','red',date '1993-04-28',null);
      insert into customers values(7,'gfd','red',date '1993-04-28',null);
      savepoint A;--添加保存的点,回滚时可以指定到该位置
      insert into customers values(8,'gfd','red',date '1993-04-28',null);
      savepoint B;
      insert into customers values(9,'gfd','red',date '1993-04-28',null);
      rollback to A;--回滚到A点
      

    锁:保险数据库的一致性(同步):自增加锁

    T1实施 update students set name='gfd' where id=3; 假使T2想修改id=3的多少,必需等T1提交后技巧改改(也正是说提交后自动释放锁)

    死锁

    T1 update students set name='gfd' where id=3;
    update students set name='gfd' where id=4; T2 update students set name='gfd' where id=4; 
    update students set name='gfd' where id=3; 
    

    表明:在T1,T2实施完第一条语句时,再施行下一条语句时,都被各互相锁着,所以都不能够进行下去了。 就涌出了死锁的状态,oracle数据库会自动解锁一条语句

    DDL语句(数据定义语言)

    对表的操作能够通过DDL语句举办,包罗:

    • create:创设新表,必得以字母开端,访谈其余顾客的表时供给增添顾客名的前缀

      create table dept(deptno number(2),dname varchar2(14),loc varchar2(3));
      create table dept30 as select empno,ename,sal*12 ANNSAL,hiredate from emp where deptno=30;--数据从别的表中拷贝
      
    • 创建联合主键的表

      create table emp( emp_id integer, emp_name varchar2(20) not null, emp_bir date default sysdate primary key(emp_id,emp_name) );
      
    • alter:改动表的结构(字段)

    alert table 表名 add (扩展的列名 类型,。。。。。);--扩充列
    alert table 表名 modify (修改的列名 类型);--修改列
    alert table 表名 rename column 要修改的列名 to 新的列名;--修改列名
    alter table 表名 rename to 新的表名;--修改表名
    alert table 表名 drop column 要刨除的列名;--删除列
    alert table dept30 add (job varchar2(9));
    alert table dept30 modify (job varchar2(15));
    alert table dept30 raname column deptname to dname;alert table dept30 drop column job;

    • drop:删除表

    表中的全体数据将被剔除
    东西被自动提交
    怀有的目录被剔除
    无法回落
    干净删除表
    drop table 表名;--删除钦点的表

    • truncate:飞速删除表中的具备记录

    一贯删除全部的笔录,不恐怕钦命删除条件
    无法回降
    只会去除数据,会保留表的结构(字段),能够重新插入数据
    速度快于delect
    truncate table 表名;--删除钦定的表

    自律标准

    • primary key(主键约束)

      • 在制造的表的时候钦点

        create table emp(emp_id integer primary key)
        
      • 在表创设完成后加多主键约束

        alter table stu add primary key (emp_id);
        
    • foregin key(外键约束)

      • 两张表未有树立外键关系

        alter table stu add foregin key(stu_id) references xi(xi_id)
        
      • 除去外键的时候,相应表中与该外键的关于的记录也一切去除

        alter table stu add foregin key(stu_id) references xi(xi_id) on delete cascade
        
      • 删除此而外键的时候,相应表中与该外键的有关的列全体装置为null

        alter table stu add foregin key(stu_id) references xi(xi_id) on delete set null
        
    • unique(不可能重复约束)

      alter table emp add unique(emp_name);--可以插入null(null值可以重复)
      
    • check(取值范围约束)

      alter table emp add check(em_sex in ("男","女"));alter table emp add check(em_id>0);
      

    索引

    选取索引大大加速查询的快慢
    对数据量大的,平日利用的表才去成立索引(必要维护的)
    询问的时候与不荒谬的一律

    create index 索引名 on 表名(字段名。。。。);--成立索引delete index 索引名;--删除索引

    视图

    能够掩盖一些新闻
    虚拟的表(不真正存在,基表的数据删除时,视图中的数据也会删除)
    能够拓宽增加和删除改查(对视图表中的数据变动时,基表的数量也会改变)
    若是视图中能见到的,基表中不容置疑能旁观

    create or replace view ch_view as select * from products p where p.price<15;--创建视图
    select * from ch_view;--查询视图insert into ch_view values(14,3,'fff','ggg',12);--插入数据
    

    加上注释

    comment on table 表名 is ‘注释’;--表增添注释
    comment on column 表名.字段名 is ‘注释’;--字段加多注释

    多表联合查询

    尚无点名连接条件的多表查询将导致笛Carl积的结果
    笛Carl积结果:多少个表中颇有数据的凑集都会询问出来

    图片 4

    笛Carl积

    多表连接查询中的连接类型

    图片 5

    内连接:重回相符一定连接条件的查询记录
    • 等值连接:重回适合钦定连接条件的值,这么些值是特别关系

      select * from products p,product_type pt where p.type_id = pt.type_id;
      select * from products p inner join prodect_type on p.type_id = pt.type_id;--inner join on 条件
      
    • 非等值连接:重返切合钦命连接条件的值,那个值不是拾壹分关系

      select * from products p,product_types pt where p.product_type_id <> pt.product_type_id;--<>:不等于
      
    • 当然连接:特指在同等张表内通过特定连接条件查询相符连接条件的值

    图片 6

    select * from products p natural inner join purchases pt;--自动按着相等的去连接,不用加条件了 在emp中每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的mgr。我们需要将每一个员工自己的名字和经理的名字都找出来。
    select worker.ename,'work for',manager.ename from emp worker,emp managetr where worker.mgr = manager.empne work for:连接字符串
    
    外接连:不唯有重返相符连接条件的记录,也回到钦命表中的不切合连接条件的记录

    图片 7

    • 左外连接:先对A表和B表做内连接,再把A表中未有相称的结果集增添进去造成新的结果集(相应的右表的值(对应A表未有相配的)为null)

      select * from newdept left outer join newemp on newdept.deptid = newemp.deptid;--outer可以省略 
      。。。。。。。where a.deptno = b.deptno(+);--左连接
      
    • 右外连接: 先对A表和B表做内一而再,再把B表中绝非相称的结果集增加进去产生新的结果集(相应的左表的值(对应B表未有相称的)为null)也回到

      select * from newdept right outer join newemp on newdept.deptid = newemp.deptid
      。。。。。。。where a.deptno(+) = b.deptno;--右连接
      
    • 全外连接:在内连接的功底上,把左右两表中不相符连接条件的笔录都回去

    在emp中每五个职员和工人都有谈得来的mgr(总裁),并且每几个CEO本身也是集团的职工,本身也可以有和好的mgr。我们供给将每二个员工本人的名字和经纪的名字都寻觅来。

      select worker.ename,'work for',manager.ename from emp worker,emp managetr 
      where worker.mgr = manager.empnework for:连接字符串
    

    用SQL语句列出EMP表中兼有机关的详细音信以及相应的单位人数

    select a.* , b.* from dept a,(select deptno,count(*) from emp group by deptno) b where a.deptno = b.deptno(+)
    
    • 全外连接

    用SQL语句列出NEWEMP表和NEWDEPT表中有着机关和职工的详细音信:

    select * from newdept full outer join newemp on newdept.deptid = newemp.deptid
    

    集合

    聚聚集的成分得以把一条记下可能贰个字段当作二个要素
    用了聚众再排序的时候,order by 字段的职位(举例 1):只可以用数字了

    • intersect:交集

    • minus:减集

      • 在一张表中展现了,就不在另一张表中出现了(A表 minus B表):突显B表去除与A表同样的一对
    • union all:并集(加all不去重)union :去重

      select * from (select * from (select * from employees2 e order by e.salary desc) where rownum<11
      minus
      select * from (select * from employees2 e order by e.salary desc) e where rownum<4) order by 6;--用到了集合再排序只能使用数字了
      

    经文例子

    依附时间总结胜负数

    图片 8

    实践sql语句造成为:
    select
     t_date, 
     (select count(*) from t where t_status='胜' and t_date=e.t_date) 胜, 
     (select count(*) from t where t_status='负' and t_date=e.t_date) 负
    from t e group by t_date order by e.t_date;
    
    两张表中的多寡运算

    图片 9

    select kc.mc "种类",kc.s1-(select sum(s1) from ck where ck.mc = kc.mc ) "剩余量" from KC;
    
    壹回修改多条记下
    update employees e set e.salary = 
    case e.employee_id
      when 1 then 5555
      when 2 then 6666
    end
    where e.employee_id<3;
    

    多表联合检查

    选购数码抢先一个的产品名,客商名以及购置的多寡(3张表)
    select * from products;
    select * from customers;
    select * from purchases;

    • 先是种方式

      select * from customers c inner join (select * from products p inner join purchases pr on p.product_id=pr.product_id) a on a.customer_id=c.customer_id where a.quantity>1;
      
    • 第两种艺术

      select * from (products p inner join purchases pr on p.product_id=pr.product_id and pr.quantity>1) inner join customers c on c.customer_id=pr.customer_id;
      
    • 其二种艺术

      select * from products p,purchases pr,customers c where p.product_id=pr.product_id and pr.customer_id=c.customer_id and pr.quantity>1;
      

    四表联合检查

    有如下几张表:

    部门表:organization(orgid ,orgName)
    商品表:Goods(goodsid,goodsName)
    销售单(单头):sale(billid,billdt,orgid,status)
    销售单(单体):sale_item(billid,goodsid,qty)

    orgid:协会编码;
    orgName:组织名称;
    billid:单据编号
    billdt:订单日期

    查询“出售一部”前些日子的商品出卖明细(商品编码。商品名称,发售日期,发售数目)

    select * from organization o,goods g,sale s,sale_item si 
    where 
    o.orgid=s.orgid and g.goodsid=si.goodsid ands.billid=si.billid and orgName="销售一部" and billdt>trunc(sysdate) and billdt < last_day(sysdate);
    

    精细入微微信大伙儿号获取更加的多相关财富

    图片 10

    Android小先生

    本文由澳门新葡8455最新网站发布于数据库管理,转载请注明出处:数据库-个人-大杂烩

    关键词:

上一篇:澳门新葡萄京娱乐场:的具体含义

下一篇:没有了