精华内容
下载资源
问答
  • 各位高手: 在不能写数据库触发器,数据库没有时间戳字段的情况下,Oracle数据库如何查询指定最近一天或者一个小时的变更记录? 包括新增、修改、删除的数据。
  • SQL Server查询某个时间段内的每一天每一时每一分
    在用SQL Server做历史数据查询时,经常会需要获取某一段时间内每一分或每一时或每一天的连续数据,如果某个时间的数据为空,则查询的结果会不包含该时间的数据,然后有时又需要查询连续时间,为空的时间显示空,此时就需要查询出一个连续时间作为基础表进行表连接。
    SQL Server数据空提供了一个master..spt_values的系统表,记录了一些系统给定的数值,此处可用该表进行查询。
    例如:查询2017-01-01 00:00与2017-01-01 23:59之间的每一分钟,可使用如下代码:
    
    select DATEADD(MI,number,'2017-01-01 00:00') as d from master..spt_values where type='p' and DATEDIFF(MI,DATEADD(MI,number,'2017-01-01 00:00'),'2017-01-01 23:59')>0

    查询结果如下:
    这里写图片描述

    如果要获取每一小时只需要把查询语句中的MI换成HH,查询每一天则换成DD,以此类推,只需要换成时间对应的代码即可。


    扩展:
    上述方法由于master..spt_values表只提供了2048个连续整数(即0-2047),因此该方法最多只能获取到2048条数据,如果查询的范围查过了该数据量则不能全部显示。
    此时可以自己新建一个只有一个字段的表,往里面随便插入n条连续的整数,用来代替master..spt_values表,即可完成上述查询

    展开全文
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    所以这个选项当然没有时间参数,但是可以输入个用来解释的讯息,而这信息将会送到每位使用者。 -F:在重启计算机时强迫fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统...
  • 删除数据前记录 1> select t.*, t.rowid from vt_temp_test; 1 1 2 3.00 4.00 2 5 6 7.00 8.00 3 9 10 11.00 12.00 4 13 14 15.00 16.00   记录原数据完整时间点 2> select to_char...
    
    删除数据前表中记录
    1> select t.*, t.rowid from vt_temp_test;
    1 1 2 3.00 4.00
    2 5 6 7.00 8.00
    3 9 10 11.00 12.00
    4 13 14 15.00 16.00
     
    记录原数据完整时间点
    2> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    1 2009-01-08 09:23:53
     
    删除表中记录
    3> delete from vt_temp_test;
     
    找回原数据完整时间点数据
    4> select * from vt_temp_test as of timestamp to_timestamp('2009-01-08 09:23:53', 'yyyy-mm-dd hh24:mi:ss'); 
    1 1 2 3.00 4.00
    2 5 6 7.00 8.00
    3 9 10 11.00 12.00
    4 13 14 15.00 16.00
     
    插入丢失数据到原表
    5> insert into vt_temp_test select * from vt_temp_test as of timestamp to_timestamp('2009-01-08 09:23:53', 'yyyy-mm-dd hh24:mi:ss');
     
    验证数据恢复情况
    6> select * from vt_temp_test
    1 1 2 3.00 4.00
    2 5 6 7.00 8.00
    3 9 10 11.00 12.00
    4 13 14 15.00 16.00
     
    ---- 此时表明数据已完全恢复到原数据完整时间点的数据 ----

    #### 注:当执行 truncate table vt_temp_test 时,就无法恢复数据,查找当时数据会报错:ORA-01466 unable to read table - table definition has changed。drop table vt_temp_test则更不可恢复 ####
    展开全文
  • mysql面试题

    千次阅读 2019-09-23 12:28:36
    最全MySQL面试题和答案 Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。...数据类型有哪些     ...

    最全MySQL面试题和答案

    Mysql 的存储引擎,myisam和innodb的区别。

    答:

    1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。

    2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。

    数据表类型有哪些

           答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。
           MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
           InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

    MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

    a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
    b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
    c. mysql库主从读写分离。
    d. 找规律分表,减少单表中的数据量提高查询速度。
    e。添加缓存机制,比如memcached,apc等。
    f. 不经常改动的页面,生成静态页面。
    g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

    对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

    答:a. 确认服务器是否能支撑当前访问量。
    b. 优化数据库访问。
    c. 禁止外部访问链接(盗链), 比如图片盗链。
    d. 控制文件下载。
    e. 使用不同主机分流。
    f. 使用浏览统计软件,了解访问量,有针对性的进行优化。

    如何进行SQL优化?

    答:
    (1)选择正确的存储引擎
    以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
    MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

    InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

     

    (2)优化字段的数据类型

    记住一个原则,越小的列会越快。如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。

     

    (3)为搜索字段添加索引

    索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么最好是为其建立索引,除非你要搜索的字段是大的文本字段,那应该建立全文索引。

     

    (4)避免使用Select *从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。即使你要查询数据表的所有字段,也尽量不要用*通配符,善用内置提供的字段排除定义也许能给带来更多的便利。

     

    (5)使用 ENUM 而不是 VARCHAR

    ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。例如,性别、民族、部门和状态之类的这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。

     

    (6)尽可能的使用 NOT NULL

    除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。 NULL其实需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。

     

    (7)固定长度的表会更快

    如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。 例如,表中没有如下类型的字段: VARCHAR,TEXT,BLOB。只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。

     

    固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。

     

    并且,固定长度的表也更容易被缓存和重建。不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。

     

    如何设计一个高并发的系统

    ① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化

    ② 使用缓存,尽量减少数据库 IO

    ③ 分布式数据库、分布式缓存

    ④ 服务器的负载均衡

    锁的优化策略

    ① 读写分离

    ② 分段加锁

    ③ 减少锁持有的时间

    ④ 多个线程尽量以相同的顺序去获取资源

    等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这部分跟面试官谈了很久

    索引的底层实现原理和优化

    B+树,经过优化的B+树

    主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。

     什么情况下设置了索引但无法使用 

    ① 以“%”开头的LIKE语句,模糊匹配

    ② OR语句前后没有同时使用索引

    ③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

    SQL语句的优化 

    order by要怎么处理

    alter尽量将多次合并为一次

    insert和delete也需要合并

    等等

    实践中如何优化MySQL

    我当时是按以下四条依次回答的,他们四条从效果上第一条影响最大,后面越来越小。

    ① SQL语句及索引的优化

    ② 数据库表结构的优化

    ③ 系统配置的优化

    ④ 硬件的优化

    sql注入的主要特点

    变种极多,攻击简单,危害极大

    sql注入的主要危害

    未经授权操作数据库的数据

    恶意纂改网页

    私自添加系统账号或者是数据库使用者账号

    网页挂木马

    优化数据库的方法

    1.  选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM
    2.  使用连接(JOIN)来代替子查询
    3.  适用联合(UNION)来代替手动创建的临时表
    4.  事务处理
    5.  锁定表、优化事务处理
    6.  适用外键,优化锁定表
    7.  建立索引
    8.  优化查询语句

     

    简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

    普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。

     

    普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。

     

    主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。

    索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。

     

    索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

    数据库中的事务是什么?

    事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。

    了解XSS攻击吗?如何防止?

    XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
    使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

    SQL注入漏洞产生的原因?如何防止?

    SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

    防止SQL注入的方式:
    开启配置文件中的magic_quotes_gpc 和 magic_quotes_runtime设置

    执行sql语句时使用addslashes进行sql语句转换

    Sql语句书写尽量不要省略双引号和单引号。

    过滤掉sql语句中的一些关键词:update、insert、delete、select、 * 。

    提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

    Php配置文件中设置register_globals为off,关闭全局变量注册

    控制错误信息,不要在浏览器上输出错误信息,将错误信息写到日志文件中。

     

     

    为表中得字段选择合适得数据类型(物理设计)

     字段类型优先级: 整形>date,time>enum,char>varchar>blob,text
     优先考虑数字类型,其次是日期或者二进制类型,最后是字符串类型,同级别得数据类型,应该优先选择占用空间小的数据类型

    存储时期

    Datatime:以 YYYY-MM-DD HH:MM:SS 格式存储时期时间,精确到秒,占用8个字节得存储空间,datatime类型与时区无关
    Timestamp:以时间戳格式存储,占用4个字节,范围小1970-1-1到2038-1-19,显示依赖于所指定得时区,默认在第一个列行的数据修改时可以自动得修改timestamp列得值
    Date:(生日)占用得字节数比使用字符串.datatime.int储存要少,使用date只需要3个字节,存储日期月份,还可以利用日期时间函数进行日期间得计算
    Time:存储时间部分得数据
    注意:不要使用字符串类型来存储日期时间数据(通常比字符串占用得储存空间小,在进行查找过滤可以利用日期得函数)
    使用int存储日期时间不如使用timestamp类型

     

    对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:

    a)、索引的目的是什么?
    快速访问数据表中的特定信息,提高检索速度

    创建唯一性索引,保证数据库表中每一行数据的唯一性。

    加速表和表之间的连接

    使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

    b)、索引对数据库系统的负面影响是什么?
    负面影响:
    创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

    c)、为数据表建立索引的原则有哪些?
    在最频繁使用的、用以缩小查询范围的字段上建立索引。

    在频繁使用的、需要排序的字段上建立索引

    d)、 什么情况下不宜建立索引?
    对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。

    对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等

     简述在MySQL数据库中MyISAM和InnoDB的区别

    区别于其他数据库的最重要的特点就是其插件式的表存储引擎。切记:存储引擎是基于表的,而不是数据库。

    InnoDB与MyISAM的区别:

    InnoDB存储引擎: 主要面向OLTP(Online Transaction Processing,在线事务处理)方面的应用,是第一个完整支持ACID事务的存储引擎(BDB第一个支持事务的存储引擎,已经停止开发)。

    特点:

    · 行锁设计、支持外键,支持事务,支持并发,锁粒度是支持mvcc得行级锁;

     MyISAM存储引擎: 是MySQL官方提供的存储引擎,主要面向OLAP(Online Analytical Processing,在线分析处理)方面的应用。
    特点:

    不支持事务,锁粒度是支持并发插入得表级锁,支持表所和全文索引。操作速度快,不能读写操作太频繁;

     解释MySQL外连接、内连接与自连接的区别

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。

    内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
    外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中
    的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。

    左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。

    写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)

    MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、
    Archive、CSV、Blackhole、MaxDB 等等十几个引擎

    Myql中的事务回滚机制概述

    事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

    要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

     

    SQL语言包括哪几部分?每部分都有哪些操作关键字?

    答:SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。

    数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等

    数据操纵:Select ,insert,update,delete,

    数据控制:grant,revoke

    数据查询:select

     

    完整性约束包括哪些?


    答:数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。

    分为以下四类:

    1) 实体完整性:规定表的每一行在表中是惟一的实体。

    2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

    3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

    4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

    与表有关的约束:包括列约束(NOT NULL(非空约束))和表约束(PRIMARY KEY、foreign key、check、UNIQUE) 。

     

    什么是事务?及其特性?


    答:事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

    事务特性:

    (1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

    (2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

    (3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,

    (4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

    或者这样理解:

    事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

     

    什么是锁?


      答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

    加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

    基本锁类型:锁包括行级锁和表级锁

     

    什么叫视图?游标是什么?


    答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

      游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

     

    什么是存储过程?用什么来调用?


    答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

     

    索引的作用?和它的优点缺点是什么?


    答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

     

    如何通俗地理解三个范式?  


    答:第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

    第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;  

    第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。

    范式化设计优缺点:

    优点:

    可以尽量得减少数据冗余,使得更新快,体积小

    缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化

    反范式化:

    优点:可以减少表得关联,可以更好得进行索引优化

    缺点:数据冗余以及数据异常,数据得修改需要更多的成本

     

    什么是基本表?什么是视图?


    答:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。  视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表  

     

    试述视图的优点?


    答:(1) 视图能够简化用户的操作  (2) 视图使用户能以多种角度看待同一数据; (3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供安全保护。

     

     NULL是什么意思


    答:NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。

    使用IS  NULL来进行NULL判断

     

    主键、外键和索引的区别?


    主键、外键和索引的区别

    定义:

     主键–唯一标识一条记录,不能有重复的,不允许为空

     外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值

     索引–该字段没有重复值,但可以有一个空值

    作用:

     主键–用来保证数据完整性

     外键–用来和其他表建立联系用的

     索引–是提高查询排序的速度

    个数:

     主键–主键只能有一个

     外键–一个表可以有多个外键

     索引–一个表可以有多个唯一索引

     

    你可以用什么来确保表格里的字段只接受特定范围里的值?


    答:Check限制,它在数据库表格里被定义,用来限制输入该列的值。

    触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。

     

    说说对SQL语句优化有哪些方法?(选择几条)


    (1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。

    (2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

    (3) 避免在索引列上使用计算

    (4)避免在索引列上使用IS NULL和IS NOT NULL

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

    (6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

    (7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

     

    SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?


    答:子查询:嵌套在其他查询中的查询称之。

    子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。

    所有的子查询可以分为两类,即相关子查询和非相关子查询

    (1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

    (2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

    故非相关子查询比相关子查询效率高

     

    char和varchar的区别?


    答:是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:  

    char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).  

    varchar得适用场景:

    字符串列得最大长度比平均长度大很多 2.字符串很少被更新,容易产生存储碎片 3.使用多字节字符集存储字符串

    Char得场景:

        存储具有近似得长度(md5值,身份证,手机号),长度比较短小得字符串(因为varchar需要额外空间记录字符串长度),更适合经常更新得字符串,更新时不会出现页分裂得情况,避免出现存储碎片,获得更好的io性能。

    展开全文
  • 数据库面试

    千次阅读 多人点赞 2019-02-13 09:03:42
    、数据库问答题 1. SQL语言包括哪些类型? 数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等 数据操纵DML:Select ,insert,update,delete, 数据控制DCL:grant,revoke 2. 内联接,外联接...

    数据库常见问题

    1. SQL语言包括哪些类型?
    数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等
    数据操纵DML:Select ,insert,update,delete,
    数据控制DCL:grant,revoke

    2. 内联接,外联接区别?
    内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
    在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接(mysql不支持)三种。

    3. 什么是存储过程?用什么来调用?
    答:存储过程是一组为了完成特定功能的SQL 语句集,经编译创建并保存在数据库中,一次编译后永久有效。通过Call语句指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
    由于存储过程是经过预编译处理的,因此如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。存储过程不允许执行return语句,但是可以通过out参数返回多个值,存储过程一般是作为一个独立的部分来执行,存储过程是一个预编译的SQL语句。

    4.触发器的作用?
    答:触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。
    它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。触发器无法由用户直接调用,而是由于对表的【增/删/改】操作被动引发的。

    5. 索引的作用?和它的优点缺点是什么?
    答:索引就一种特殊的查询表,可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。
    缺点:它减慢了数据录入和修改的速度,同时索引也会占用一定的存储资源,因此我们在建索引的时候需要斟酌。

    6. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
    答:我是这样做的,尽可能使用约束,如主键,外键,非空字段等来约束(Check约束在mysql中可以使用但是对数据验证没有任何作用),这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。 最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

    7. 什么是事务?什么是锁?事务有哪些类型?

    1. 事务:就是被绑定在一起作为一个逻辑工作单元的SQL语句分组。如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
    2. 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
    • 扁平化事务:在扁平事务中,所有的操作都在同一层次,这也是平时使用最多的事务,主要限制是不能提交或回滚事务的某一部分,要么都成功要么都回滚。
      带保存点的扁平事务:解决了扁平事务的弊端,它允许事务在执行过程中回滚到较早的状态而不是全部回滚,通过在事务中插入保存点,当操作失败后可以选择回滚到最近的保存点处。
      链事务:可看做第二种事务的变种,它在事务提交时,会将必要的上下文隐式传递给下一个事务,当事务失败时,可以回滚到最近的事务,不过链事务只能回滚到最近的保存点,而带保存点的扁平化事务是可以回滚到任意一个保存点。
      嵌套事务:由顶层事务和子事务构成,类似于树的结构,一般顶层事务负责逻辑处理,子事务负责具体的工作,子事务可以提交,但真正的提交要等到顶层事务的提交,如果顶层事务回滚,那么所有的子事务都将回滚。
      分布式事务:在分布式环境中的扁平化事务。
      常用的分布式事务解决方案:
      (1) XA规范,是保证强一致性的刚性事务,实现方式有两段式提交(2PC)和三段式提交(3PC),2PC需要一个事务协调者来保证事务的参与者都完成了第一阶段的准备工作,如果协调者收到了所有的参与者都准备好的消息,就会通知所有的事务执行第二阶段的提交,一般场景下两段式提交已经能很好的解决分布式事务了。然而两阶段在即使只有一个进程发生故障时,也会导致整个系统存在较长时间的阻塞。三段式提交通过增加pre-commit阶段来减少两段式提交提到的系统阻塞时间,三段式提交很少在实际中使用,简单了解就行了。
      (2) TCC:是满足最终一致性的柔性事务方案。TCC采用补偿机制,核心的思想是对每一个操作都要注册对应的确认和补偿操作,分为三个阶段,try阶段主要对业务系统进行检测及资源预留,confirm阶段对业务系统进行确认提交,cancel阶段是对业务执行错误,执行回滚释放预留的资源。
      (3) 消息一致性方案:基本思路是将本地操作和发送消息封装在一个事务中,保证本地的操作和消息发送要么都成功,要么都失败。下游应用订阅消息,收到消息后执行对应的操作。
      (4)GTS:阿里云的全局事务服务,对应的开源版本是Fescar,Fescar基于两段式提交进行改良,剥离了分布式事务方案对数据库在协议支持上的要求,使用Fescar的前提是分支事务中涉及的资源必须支持ACID事务的关系型数据库,分支的提交和回滚都依赖于本地事务来保障。了解即可。

    8. 事务的基本要素?
    原子性Atomicity,指事务由原子的操作序列组成,所有操作要么全部成功,要么全部失败回滚。
    一致性Consistency,指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。比如在做多表操作时,多个表要么都是事务后新的值,要么都是事务前的旧值。
    隔离性Isolation,指多个用户并发访问数据库时,数据库为每个用户执行的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。事务的隔离级别在后文中介绍。
    持久性Durability,指一个事务一旦提交并执行成功,那么对数据库中数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

    9. 事务的并发问题?事务的隔离级别有哪些?

            事务的并发问题

      1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

      2、不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致,事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

      3、幻读:在一个事务里面的操作中发现了未被操作的数据,系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条新的学生成绩具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

      小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

    事务隔离级别脏读不可重复读幻读
    读未提交(read-uncommitted)
    读已提交(read-committed)
    可重复读(repeatable-read)
    串行化(serializable)

    10. 什么叫视图?游标是什么?
    答:视图是对一些原表选择部分列合并成的一个虚拟表格,具有和物理表相同的功能。可以对视图进行插入、更新、删除操作。对视图的修改会同步到具体数据表中。注意以下几种情况不能对视图进行插入、更新、删除的操作:

    1. 视图列中含有统计函数的情况
    2. 视图使用了GROUP BY /HAVING,DISTINCT,UNION语句的情况
    3. 视图定义时使用了子查询的情况
    4. 对视图的修改涉及到了多个基础表的数据

    游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

    11. 什么是主键?什么是外键?
    主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

    12.一个表有过多索引需要有什么样的性能考虑?
    时间和空间。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

    13.你可以用什么来确保表格里的字段只接受特定范围里的值?
    这个问题可以用多种方式来回答,但是只有一个答案是"好"答案。您希望听到的回答是Check限制(MYSQL有,但是没有强制约束,使用了也没用),它在数据库表格里被定义,用来限制输入该列的值。
    触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

    15. 使用索引查询一定能提高查询的性能吗?为什么
    通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
    索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
        1.基于一个范围的检索,一般查询返回结果集小于表中记录数的30%宜采用;
        2.基于非唯一性索引的检索
    索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

    16. 列举几种表连接方式,并写出SQL语句? 什么是相关子查询?关联查询和相关子查询的区别?
    内连接、外连接(左、右、全)、自连接(特殊的内连接)、交叉连接
    Or hash join/merge join/nest loop(cluster join)/index join 
    1)内连接:只连接匹配的行
    select A.c1,B.c2 from A join B on A.c3 = B.c3;
    2)左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行,最终结果数大于等于左表行数
    select A.c1,B.c2 from A left join B on A.c3 = B.c3;
    3)右外连接:包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行,最终结果数大于等于右表结果数
    select A.c1,B.c2 from A right join B on A.c3 = B.c3;
    4)全外连接:包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行
    select A.c1,B.c2 from A full join B on A.c3 = B.c3;
    5)交叉连接又称隐式的内联查询:生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配
    select A.c1,B.c2 from A,B;
    6)相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会用到外部查询的值。
        SELECT * FROM A WHERE A.id IN(SELECT B.aId FROM B  WHERE B.name=A.name)
     7)表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询

    交叉连接与内连接,查询的结果是一样的,但是效率不同,内连接查询的效率更高。

    17 如何优化数据库,如何提高数据库的性能?
    主要从:表结构、索引、sql语句考虑
    (1)表结构如:合适的字段类型、适当增加中间表、适当拆分表、增加冗余字段避免关联查询、尽量不要使用null
    (2)索引:不要盲目使用索引、要在数据差别大的列上使用索引、要在查询常用到的列上增加索引、根据具体查询情况选择合适的索引数据结构
    (3)查询时不要select *,注意查询是否使用了索引、减少关联查询、减少in和not in这些查询、针对不同的情况选择in或者exists查询
    (4)适当的使用存储过程

    18. 谈谈数据库设计的三范式
    第一范式的定义:所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,则这个表属于第一范式(常记成1NF)。简而言之:"每一字段只存储一个值"。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话 和一个家里电话号码)
    第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF )。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。将1NF转换成2NF的方法是添加主键。例如:学号,姓名,课程名,成绩
    第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成 3NF)。简而言之,第三范式就是属性不依赖于其它非主属性。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

    19. 设计数据库应注意那些问题
    首先应尽量满足三范式的要求,在一定程度上打破三范式的要求以提高数据库的性能。例如,我们创建某些表的时候,不仅会插入外键,还会插入相关的属性,这违反了第三范式,但这样做的好处,就是我们在业务查询的时候会减少很多关联查询,从而提高查询效率。

    20. 表与表之间的关联关系
    分为3种:一对一、一对多、多对多。

    21. 主键和外键的区别
    主键在本表中是唯一的、不可为空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

    22. 游标的作用?如何知道游标已经到了最后?
    游标用于定位结果集的行,在mysql中用DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

    23. 事前触发和事后触发有何区别?语句级触发和行级触发有何区别?
    事前触发器运行于触发事件发生之前,如表的插入、更新、删除之前,而事后触发器运行于触发事件发生之后,如表的插入、更新、删除之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

    24. 数据库设计的必要性及设计步骤
    好的数据库结构有利于:节省数据的存储空间,能够保证数据的完整性,方便进行数据库应用系统的开发
    设计不好的数据库结构将导致:数据冗余、存储空间浪费和内存空间浪费
    不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:收集信息--标识对象--设计数据模型--标识每个对象--存储的信息类型–标识对象之间的关系

    25. 什么是数据模型?什么是规范化?
    数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。
    从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

    26. 说出一些数据库优化方面的经验?
    用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存
    “inert into user values(1,1,1)”-?二进制
    “inert into user values(2,2,2)”-?二进制
    “inert into user values(?,?,?)”-?二进制

    有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)
    (对于hibernate来说,就应该有一个变化:empleyee->Deptment对象,现在设计时就成了employee?deptid)

    看mysql帮助文档子查询章节的最后部分,例如,根据扫描的原理,下面的子查询语句要比第二条关联查询的效率高:
    1)select e.name,e.salary where e.managerid=(select id from employee where name='zxx');
    2)select e.name,e.salary,m.name,m.salary from employees e,employees m where
    e.managerid = m.id and m.name='zxx';

    表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
    将姓名和密码单独从用户表中独立出来。这可以是非常好的一对一的案例哟!
    sql语句全部大写,特别是列名和表名都大写。特别是sql命令的缓存功能,更加需要统一大小写,sql语句?发给oracle服务器?语法检查和编译成为内部指令?缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用?和PreparedStatment
    还有索引对查询性能的改进也是值得关注的。

    27. union和union all有什么不同?
    Union和Union All的区别之一在于对重复结果的处理。

    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
    而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
    从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL

    28. 几种索引类型?

    MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引

    • 索引加快数据库的检索速度
    • 索引降低了插入、删除、修改等维护任务的速度
    • 唯一索引可以确保每一行数据的唯一性
    • 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
    • 索引需要占物理和数据空间 

    29. 数据库的乐观锁和悲观锁是什么?数据库表锁和行锁又是什么?

    数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
    乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

    • 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
    • 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

    在MySQL中 引擎为InnoDB的表支持表锁和行锁,而引擎为MyISAM的表只支持表锁

    • 表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
    • 行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

    30. char和vachar区别?

    char是固定长度,处理速度比vachar快,费内存空间,当存储的值没有达到指定的范围时,会用空格替代。
    vachar是不固定长度,节约存储空间,存储的是真实的值。
    如:存储字符串'abc'
    使用char(10),表示存储的字符将占10个字节(包括7个空字符)
    使用varchar(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

    31. 什么是E-R图?

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    ER图中有如下四个成分:

    矩形框:表示实体,在框中记入实体名。

    菱形框:表示联系,在框中记入联系名。

    椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。

    连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。

    E-R图的3个基本要素是实体、属性和联系

    32.MySQL两种引擎InnoDB和MyISAM的区别?

    1. MyISAM不支持事务,而InnoDB支持事务。
    2. MyISAM锁的是表锁(表锁又分读锁和写锁),而InnoDB锁为行级锁。
    3. MyISAM支持全文类型索引,而InnoDB不支持。
    4. MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
    5. MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
    6. InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

    33. 如何解决MYSQL数据库中文乱码问题?

    建表和建库的时候指定字符集。

    SQL练习

    1.为管理业务培训信息,建立3个表:
    S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
    C(C#,CN)C#,CN分别代表课程编号,课程名称
    SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
    1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
    答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)
    2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?
    答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
    3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?
    答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
    4)查询选修了课程的学员人数
    答:select 学员人数=count(distinct s#) from sc
    5) 查询选修课程超过5门的学员学号和所属单位?
    答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)

    2. 查询表A(id,name)中存在id重复三次以上的记录,查询语句请写出来?
    SELECT * FROM A GROUP BY id HAVING COUNT(id)>3

    3. 适用于MySql的分页查询语句?
    --limit函数,从数据库表中的m条记录开始,检索n条记录。
    select * from 表名 limit m,n;

    4. 适用于Oracle的分页查询语句?使用rownum关键字,oracle特有的分析函数和树查询非常有用可以看看。
    --从m条开始,检索n条记录。
    select * from (select rownum r,t1.* from 表名称 t1 where rownum < m + n) b where b.r >= m;

    5. 所有部门之间的比赛组合
    一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

    答:SELECT t1.name AS whiteName,t2.name AS blackName FROM department t1 INNER JOIN department t2 ON t1.name>t2.name

    6.简单说一说drop、delete与truncate的区别

    SQL中的drop、delete、truncate都表示删除,但是三者有一些差别

    • delete和truncate只删除表的数据不删除表的结构
    • 速度,一般来说: drop> truncate >delete 
    • delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
      如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 

     7. 每个月份的发生额都比101科目多的科目
    请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。
    请注意:TestDB中有很多科目,都有1-12月份的发生额。
    表名:TestDB
    字段:AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。
    答案:
    SELECT DISTINCT t1.AccID FROM TestDB t1 INNER JOIN TestDB t2 ON t2.Occmonth=t1.OccMonth AND t1.DebitOccur>t2.DebitOccur AND t2.AccID=101

    8. 统计每年每月的信息
    year month amount
    1991 1 1.1
    1991 2 1.2
    1991 3 1.3
    1991 4 1.4
    1992 1 2.1
    1992 2 2.2
    1992 3 2.3
    1992 4 2.4
    查成这样一个结果
    year m1 m2 m3 m4
    1991 1.1 1.2 1.3 1.4
    1992 2.1 2.2 2.3 2.4
    答案一:
    select sales.year ,
    (select t.amount from sales t where t.month='1' and t.year= sales.year) '1',
    (select t.amount from sales t where t.month='1' and t.year= sales.year) '2',
    (select t.amount from sales t where t.month='1' and t.year= sales.year) '3',
    (select t.amount from sales t where t.month='1' and t.year= sales.year) as '4' 
    from sales group by year;
    答案二:

    SELECT sales.`year`,GROUP_CONCAT(CONCAT(sales.`year`,':',sales.amount))
     FROM sales GROUP BY sales.`year`

    9. 显示文章标题,发帖人、最后回复时间
    表:id,title,postuser,postdate,parentid
    准备sql语句:
    drop table if exists articles;
    create table articles(id int auto_increment primary key,title varchar(50), postuser varchar(10), postdate datetime,parentid int references articles(id));
    insert into articles values
    (null,'第一条','张三','1998-10-10 12:32:32',null),
    (null,'第二条','张三','1998-10-10 12:34:32',null),
    (null,'第一条回复1','李四','1998-10-10 12:35:32',1),
    (null,'第二条回复1','李四','1998-10-10 12:36:32',2),
    (null,'第一条回复2','王五','1998-10-10 12:37:32',1),
    (null,'第一条回复3','李四','1998-10-10 12:38:32',1),
    (null,'第二条回复2','李四','1998-10-10 12:39:32',2),
    (null,'第一条回复4','王五','1998-10-10 12:39:40',1);

    答案:
    select a.title,a.postuser,
    (select max(postdate) from articles where parentid=a.id) reply 
    from articles a where a.parentid is null;

    10. 查出比经理薪水还高的员工信息:
    Drop table if not exists employees;
    create table employees(id int primary key auto_increment,name varchar(50)
    ,salary int,managerid int references employees(id));
    insert into employees values (null,' lhm',10000,null), (null,' zxx',15000,1
    ),(null,'flx',9000,1),(null,'tg',10000,2),(null,'wzg',10000,3);

    Wzg大于flx,lhm大于zxx

    解题思路:
    根据sql语句的查询特点,是逐行进行运算,不可能两行同时参与运算。
    涉及了员工薪水和经理薪水,所有,一行记录要同时包含两个薪水,所有想到要把这个表自关联组合一下。
    首先要组合出一个包含有各个员工及该员工的经理信息的长记录,譬如,左半部分是员工,右半部分是经理。而迪卡尔积会组合出很多垃圾信息,先去除这些垃圾信息。

    select e.* from employees e,employees m where e.managerid=m.id and e.sala
    ry>m.salary;

    11. 求出小于45岁的各个老师所带的大于12岁的学生人数
    数据库中有3个表 teacher 表,student表,tea_stu关系表。 
    teacher 表 teaID name age 
    student 表 stuID name age 
    teacher_student表 teaID stuID 
    要求用一条sql查询出这样的结果 
    1)显示的字段要有老师name, age 每个老师所带的学生人数 
    SELECT t1.teaID,COUNT(*) FROM teacher_student t1 LEFT JOIN teacher t2 ON t1.teaID=t2.teaID GROUP BY t1.teaID
    2)只列出老师age为40以下,学生age为12以上的记录
    SELECT t1.teaID,t2.name AS teaName,t1.stuID,t3.name AS stuName FROM teacher_student t1 INNER JOIN teacher t2 ON t1.teaID=t2.teaID AND t2.age<40 INNER JOIN student t3 ON t1.stuID=t3.stuID AND t3.age>12


    12. 求出发帖最多的人:
    select authorid,count(*) total from articles group by authorid ORDER BY total DESC LIMIT 1

    13. 一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?
    alter table drop column score;
    alter table add colunm score int;
    可能会很快,但是需要试验,试验不能拿真实的环境来操刀,并且要注意,
    这样的操作时无法回滚的,在我的印象中,只有inert update delete等DML语句才能回滚,
    对于create table,drop table ,alter table等DDL语句是不能回滚。

    解决方案一,update user set score=0; 
    解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就
    alter table user drop column score;
    alter table user add column score int。

    14. xxx公司的sql面试
    Table EMPLOYEES Structure:
    EMPLOYEE_ID NUMBER Primary Key,
    FIRST_NAME VARCHAR2(25),
    LAST_NAME VARCHAR2(25),
    Salary number(8,2),
    HiredDate DATE,
    Departmentid number(2)
    Table Departments Structure:
    Departmentid number(2) Primary Key,
    DepartmentName VARCHAR2(25).

    1)基于上述EMPLOYEES表写出查询:写出雇用日期在今年的,或者工资在[1000,2000]之间的,或者员工姓名(last_name)以’Obama’打头的所有员工,列出这些员工的全部个人信息。
    select * from employees 
    where Year(hiredDate) = Year(date()) 
    or (salary between 1000 and 200)
    or left(last_name,3)='abc';

    2) 基于上述EMPLOYEES表写出查询:查出部门平均工资大于1800元的部门的所有员工,列出这些员工的全部个人信息。
    mysql> select id,name,salary,deptid did from employee1 where (select avg(salary)
    from employee1 where deptid = did) > 1800;

    3) 基于上述EMPLOYEES表写出查询:查出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。
    select employee1.*,(employee1.salary-t.avgSalary)*100/employee1.salary 
    from employee1,
    (select deptid,avg(salary) avgSalary from employee1 group by deptid) as t
    where employee1.deptid = t.deptid and employee1.salary>t.avgSalary;

    二、数据库选择题:
    1. 下面叙述正确的是___C___。 
    A、算法的执行效率与数据的存储结构无关 
    B、算法的空间复杂度是指算法程序中指令(或语句)的条数 
    C、算法的有穷性是指算法必须能在执行有限个步骤之后终止D、以上三种描述都不对

    2. 以下数据结构中不属于线性数据结构的是__C____。
    A、队列 B、线性表 C、二叉树 D、栈

    3. 在一棵二叉树上第5层的结点数最多是__B____。
    A、8 B、16 C、32 D、15

    4. 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是__B__。 
    A、可行性分析 B、需求分析 C、详细设计 D、程序编码

    5. 在软件开发中,下面任务不属于设计阶段的是___D___。 
    A、数据结构设计 B、给出系统模块结构 C、定义模块算法 D、定义需求并建立系统模型

    6. 数据库系统的核心是___B___。 
    A、数据模型 B、数据库管理系统 C、软件工具 D、数据库

    7. 下列叙述中正确的是___C___。 
    A、数据库是一个独立的系统,不需要操作系统的支持 
    B、数据库设计是指设计数据库管理系统 
    C、数据库技术的根本目标是要解决数据共享的问题 
    D、数据库系统中,数据的物理结构必须与逻辑结构一致

    8. SQL语句中修改表结构的命令是__C____。 
    A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE

    9. 如果要创建一个数据组分组报表,第一个分组表达式是"部门",第二个分组表达式是"性别",第三个分组表达式是"基本工资",当前索引的索引表达式应当是___B___。 
    A、部门+性别+基本工资 B、部门+性别+STR(基本工资) 
    C、STR(基本工资)+性别+部门 D、性别+部门+STR(基本工资) 

    10. 数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是___A___。 
    A、DBS包括DB和DBMS B、DBMS包括DB和DBS 
    C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS

    11. 要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表__A___。 
    A、是同一个数据库中的两个表 B、不同数据库中的两个表 
    C、两个自由表 D、一个是数据库表另一个是自由表

    12. 在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过___B___。 
    A、候选键 B、主键 C、外键 D、超键

    13. 只有满足联接条件的记录才包含在查询结果中,这种联接为___C___。 
    A、左联接 B、右联接 C、内部联接 D、完全联接

    14. 索引字段值不唯一,应该选择的索引类型为___B___。 
    A、主索引 B、普通索引 C、候选索引 D、唯一索引

    15. 从数据库中删除表的命令是__A____。 
    A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE

    16. DELETE FROM S WHERE 年龄>60语句的功能是__B____。 
    A、从S表中彻底删除年龄大于60岁的记录 B、S表中年龄大于60岁的记录被加上删除标记 
    C、删除S表 D、删除S表的年龄列

    17. SELECT-SQL语句是__B____。 
    A、选择工作区语句 B、数据查询语句 C、选择标准语句 D、数据修改语句

    18. SQL语言是___C___语言。
    A、层次数据库 B、网络数据库 C、关系数据库 D、非数据库

    19. 在SQL中,删除视图用___C___。 
    A、DROP SCHEMA命令 B、CREATE TABLE命令 C、DROP VIEW命令 D、DROP INDEX命令

    20. 在命令窗口执行SQL命令时,若命令要占用多行,续行符是__D____。 
    A、冒号(:) B、分号(;) C、逗号(,) D、连字符(-)

    21. 设有图书管理数据库: 
    图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2)) 
    读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20)) 
    借阅(借书证号C(4),总编号C(6),借书日期D(8)) 
    对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。 
    SQL语句正确的是___A___。 
    SELECT 姓名,书名 FROM 借阅,图书,读者 WHERE; 
    借阅.借书证号="0001" AND; 
    ______ 
    ______ 
    A、图书.总编号=借阅.总编号 AND; 
    读者.借书证号=借阅.借书证号 
    B、图书.分类号=借阅.分类号 AND; 
    读者.借书证号=借阅.借书证号 
    C、读者.总编号=借阅.总编号 AND; 
    读者.借书证号=借阅.借书证号 
    D、图书.总编号=借阅.总编号 AND; 
    读者.书名=借阅.书名

    22. 设有图书管理数据库: 
    图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2)) 
    读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20)) 
    借阅(借书证号C(4),总编号C(6),借书日期D(8)) 
    对于图书管理数据库,分别求出各个单位当前借阅图书的读者人次。下面的SQL语句正确的是___A___。 
    SELECT 单位,______ FROM 借阅,读者 WHERE; 
    借阅.借书证号=读者.借书证号 ______ 
    A、COUNT(借阅.借书证号) GROUP BY 单位 B、SUM(借阅.借书证号) GROUP BY 单位 
    C、COUNT(借阅.借书证号) ORDER BY 单位 D、COUNT(借阅.借书证号) HAVING 单位

    23. 设有图书管理数据库: 
    图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2)) 
    读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20)) 
    借阅(借书证号C(4),总编号C(6),借书日期D(8)) 
    对于图书管理数据库,检索借阅了《现代网络技术基础》一书的借书证号。下面SQL语句正确的是___B___。 
    SELECT 借书证号 FROM 借阅 WHERE 总编号=; 
    ______ 
    A、(SELECT 借书证号 FROM 图书 WHERE 书名="现代网络技术基础") 
    B、(SELECT 总编号 FROM 图书 WHERE 书名="现代网络技术基础") 
    C、(SELECT 借书证号 FROM 借阅 WHERE 书名="现代网络技术基础") 
    D、(SELECT 总编号 FROM 借阅 WHERE 书名="现代网络技术基础")


    三、Oracle面试题
    1. 解释冷备份和热备份的不同点以及各自的优点 
    解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
    2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
    解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
    3. 如何转换init.ora到spfile?
    解答:使用create spfile from pfile 命令.
    4. 解释data block , extent 和 segment的区别(这里建议用英文术语)
    解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象
    拥有的所有extents被称为该对象的segment.
    5. 给出两个检查表结构的方法
    解答:
    1)DESCRIBE命令
    2)DBMS_METADATA.GET_DDL 包
    6. 怎样查看数据库引擎的报错
    解答:alert log.

    7. 比较truncate和delete 命令
    解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

    8. 使用索引的理由
    解答:快速访问表中的data block

    9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据
    解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的信息

    10. FACT Table上需要建立何种索引?
    解答:位图索引 (bitmap index)

    11. 给出两种相关约束?
    解答:主键和外键

    12. 如何在不影响子表的前提下,重建一个母表
    解答:子表的外键强制实效,重建母表,激活外键

    13. 解释归档和非归档模式之间的不同和它们各自的优缺点
    解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高.

    14. 如何建立一个备份控制文件?
    解答:Alter database backup control file to trace.

    15. 给出数据库正常启动所经历的几种状态 ?
    解答:
      STARTUP NOMOUNT – 数据库实例启动
      STARTUP MOUNT - 数据库装载
      STARTUP OPEN – 数据库打开

    16. 哪个column可以用来区别V$视图和GV$视图?
    解答: INST_ID 指明集群环境中具体的 某个instance 。

    17. 如何生成explain plan?
    解答:运行utlxplan.sql. 建立plan 表
    针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table
    运行utlxplp.sql 或 utlxpls.sql察看explain plan

    18. 如何增加buffer cache的命中率?
    解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set db_cache_size 命令

    19. ORA-01555的应对方法?
    解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过
    增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本

    20. 解释$ORACLE_HOME和$ORACLE_BASE的区别?
    解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。

    21. 如何判断数据库的时区?
    解答:SELECT DBTIMEZONE FROM DUAL;

    22. 解释GLOBAL_NAMES设为TRUE的用途
    解答:GLOBAL_NAMES指明联接数据库的方式。如果这个参数设置为TRUE,在建立数据库链接时就必须用相同的名字连结远程数据库

    23。如何加密PL/SQL程序?
    解答:WRAP

    24. 解释FUNCTION,PROCEDURE和PACKAGE区别
    解答:function 和procedure是PL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值而function将返回一个值在另一
    方面,Package是为了完成一个商业功能的一组function和proceudre的集合

    25. 解释TABLE Function的用途
    解答:TABLE Function是通过PL/SQL逻辑返回一组纪录,用于普通的表/视图。他们也用于pipeline和ETL过程。

    26. 举出3种可以收集three advisory statistics
    解答:Buffer Cache Advice, Segment Level Statistics, Timed Statistics

    27. Audit trace 存放在哪个oracle目录结构中?
    解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer

    28. 解释materialized views的作用
    解答:Materialized views 用于减少那些汇总,集合和分组的信息的集合数量。它们通常适合于数据仓库和DSS系统。

    29. 当用户进程出错,哪个后台进程负责清理它
    解答: PMON

    30. 哪个后台进程刷新materialized views?
    解答:The Job Queue Processes.

    31. 如何判断哪个session正在连结以及它们等待的资源?
    解答:V$SESSION / V$SESSION_WAIT

    32. 描述什么是 redo logs
    解答:Redo Logs 是用于存放数据库数据改动状况的物理和逻辑结构。可以用来修复数据库.

    33. 如何进行强制LOG SWITCH?
    解答:ALTER SYSTEM SWITCH LOGFILE;

    34. 举出两个判断DDL改动的方法?
    解答:你可以使用 Logminer 或 Streams

    35. Coalescing做了什么?
    解答:Coalescing针对于字典管理的tablespace进行碎片整理,将临近的小extents合并成单个的大extent.

    36. TEMPORARY tablespace和PERMANENT tablespace 的区别是?
    解答:A temporary tablespace 用于临时对象例如排序结构而 permanent tablespaces用来存储那些'真实'的对象(例如表,回滚段等)

    37. 创建数据库时自动建立的tablespace名称?
    解答:SYSTEM tablespace.

    38. 创建用户时,需要赋予新用户什么权限才能使它联上数据库。
    解答:CONNECT

    39. 如何在tablespace里增加数据文件?
    解答:ALTER TABLESPACE ADD DATAFILE SIZE

    40. 如何变动数据文件的大小?
    解答:ALTER DATABASE DATAFILE RESIZE ;

    41. 哪个VIEW用来检查数据文件的大小?
    解答: DBA_DATA_FILES

    42. 哪个VIEW用来判断tablespace的剩余空间
    解答:DBA_FREE_SPACE

    43. 如何判断谁往表里增加了一条纪录?
    解答:auditing

    44. 如何重构索引?
    解答: ALTER INDEX REBUILD;

    45. 解释什么是Partitioning(分区)以及它的优点。
    解答:Partition将大表和索引分割成更小,易于管理的分区。

    46. 你刚刚编译了一个PL/SQL Package但是有错误报道,如何显示出错信息?
    解答:SHOW ERRORS

    47. 如何搜集表的各种状态数据?
    解答: ANALYZE
    The ANALYZE command.

    48. 如何启动SESSION级别的TRACE
    解答: DBMS_SESSION.SET_SQL_TRACE
    ALTER SESSION SET SQL_TRACE = TRUE;

    49. IMPORT和SQL*LOADER 这2个工具的不同点
    解答:这两个ORACLE工具都是用来将数据导入数据库的。
    区别是:IMPORT工具只能处理由另一个ORACLE工具EXPORT生成
    的数据。而SQL*LOADER可以导入不同的ASCII格式的数据源

    50。用于网络连接的2个文件?
    解答: TNSNAMES.ORA and SQLNET.ORA

    展开全文
  • 计算机复试面试题总结

    万次阅读 多人点赞 2019-03-07 20:06:56
    选择排序:简单的选择排序,堆排序 归并排序:将两个有序归并到个有序。将两个有序放到一起进行各个比较,比较完之后放回原来数组内。 11。什么是稳定的算法? 不乱动已经排序好的数字,这样算法稳定一些。...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    章 测试基础 7 什么是软件测试: 7 ★软件测试的目的、意义:(怎么做好软件测试) 7 3.软件生命周期: 7 第二章 测试过程 8 1.测试模型 8 H模型: 8 V模型 9 2.内部测试 10 3外部测试: 10 验收测试:(在系统...
  • 最全最详细的PHP面试题(带有答案)

    千次阅读 多人点赞 2019-12-29 21:41:05
    八重樱:分享波腾讯PHP面试题 八重樱:2019年PHP最新面试题(含答案) 八重樱:Redis 高级面试题 学会这些还怕进不了大厂? 八重樱:阿里面试官三年经验PHP程序员知识点汇总,学会你就是下个阿里人! 八重樱...
  • 1.第种方式 select max(t1.INVALID_TIME) from T_CUSTOMER t1 where t1.customer_code = '5101' 1.第二种方式 SELECT INVALID_TIME FROM (SELECT * FROM T_CUSTOMER WHERE customer_code='5101' ORDER BY ...
  • Mysql查询获取过去一年,最后一天,每月,每月的数据 前言 今天博主将为大家分享Mysql查询获取过去一年,最后一天,每月,每月的数据,不喜勿喷,如有异议欢迎讨论! 锁的分类 在本MySQL教程中–我们很乐意与您...
  • 将已经集成好的软件系统,作为整个计算机系统的个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行(使用)环境下, - 对计算机系统进行系列测试活动。 根本任务 ...
  • 近日线上系统出现中数据重复的问题,但是根据业务流程来讲不可能出现该种情况,只可惜该中没有加入时间戳,所以问题变的不好查。 所以网上查了相关资料,发现可以用以下的语句查询: select t.seq_id,...
  • 浦发银行 信息科技岗 大数据方向 面经

    万次阅读 多人点赞 2018-08-09 23:00:31
    、综合面 二、机试 三、专业面试 浦发面经 即兴演讲 上机测试 结构化面试 浦发银行大数据创新岗上海打卡 第部分 综合面试 第二部分 专业面试 第三部分 上机考试(只有开发和测试岗需要,别的岗可选) 浦发...
  • 利用python整理出勤记录表

    千次阅读 2019-07-04 22:42:22
    早餐和午餐打卡机上会显示打卡时间记录,在同个excel表里,会显示工号,姓名,打卡时间的信息。本程序将每个人的打卡时间做统计,算出该员工在本月内吃过几次早餐,吃过几次午餐。 原始数据如下图所示。 ...
  • sql语句如下:select typhooncode from [table] where Qtime between CONVERT(VARCHAR(20),'2016-01-01 00:00:00',120) and CONVERT...主要是用到了CONVERT()函数,第个参数表示字段长度,第二个参数表示要转换为d
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠章的内容就完全掌握C#语言是不可能的,...
  • 对hire_date字段排序降序,此时最晚的时间排在第个,再用LIMIT取出。 SELECT * FROM employees ORDER BY hire_date DESC LIMIT 0,1; LIMIT m,n : 表示从第m+1条开始,取n条数据; LIMIT n : 表示从第0...
  • 需求:查询操作记录表中 operate_type=’版本更新‘ 的所有记录中距离当前时间最近的条记录 解决方案: <select id="getObjectById" parameterType="hashmap" statementType="STATEMENT" > SELECT poi_...
  • SQL 取前一天、一月、一年的时间

    万次阅读 2015-07-06 12:32:02
    SQL 取前一天、一月、一年的时间  _______________________________________ 丛星期一至星期日为一周的收款 ASA: set DATEFIRST 1 --设置每一周的第一天是星期一 select sum(isnull(cash.act_...
  • Oracle 根据时间 查询最新记录

    千次阅读 2019-09-03 20:09:25
    模板 select * from (select A from TABLE order by TIME desc) where rownum = 1...查询最新的条FROM_ID记录 select * from (select form_id from formid where user_id = '28be9d85d0764c518ca074832fbad1b6...
  • : id dksj 1 2016-4-15 08:00:01 2 2016-4-15 11:31:01 3 2016-4-15 13:00:00 4 2016-4-15 17:01:21 5 2016-4-16 08:02:00 6 2016-4-16 11:35:01 希望得到的结果: date daka 2016-4-15 08:00 ...
  • 刷卡进出数据存储在同一中,姓名有重复的,个人可能刷了2次,要求选出在时间段2014-12-28 11:00:00到2014-12-28 13:00:00内两次刷卡记录时间间隔大于等于40分钟的员工 logtime (时间 )logcard (卡号 )logid...
  • 现需要对表中所有这种开始时间与结束时间不在同一天记录进行拆分,时间跨度几天就拆分成几条: 以上为实现后的效果图,由于之前对Oracle的游标不太了解,请教了组长,后来也仔细看了下 游标的使用,这个实现也并...
  • SELECT HOUR ( e . time ) as Hour , FLOOR ( MINUTE ( e . time ) / 30 ) as M , COUNT ( * ) as Count FROM ...Mysql 查询一天中,每个小时数据的数量 如果有帮到您,打个赏呗
  • 条: select * from 表名 limit 1; 最后条:select * from表名 order by _id desc limit 1 最后条:select * from表名 order by _id desc limit 1
  • 1.应用场景 解决单表大数据量问题 2.学习/操作 2.1 阅读 MySQL单表数据量... 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年...
  • 假如有demo,内有字段:...假如要查询中6月份的记录那么比较简单的方法是:SELECT * FROM demo WHERE DATE_FORMAT(FROM_UNIXTIME(demo.`created_date`),'%Y%m')=201806;这里是使用了DATE_FORMAT将时间戳变为...
  • 多条重复记录中只取时间最近的记录 select aa.forecast_no, t1.wgt jz, t1.sj zl_sj, t2.wgt mz, t3.wgt pz  from Table1 aa  left outer join (select a.*  from Table2 a
  • SQL获取每月最后一天记录

    千次阅读 2013-12-04 13:06:34
    SQL获取每月最后一天记录 DECLARE@dtdatetime SET@dt=GETDATE() DECLARE@numberint SET@number=3 --1.指定日期该年的第一天或最后一天 --A. 年的第一天 SELECTCONVERT(char(5),@dt,120)+'1-1' --B. 年的最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 222,295
精华内容 88,918
关键字:

一天时间记录表