电玩城打鱼捕鱼-专业24小时上下分

数据的完整性

七月 19th, 2019  |  电玩城上下分数据库

 

内连接:返回符合特定连接条件的查询记录
  • 等值连接:返回符合指定连接条件的值,这些值是相等关系

    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;--<>:不等于
    
  • 自然连接:特指在同一张表内通过特定连接条件查询符合连接条件的值

图片 1

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:连接字符串

#域完整性

  域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
 域代表当前单元     格 域完整性约束:数据类型   非空约束(notnull)
 默认值约束(default)    check约束(mysql不支  
 持)check(sex=’男’orsex=’女’)

  *数据类型

     数值类型、日期类型、字符串类型

  *非空约束  not null  

      CREATE TABLE student( Id int pirmary key, Name varchar(50) not
null, Sex varchar(10));

      INSERT INTO  student values(1,’tom’,null);

  *默认值约束

      CREATE TABLE student(Id int pirmary key,Name varchar(50) not
null,Sex varchar(10) default       ‘男’);

       insert into student1 values(1,’tom’,’女’);

      insert into  student1 values(2,’jerry’,default);

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

数据库设计范式

数据库设计范式简单的说就是关系数据库在设计时需要遵循的一种规范,数据库范式按照要求从低到高分为6大范式,即第一范式(1NF)~第六范式(6NF)。在第一范式的基础上进一步满足更多要求的称为第二范式,一次类推。越高的范式数据库冗余越小,一般来说,数据库只需要满足第三范式(3NF)就行了。

#引用完整性(参照完整性)

    外键约束:  foreing     key

     分清主次关系  外键依赖主键    先有主键  再有外键

      语法   

         CONSTRAINT 约束的名字   FOREIGN KEY(约束的字段) REFERENCES
主表(约束字段)

        ALTER  TABLE  次表名称  ADD CONSTRAINT 约束的名字 FOREIGN
KEY(约束的字段)               REFERENCES   主表(约束的字段);

    例:

    CREATE TABLE student(sid int pirmary key,name varchar(50) not
null,sex varchar(10)                   default‘男’);

    create table score(id int,score int,sid int ,
–外键列的数据类型一定要与主键的类型一致

    CONSTRAINT fk_score_sid foreign key (sid) references student(id));

   第二种添加外键方式。

    ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid)
REFERENCES     stu(id);

5.7大约束

唯一约束【允许一个空】UNIQUE

主键约束【不允许空,最少性,稳定性】PRIMARY KEY

检查约束  CHECK

自定义约束 

默认约束  DEFAULT

非空约束  NOT NULL

外键约束 FOREIGN KEY

 

 

数据模型

按照计算机系统的观点对数据进行建模。

#实体的完整性

概述:  实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行                数据不重复

约束类型有:主键约束 primary key      唯一约束 unique   自动增长列
 auto_increment 

  *主键约束

            注:每个表中要有一个主键。特点:数据唯一,且不能为null。

            第一种添加方式:

                 CREATE TABLE student( id int primary key, name
varchar(50));

            第二种添加方式:此种方式优势在于,可以创建联合主键

                 CREATE TABLE student(id int,name varchar(50),primary
key(id));

                 CREATE TABLE student(classid int,stuid int,name
varchar(50),primary key(classid                           ,stuid));

           第三种添加方式:

                 CREATE TABLE student(id int,name varchar(50));

                  ALTER TABLE  student  ADD PRIMARY  KEY (id);

*唯一约束

        特点是不能重复

        create table student(id int primary key,name varchar(255)
unique);

*自动增长列

       sqlserver数据库(identity)     oracle数据库( sequence)��

       给主键添加自动增长的数值,列只能是整数类型

      create table student(id int primary key auto_increment,name
varchar(255));

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

字符函数

  • 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
    

3.数据完整性分类

域完整性

实体完整性

自定义完整性

引用完整性

 

参照完整性约束

外键可以为空值;当外键不为空时,其取值只能等于参照的主键的某个值

 

 

一次修改多条记录
update employees e set e.salary = 
case e.employee_id
  when 1 then 5555
  when 2 then 6666
end
where e.employee_id<3;

4.数据完整性保持手段:约束

 

 

集合

集合中的元素可以把一条记录或者一个字段当做一个元素
用了集合再排序的时候,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;--用到了集合再排序只能使用数字了
    

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

四表联查

有如下几张表:

部门表: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);

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)】

 

 

 

 

 

 

 

 

 

 

 

 

概念模型

也称为信息模型,即按照用户的观点来对数据和信息建模

  • 实体(Entity):客观存在并可互相进行区分的事物称为实体
  • 属性(Attribute):实体所具有的某一特性称为属性,一个实体可有若干个属性来刻画。
  • 键(KEY):唯一标识实体的属性集称为键,一般分为超键、候选键、主键以及外键。
  • 域(Domain):属性的取值范围称为该属性的域。
  • 实体型(Entity
    type):用实体名以及其属性名集合来抽象和刻画同类实体称为实体型
  • 实体集:同型实体的集合称为实体集

6.T-SQL组成

数据库的约束

约束是表级强制执行的规则,当表中数据有相互依赖性时,可以保护数据不被删除

 

关注微信公众号获取更多相关资源

图片 2

Android小先生

1.数据库设计三大范式

组(聚合)函数

  • 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;--求每个部门的工资
    

 

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 表名;–删除指定的表

DCL数据控制语言【revoke  grant】

索引

使用索引大大加快查询的速度
对数据量大的,经常使用的表才去创建索引(需要维护的)
查询的时候与正常的一样

create index 索引名 on 表名(字段名。。。。);–创建索引delete index
索引名;–删除索引

2.数据的特点:正确,可靠,完整

图片 3

**范式一:保证数据库之中表每一列与主键有关{如果 某一行之中数据描述的是一个学生的实体包括   {id name sex age classid }  如果再多加一列 光照强度 这种数据已然背离了  第二范式,此时应该设计多张表    }**

添加注释

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

范式一:保证数据库之中表每一列的原子性{如果 某一列 出生地的内容:湖南-长沙-芙蓉区 ,这种数据已然背离了  第一范式,此时应该设计多张表    }

子查询

  • 子查询在主查询的前一次执行
  • 主查询使用子查询的结果
  • 子查询要用括号括起来
  • 将子查询放在比较运算符的右边
  • 子查询中不要加ORDER BY子句

应用场景:例如那些雇员的工资比林志玲的高?

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升序排列

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);
外连接:不仅返回符合连接条件的记录,也返回指定表中的不符合连接条件的记录

图片 4

  • 左外连接:先对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(经理),并且每一个经理自身也是公司的员工,自身也有自己的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
标签:, , ,

Your Comments

近期评论

    功能


    网站地图xml地图