精华内容
下载资源
问答
  • 数据库基础知识1

    2021-01-09 21:43:38
    软件测试还要检查数据库中的数据是否正确,从而发现更深层的问题。 数据库的概念 是指长期存储在计算机中,有组织的数据集合。能够方便高效的查询。 RDBMS 关系型数据库系统 用表来存储数据,通过表来表示关系。 ...

    数据库

    为什么要学习?
    大部分软件的数据是存在数据库中,数据是软件的基础。
    软件测试还要检查数据库中的数据是否正确,从而发现更深层的问题。
    数据库的概念:是指长期存储在计算机中,有组织的数据集合。能够方便高效的查询。

    RDBMS

    关系型数据库系统 用表来存储数据,通过表来表示关系。
    核心:
    行:一条记录,记录一个事物的信息
    列:字段,代表一个事物的一个属性
    表: 同一类型的事物的集合
    仓库:一个仓库可以有很多个表

    SQL:结构化查询语言:操作关系型数据库的。不区分大小写

    MySQL

    开源 免费 使用范围广 支持多平台
    服务端:MySQL 提供数据的存储、查询等服务。
    客户端:navicat 提供界面,对服务端进行操作。
    服务端操作: 控制面板–管理工具–服务–MySQL–右键(启动/停止/重启)

    客户端操作:连接按钮–输入用户名和密码,端口号,服务端主机ip
    对数据库的操作:创建,打开,编辑,删除
    对数据表的操作:创建表 修改表 删除表
    对数据的操作:增删改

    数据类型与约束

    整数 :int 有符号可以存负数,无符号不能存负数,长度对int类型无意义 默认是有符号的
    小数 :ddecimal 长度有意义 例如 :(5,3) 整体长度最多是5位,小数点后最多3位 ,整数最多2位
    字符串 varchar 0~65533
    日期时间 :datetime 格式:年月日 时分秒

    约束:主键:物理上存储的数据 标识一条记录的唯一性,通常设置id字段为主键,此字段有唯一和不为空的特点。通常id字段设置为主键,同时设置为整数、无符号、自动递增
    非空:字段必须填值,null才是空,“空字符串不是空”
    唯一:此字段不允许重复
    外键:维护两个表之间的关键关系
    默认值:当不填写此值时会使用默认值,如果填写是以填写为准
    字符的默认值在设置的时候要加引号

    备份与恢复

    右键仓库–转储SQL文件–结构和数据
    做了备份就可以恢复
    新建数据库–运行SQL文件–选中刚刚备份的SQL文件–点击开始

    SQL语句

    仓库下–查询–右键点击–新建查询–写SQL语句 (以分号结尾)
    ctrl+/ 注释 Ctrl+shift+/ 取消注释

    创建表:

    create table 表名(
    字段名  类型  约束,
    字段名  类型  约束,
    字段名  类型  约束
    ...
    ) 约束必须写在类型后
    

    举例:

    create table student(
    id  int  unsigned    primary key  auto_increment            /主键
    name varchar(10),
    age int,
    age1 int unsigned  ,        / 无符号
    height decimal (5,2)
    );  最后一个字段不需要逗号
    

    删除表

    drop table 表名  /删除不存在的表会报错
    drop table if exists 表名
    

    添加一行数据
    语法一:所有字段设置值,值的顺序与表的字段的顺序一一对应(也不能少写)

    insert into 表名  values( ...  );   
    

    如果有自动递增的,插入时需要占位,通常使用0或default或者null来占位,插入成功后以实际数据为准
    语法一:部分字段设置值,值的顺序与给出的字段的顺序一一对应

    insert into 表名 (字段1,...) values( ...  );   
    

    添加多行数据

    insert into 表名 values (...)(...)...
    

    插入多个学生,设置所有字段的信息

    insert into 表名(name) values ('王昭君1'),('王昭君2');
    

    修改数据

    update 表名 set 列1=值1,列2=值2..               /修改多个字段要记得逗号
    where 条件                                                       /不能忘记写,忘记就会全部被改
    

    删除数据
    delete from 表名 where 条件 /如果不写where 会删除所有数据
    (其中自增长字段不会从1开始)

    truncate table 表名 (删除所有数据,但保留表的结构)
    (其中自增长字段从1开始)

    drop table 表名  /删除不存在的表会报错
    drop table if exists 表名
    (删除表。所有数据和表结构都被删掉)
    

    在速度上,drop>truncate>delete
    如果想删除部分数据 用 delete 记得加上where;如果想删除表就用drop

    查询

    1.简单查询
    1.1 查询所有字段

    select * from 表名
    

    1.2 查询部分字段

    delect 字段1,字段2,... from 表名
    

    1.3 起别名 / 在多表查询中经常使用

    给表:
    select  别名.字段1, 别名.字段2,... from  表名 as 别名  
    给字段:
    select  字段1 as 别名1 ,字段2 as 别名2,... from  表名 
    这个别名只出现在结果集中,原表没变化
    

    1.4 去重

    select distinct 字段1,...  from 表名 (dinstinct 不显示重复的数据)
    

    1.5 条件查询
    使用where

    select from students where id=1;
    

    where后面支持多种运算符:
    (1)比较运算
    等于 大于 大于等于 小于 小于等于 不等于!=或<>
    where 后的条件是过滤行的,select 后面是看需要哪几列
    (2)逻辑运算符
    or and not

    age<20 and sex='女'
    not hometown=‘天津'
    

    (3)模糊查询
    like
    %表示任意多个任意字符
    _表示一个任意字符

    where name like '孙%'
    

    (4)范围查询
    in 表示在一个非连续的范围内

    hometown in ('北京',’上海‘,'广东')
    

    between … and …表示在一个连续的范围内

    age between 18 and 20  (值1必须小于等于值2)
    

    (5)空判断
    where card is null
    与‘ ’是不同的,‘ ’是空字符串,没有填值才是null

    where not card *is* null 
    where  card *is* not null 
    

    1.6 排序

    select * from 表名
    order by 列1 asc ,列2 desc   
    

    (asc 升序,desc 降序 默认升序) 按多个字段排序,优先按第一个字段排序

    1.7 聚合函数
    为了快速得到统计数据,经常会用5个:count max min avg sum

    select count(*) from students;
    select count(name) from students; 
    

    count中要么写所有 要么写一个 不统计为null的数据

    select  max(age)  from students where sex='女'; :  查询女生中age中 最大值
    select  min(age)  from students where sex='女'; :  查询女生中age中 最小值
    select  sum(age)  from students where sex='女';   查询女生中age的年龄综合
    select  avg(age)  from students where sex='女';   查询女生中age的平均年龄
    select  avg(age) ,sum(age) ,min(age)  from students where sex='女'; 
    

    1.8 分组
    按照字段分组,此字段相同的数据会被放到一个组中,分组的最终目的是对每一组的数据进行统计(使用聚合函数)

    select sex,count(*) from students group by  sex;  
    

    按照哪个字段分组,select 后面就只写那个字段,再加上聚合函数

    select class ,sex,count(*)  from students group by class, sex;  
    select class, avg(age) ,sum(age)  from students group by class;  
    

    1.8.1 分组后的数据筛选

    select sex,count(*) from students group by  *sex* having sex='男';   
    

    对比where :
    where 是对from 后面指定的表进行数据筛选,属于对原始数据的筛选
    having是对group by 的结果进行筛选
    having 后面的条件可以用聚合函数,where 后面不能

    select sex,count(*) from students group by  sex  having count (*)>5;   
    

    练习
    select class ,avg(age) ,sum(age) from students group by class having class!=‘1班’;
    select class ,avg(age) ,sum(age) from students where class!=‘1班’ group by class ;

    1.9获取部分行
    当数据量过大的时候,在一页中查看数据是一件麻烦的事情

    select * from 表名
    limit  start,count
    

    从start 开始,获取count 条数据
    start索引从0开始 (start 省略,就是默认从0开始)

    2.0分页
    已知每页显示m条数据,求:显示第n页的数据

    select * from students limit (n-1)*m,m
    

    求总页数:
    查询总条数 p1 : select count (*)from students=12
    使用p1除以m得到p2 12/3=4
    如果整除则p2为总页数 4
    如果不整除则p2+1为总页数 select count (*) from students=13 13/3+1=5

    第一页 : select * from students limit  0,3
    第二页 : select * from students limit  3,3
    第三页 : select * from students limit  6,3
    第四页 : select * from students limit  9,3
    

    PS: 内容来源于视频 自己做的整理

    展开全文
  • 数据库面试题知识点总结

    千次阅读 2018-07-18 18:35:07
    数据库连接 数据库隔离级别 1)Read uncommitted(未授权读取、读未提交) 引发脏...3)Repeatable read(可重复读取):无虚读幻读(不能发现其它事务已提交更新或插入的数据)事务中的查询结果可复现的,那...

    数据库连接

     

    数据库隔离级别

    1)Read uncommitted(未授权读取、读未提交)  引发脏读,脏读是指读取了其他事务没有提交的数据

    2) Read committed(读提交)      Oracle等大部分数据库,默认使用这种隔离级别 。

    3)Repeatable read(可重复读取):无虚读幻读(不能发现其它事务已提交更新或插入的数据)事务中的查询结果是可复现的,那就是事务结束前不能觉察到其它事务提交的变化。Mysql 默认采用这种隔离级别。

    4) Serializable(序列化)。

    Oracle默认的事务隔离级别是read commited,在此级别下,通过多版本的控制解决了幻读和幻读

    Mysql 显然没有,但可以通过在数据库中设置乐观锁字段或使用悲观锁来控制数据一致性。

     

    什么是索引?索引有哪几种?

    索引用来快速地寻找那些具有特定值的记录,所有的MySQL索引都以B+树(平衡树)的形式保存。如果没有索引,执行查询的时候MySQL必须从第一个记录开始扫描整个表中的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

    索引的类型:

    1. 普通索引
      这是最基本的索引类型,而且它没有唯一性之类的限制,即允许该列有重复的值                                                                  CREATE INDEX index_name ON table_name (column_name)
    2. 唯一性索引                                                                                                                                                                                                  这种索引和前面的“普通索引”基本相同,但又一个区别:索引列的所有值都只能出现一次,即必须唯一 
      CREATE UNIQUE INDEX index_name
      ON table_name (column_name)
    3. 主键索引
      是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般是在建表的时候同时自动创建主键索引
    4. 组合索引
      指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合   
      ALTER TABLE `table` ADD INDEX name_city_age (name,city,age); 
    5. 全文索引
      主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

    使用索引时,有以下一些技巧和注意事项


    1.索引不会包含有null值的列
    只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。
    2.使用短索引
    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
    3.索引列排序
    查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
    4.like语句操作
    一般情况下不推荐使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
    5.不要在列上进行运算
    这将导致索引失效而进行全表扫描,例如

    SELECT * FROM table_name WHERE YEAR(column_name)<2017;

    6.不使用not in和<>操作

     

    索引原理

    想要理解索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用哈希桶作用索引的数据结构 , 然而, 主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。

    我们平时建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行。 事实上, 一个加了主键的表,并不能被称之为「表」。一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐, 跟我认知中的「表」很接近。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是上面说的「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错, 再说一遍, 整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。

     

    上图中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。 假如我们执行一个SQL语句:

    select * from table where id = 1256;

    首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。 这里不讲解平衡树的运行细节, 但是从上图能看出,树一共有三层, 从根节点至叶节点只需要经过三次查找就能得到结果。

    假如一张表有一亿条数据 ,需要查找其中某一条数据,按照常规逻辑, 一条一条的去匹配的话, 最坏的情况下需要匹配一亿次才能得到结果,用大O标记法就是O(n)最坏时间复杂度,这是无法接受的,而且这一亿条数据显然不能一次性读入内存供程序使用, 因此, 这一亿次匹配在不经缓存优化的情况下就是一亿次IO开销,以现在磁盘的IO能力和CPU的运算能力, 有可能需要几个月才能得出结果 。如果把这张表转换成平衡树结构(一棵非常茂盛和节点非常多的树),假设这棵树有10层,那么只需要10次IO开销就能查找到所需要的数据, 速度以指数级别提升,用大O标记法就是O(log n),n是记录总树,底数是树的分叉数,结果就是树的层次数。换言之,查找次数是以树的分叉数为底,记录总数的对数,用公式来表示就是

    用程序来表示就是Math.Log(100000000,10),100000000是记录数,10是树的分叉数(真实环境下分叉数远不止10), 结果就是查找次数,这里的结果从亿降到了个位数。因此,利用索引会使数据库查询有惊人的性能提升。

    然而, 事物都是有两面的, 索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

    讲完聚集索引 , 接下来聊一下非聚集索引, 也就是我们平时经常提起和使用的常规索引。

    非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段, 假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成,在数据改变时, DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。 

    每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。

    非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。

    不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径。

    然而, 有一种例外可以不使用聚集索引就能查询出所需要的数据, 这种非主流的方法 称之为「覆盖索引」查询, 也就是平时所说的复合索引或者多字段索引查询。 文章上面的内容已经指出, 当为字段建立索引以后, 字段中的内容会被同步到索引之中, 如果为一个索引指定两个字段, 那么这个两个字段的内容都会被同步至索引之中。因此不需要通过主键ID值的查找数据行的真实所在, 直接取得叶节点中查询字段的值返回即可。 通过这种覆盖索引直接查找的方式, 可以省略不使用覆盖索引查找的后面两个步骤, 大大的提高了查询性能

    MySQL优化

    • 一、SQL语句优化

    (1)使用limit对查询结果的记录进行限定
    (2)避免select *,将需要查找的字段列出来
    (3)使用连接(join)来代替子查询
    (4)拆分大的delete或insert语句

     

    • 二、选择合适的数据类型

    (1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob
    (2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数
    (3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar
    (4)尽可能使用not null定义字段
    (5)尽量少用text,非用不可最好分表

    • 三、选择合适的索引列

    (1)查询频繁的列,在where,group by,order by,on从句中出现的列
    (2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列
    (3)长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好
    (4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高

     

    MySQL部分优化总结


    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 

    2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
    select id from t where num is null
    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
    select id from t where num=0 

    3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 

    4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
    select id from t where num=10 or num=20
    可以这样查询:
    select id from t where num=10
    union all
    select id from t where num=20 

    5.in 和 not in 也要慎用,否则会导致全表扫描,如:
    select id from t where num in(1,2,3)
    对于连续的数值,能用 between 就不要用 in 了:
    select id from t where num between 1 and 3 

    6.下面的查询也将导致全表扫描:
    select id from t where name like '%abc%' 

    7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
    select id from t where num/2=100
    应改为:
    select id from t where num=100*2 

    8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
    select id from t where substring(name,1,3)='abc'--name以abc开头的id
    应改为:
    select id from t where name like 'abc%' 

    9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 

    10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
    否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。 

    11.不要写一些没有意义的查询,如需要生成一个空表结构:
    select col1,col2 into #t from t where 1=0
    这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
    create table #t(...) 

    12.很多时候用 exists 代替 in 是一个好的选择:
    select num from a where num in(select num from b)
    用下面的语句替换:
    select num from a where exists(select 1 from b where num=a.num) 

    13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,
    如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 

    14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,
    因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
    一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 

    15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
    这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 

    16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
    其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。 

    17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 

    18.避免频繁创建和删除临时表,以减少系统表资源的消耗。

    展开全文
  • 数据库中的NULL值比较

    千次阅读 2014-01-08 10:36:58
    今天在'MYSQL技术内幕'一书中发现了相关的知识: “关系数据库中起逻辑表达式作用的并非只有两种,还有一种称为三值逻辑的表达式”,这里的三值逻辑表达式的就是UNKNOW。当在进行真假状态判断而又不能明确知道该...

    在编程语言中,逻辑表达式的值只有两种:TRUE和FALSE,而在数据库中却并非如此。

    今天在'MYSQL技术内幕'一书中发现了相关的知识:

    “关系数据库中起逻辑表达式作用的并非只有两种,还有一种称为三值逻辑的表达式”,这里的三值逻辑表达式指的就是UNKNOW。当在进行真假状态判断而又不能明确知道该状态是TRUE还是FALSE时,那么它就属于UNKNOW状态。那这样理解也是可以的:它既有可能表示TRUE又有可能表示FALSE--连表示什么状态也不知道。所以我们在数据库应用当中涉及到与NULL值进行比较的时候就要留意一点。

    这是“内幕”中的例子:

    (1)mysql> select 0=null;
    +--------+
    | 0=null |
    +--------+
    | NULL   |
    +--------+
    1 row in set


    (2)mysql> select null=null;
    +-----------+
    | null=null |
    +-----------+
    | NULL      |
    +-----------+
    1 row in set


     (3)mysql> select not null = null;
    +-----------------+
    | not null = null |
    +-----------------+
    | NULL            |
    +-----------------+
    1 row in set

    上面例子中的结果都是NULL,这里我们应当将NULL看作是UNKNOWN,即表示未知的。有两种情形认为两个NULL是相等的:

    (1)GROUP BY 子句将所有NULL值分到一组。

     (2)ORDER BY 子句将所有NULL值排列到一组。


    这个是不相等的一种情形:

     在ON过滤条件下的NULL值比较,比较结果为UNKNOWN,会被视为FALSE,即两个NULL值并不相同。


    “内幕”中的另一个地方也提到了NULL与三值逻辑的关系就是EXISTS与IN的区别。“在对三值逻辑的判断上EXISTS总是返回TRUE或FALSE,而对于IN,还有另一种可能就是UNKNOWN。”因而对于包含了NULL值的比较过程中NOT IN 总是返回NOT TRUE  和 NOT UNKNOWN,也就是FALSE和UNKNOW。但对于NOT EXISTS 其结果只有TRUE和FALSE,这是二者很大区别的一个地方。

    在实际的应用中,如果数据中不含有NULL值,那么NOT EXISTS与NOT IN 除了在底层的执行计划有细微差别外二者的查询结果是一致。若数据中含有NULL值则二者的差别就非常明显了:NOT EXISTS依然返回与不含有NULL值相同的数据,而NOT IN会返回空集合,如果想要排除NULL值对NOT IN 的影响,使用先过滤掉NULL值:WHERE<WHERE-CONDITION  IS NOT NULL>。

    展开全文
  • 数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在...

          数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。

        

          知识发现过程由以下三个阶段组成:(1)数据准备,(2)数据挖掘,(3)结果表达和解释。数据挖掘可以与用户或知识库交互。
     
    数据挖掘
          数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术,主要有数据准备、规律寻找和规律表示3个步骤。数据准备是从相关的数据源中选取所需的数据并整合成用于数据挖掘的数据集;规律寻找是用某种方法将数据集所含的规律找出来;规律表示是尽可能以用户可理解的方式(如可视化)将找出的规律表示出来。
    数据挖掘的任务有关联分析、聚类分析、分类分析、异常分析、特异群组分析和演变分析,等等。
    并非所有的信息发现任务都被视为数据挖掘。例如,使用数据库管理系统查找个别的记录,或通过因特网的搜索引擎查找特定的Web页面,则是信息检索(information retrieval)领域的任务。虽然这些任务是重要的,可能涉及使用复杂的算法和数据结构,但是它们主要依赖传统的计算机科学技术和数据的明显特征来创建索引结构,从而有效地组织和检索信息。尽管如此,数据挖掘技术也已用来增强信息检索系统的能力。

     

    转载于:https://my.oschina.net/zhanghuibo/blog/650428

    展开全文
  • · 数据仓库(Data Warehouse) 一个数据仓库就是一个自带数据库的商业应用系统。利用现有数据资源,把数据转换为信息,从中挖掘出知识,提炼成智慧,创造出效益。...信息发掘是指在文档、地图...
  • 最近面试发现了一个规律,那就是招聘岗位级别越高注重面试者基础知识; 比如以下问题,明明开发经常使用东西,换了一种问法就不知道什么了; 1.分别说说 内连接,外连接,交叉连接,笛卡尔积 什么?...
  • 数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在...
  • 用户不需要掌握操作数据库对象的知识和技能。 交付的数据库组件:生产数据库包含用户订制的材料规范和适用的试验标准的数据,以及使用这些数据的查询、窗体和应用程序模块;首次交付的生产数据库包含保存生产数据的...
  • 数据挖掘 Data Mining :是指从海量的数据中通过相关的算法发现隐藏在数据中的规律和知识的过程。 知识发现:数据挖掘是知识发现中的一个步骤。当提到“数据挖掘”时,通常情况下要表述的是知识发现的整个过程。 ...
  • 数据库查询总结

    千次阅读 多人点赞 2019-09-18 15:57:17
    数据库查询是数据库的核心操作。...单表查询指的是仅涉及一个表查询,相对来说比较简单,但是用到各种SQL语法却复杂查询基础。 1.选择表若干列 选择表若干列或全部,其实就是关系代数...
  • 数据库中的知识发现是指在大型数据集中识别有效、新奇、潜在有用、且最终可理解模式的非平凡的过程。人们已经提出了许多种知识发现算法,然而,由于数据随时间变化而导致的所发现知识的更新维护问题却较少研究。笔者...
  • (2)数据挖掘,又称为数据库中知识发现(Knowledge Discovery in Databases)或知识发现,它一个从大量数据中抽取挖掘出未知、有价值模式或规律等知识非平凡过程,它与数据仓库有着密切联系。 (3)广义...
  •  本书针对大多数日常的oracle database 11g数据库管理任务,全面覆盖dba行业知识,并将理论与实践相结合,旨在为初中级dba提供高效运行数据库所需的方方面面的知识,帮助他们从oracle公司发行的大量资料找到自己...
  • 绪论数据挖掘(又称知识发现)近年来人工智能领域研究中的一个热点课题它从大量收集的数据中挖掘出未知的非平凡的有潜在决策价值的模式或知识的复杂过程[1l(21它在现实生活中各种数据量呈指数级不断增长以及以...
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 90 3.5 临时文件 92 3.6 控制文件 94 3.7 重做日志文件 94 3.7.1 在线重做日志 95 3.7.2 归档重做日志 97 3.8 密码文件 99 3.9 ...
  • 数据挖掘这一术语所的范围非常广泛,从即席式查询、基于规则的通知或透视图分析,到政府的监听计划。...提到这种数据挖掘时,常常使用其他术语,例如计算机学习,数据库中的知识发现或者预测分析。
  • 前言 这是一篇基础教程,对标 Laravel 文档中的数据迁移和数据填充,分享...迁移是指已经获得的知识、技能,甚至方法和态度对学习新知识、新技能的影响。这种影响可能是积极的,也可能是消极的,前者叫正迁移或简称迁
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 ...
  • 使用发现本系统错误(Bug),可向我们报告,我们及时提供修改服务,并将更新后文件放入升级库,通过升级程序可免费修正。 免费升级服务:我们在不断努力、持续进步,我们对系统任何改进都放入华创站点升级...
  • 数据挖掘又称数据库中的知识发现。是眼下人工智能和数据库领域研究的热点问题。所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平庸过程 利用数据挖掘进行数据分... 数据...
  • 经验表明,高度集中精神不但能够提高效率,还能发现更多软件缺陷,业绩最棒往往团队做事精力最集中那些成员。 细心:主要执行测试工作时候要细心,认真执行测试,不可以忽略一些细节。某些缺陷如果不...
  • Hibernate相关知识

    2020-05-17 12:12:13
    ORM指的是Object Relation Mapping对象关系映射,它可以让我们以面向对象方式操作数据库,具体点就是操作实体类即操作数据库表,操作类属性即操作数据库字段。 Session 此Session应该与WEB四大域对象...
  • 数据挖掘之七种常用方法

    千次阅读 2014-05-09 17:29:47
    数据挖掘又称数据库中的知识发现,是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程 利用数据挖掘进行数据分... ...
  •  数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先...
  • 数据挖掘是指数据库中,提取隐含在其中人们事先未知、潜在有用信息和知识的过程。目前,医院已积累了大量医疗相关数据。 数据挖掘在医学大数据研究中已取得了较多成果,通过文献检索,总结了三方面应用...
  • 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各...
  • 什么数据挖掘?

    2020-04-24 10:48:59
    数据挖掘,(Data Mining,DM)又称数据库中的知识发现,是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的,先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种...
  • (39) 在关系数据库中,用来表示实体之间联系的是______。(D) A. 树结构 B. 网结构 C. 线性表 D. 二维表 (40) 将E-R图转换到关系模式时,实体与联系都可以表示成______。(B) A. 属性 B. 关系 C. 键 D. 域 (41) 在下列...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 229
精华内容 91
关键字:

数据库中的知识发现是指