美文网首页数据库
数据库5|MySQL常见笔试问题

数据库5|MySQL常见笔试问题

作者: 是蓝先生 | 来源:发表于2016-05-09 14:33 被阅读1310次

    今天是5.9号。

    不知道明天会发生什么,也不知道自己将来会走向哪里,很多事都是虚无缥缈的,在手里的似乎没有多少。


    问题1:如何删除mysql表中的重复数据,只保留一条记录?

    方法一、先添加唯一性字段,若有则直接删除
    ALTER TABLE city1 ADD id int default 0;
    alter table city1 modify id int auto_increment primary key
    
    delete from city2
    where id not in (
        select * from 
        (select min(id) 
        from city2 
        group by name 
        having count(name)>1) as a 
        )
    
    方法二、完全重复的记录,也即所有字段均重复的记录,如果该表需要删除重复的记录(重复记录保留1条),
    可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    
    而且在实际设计表时,MySQL数据表中设置指定的字段为 PRIMARY  KEY(主键) 或者 UNIQUE(唯一)
    索引来保证数据的唯一性。
    

    问题2:找出表中的出现次数最多的某条记录(或某个字段)

    SELECT sid,count(sid) FROM city2 
    group by sid
    order by count(sid) DESC
    limit 1
    

    **问题3:用一条SQL语句查询出grade表中每门课都大于80分的学生姓名 **

    name  course    score 
    张三     语文     81
    张三     数学     75
    李四     语文     76
    李四     数学     90
    王五     语文     81
    王五     数学     100
    王五     英语     90
    
    select name from grade 
    group by name 
    having min(分数)>80
    

    问题4:有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A中对应的value

    update B set B.value=s.value
    from (select * from A except select * from B) s 
    where s.key=B.key
    

    问题5:将表city1中num_person字段根据人数进行重新编码
    要求:0<=x<500,000编码为1
    500,000<=x<1,000,000编码为2
    1,000,000<=x编码为3

    select name,
    case 
        when num_person>=0 and num_person<500000 then 1
        when num_person>=500000 and num_person<1000000 then 2
        when num_person>=1000000 then 3 end as mark  #将重新编码的后的数值在mark字段下展示。
    from city1
    

    问题6:常用的数据结构

    (1)数组 (Array)
        在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
    (2)栈 (Stack)
        是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
    (3)队列 (Queue)
        一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
    (4)链表 (Linked List)
        是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
    (5)树 (Tree)
        是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件: 
        (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。
        (2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
        (3)K中各结点,对关系N来说可以有m个后继(m>=0)。
    (6)图 (Graph)
        图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。 

    相关文章

      网友评论

        本文标题:数据库5|MySQL常见笔试问题

        本文链接:https://www.haomeiwen.com/subject/pvferttx.html