首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

1w 条数据在 excel 里,如何在数据库里利用这些数据查询出想要的数据

  •  
  •   5ispy · 295 天前 · 4377 次点击
    这是一个创建于 295 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单来说就是,一个 student 表,里面有学生 id 和分数 score。现在有个 excel 表里有 1w 条学生 id,怎么能查出这些 id 对应的分数?
    67 回复  |  直到 2018-11-03 11:21:38 +08:00
        1
    liprais   295 天前 via iPhone
    拼个 sql 不就行了
        2
    yfl168648   295 天前
    建个表,把 ID 搞进去,然后查询呗
        3
    lihongjie0209   295 天前
    要么全部导入 excel, 要么全部导入 sql, 然后操作
        4
    sambohuang   295 天前
    既然已经在 Excel 里面了,还放到数据库里去干嘛?
    Excel 的 Lookup、Vlookup、Index 函数了解一下,轻松解决你的问题
        5
    jasonyang9   295 天前
    数据透视表?
        6
    ioschen   295 天前
    帮楼主整理下,

    我们学校数据库有个 Student 表,里面存有全校所有学生的 id 和分数 score
    现在老师给我一个 excel,里面有一万个学生 id,没有分数
    我需要到数据库里获取到这一万个学生的分数,请问怎么做?
        7
    lllpla   295 天前
    java poi 读取 excel 然后写代码操作?
        8
    ioschen   295 天前
    @ioschen 有两个小办法
    1. 手工复制(快捷键)这些学生 ID,然后 sql 语句查询
    2. 代码获取 excel 学生 ID,然后 sql 查询
        9
    yepinf   295 天前 via iPhone
    是时候上数据分析 pandas ( python )
        10
    xpresslink   295 天前
    把 excel 另存成 CSV,导入数据库表。
    inner join 了解一下。
        11
    CivAx   295 天前   ♥ 6
    楼上你们搞的越来越复杂了。。。。就是一个查询语句。

    把语句模板写好,select 'id' 'score' from student where id = '$id';
    这个可以直接查询单条结果。

    如果是批量查询,在新的 Excel 文件中粘贴原 Excel 表的 “ id 列” 到第二列;
    在第一列写 select ...... id = '
    在第三列写 ';
    然后各填充 1 万行
    Ctrl + C 复制全表,粘贴到 TXT 文件中,用替换功能去掉空格 / 空白,另存为 *.sql 文件
    NaviCat 连上数据库,直接右键选中库 “运行 SQL 文件”,把查询结果导出为 Excel,这活儿就算结了。

    如果不具备任何专业知识,这个是最简单和通俗的方法
        12
    gaius   295 天前
    人家说的是 excel 有 1W 个学生 id,去数据库查 1W 个分数吧
        13
    alpenstock   295 天前
        14
    annielong   295 天前
    最快就是导入数据库,再进行查询
        15
    luozic   295 天前 via iPhone
    倒入数据库,爱做啥做啥
        16
    shmilyin   295 天前 via Android
    vlookup,了解一下
        17
    ant2017   295 天前 via Android   ♥ 1
    直接在 Excel 里面连接数据库查询
        18
    limuyan44   295 天前 via Android
    v2 到底有多少正经程序员啊,读 excel 查个分数什么妖魔鬼怪都出来了.
        19
    xavierskip   295 天前
    Excel 数据转换成 CSV 格式的数据,一切都好办了。
        20
    shijingshijing   295 天前
    VBA 了解一下~ 复杂点的上 VSTO 直接 C#搞定
        21
    XuanFei990   295 天前
    eeeeee

    是不是可以用 excel VBA 来访问数据库,来查找数据???
        22
    JCZ2MkKb5S8ZX9pq   295 天前
    好一点嘛直接 pandas。

    或者 db 导出 csv,导入 excel,vlookup 还是 match 一下(太久没用忘了)。
        23
    shm7   295 天前 via iPhone
    还好我用 pandas,dataframe[dataframe.id.map(lambda x: x in ids)]
        24
    proudofmyself911   295 天前 via Android
    直接导出来 vlookup 不就完事了。。。
    一万条而已,不需要搞那么复杂
        25
    lekai63   295 天前 via iPhone
    1 万条而已
    vlookup 了解下 直接公式解决
        26
    lekai63   295 天前 via iPhone
    没看仔细 是要去数据库查啊。
    excel 数据选项卡下有数据 from 之类的东西 先用那个看看。不行的话可能要用 powerBI 之类工具
    如果会 vba 的话 写好链接语句,再 select
    明早我找找个代码给你
        27
    Tumblr   295 天前
    也许可以帮到你:
        28
    JamesR   295 天前
    楼上弄 SQL 的都太麻烦了,几万行且简单一次查询而已,把数据全弄到 Excel 里 2 个 sheet,再一个 vlookup 公式搞定,缺点是慢,卡顿。

    如果查询次数多建议用 Access,主要是安装及使用简单,楼主的问题,安装花十分钟安装,操作熟练的话,导入表,拖拽下再查询 2 分钟搞定,比 Excel 要快不少。

    装个 SQLServer 或者 MySQL 什么的还不得半天。
        29
    mikeven   295 天前 via iPhone
    搞什么 sql 啊,10 分钟学一下 vlookup 函数搞定
        30
    bridgeca0   295 天前
    excel 里面复制 id,用逗号拼接一下 id,select id,score from student where id in ?
        31
    KingEngine   295 天前 via Android
    @ioschen id 列复制存在 txt 中,直接遍历 id 查询,然后存成 csv 格式,导入到 excel 中新表中,通过 lookup 在原表中添加对应成绩
        32
    largecat   295 天前 via Android
    关键词最多的就是数据库,

    也就一万条而已,
    一是读到内存里遍历,用第三方程序
    另外一个方法就是直接 excel 里用自带的 vba,
    太简单的东西你们都弄得好复杂,
    对一般用户来说装个数据库程序再配置好花个半天,
        33
    largecat   295 天前 via Android
    其实最简单的不是用第三方程序或者 excel 自带的 vba,
    而且 excel 单元格公式,一秒钟的事,所见即所得
        34
    Myprincess   295 天前
    POWER BI 了解一下,超级强大的数据透视工具。
        35
    wqzjk393   295 天前 via iPhone
    几万条 vlookup 轻轻松松的。能不上数据库就别上,主要是因为数据表格式和 Excel 经常有冲突,比如数据表数字很长没问题,但是如果导出来用 Excel 打开不注意格式很容易后面几位数字全部保留成 0 了。大数据量几十上百万的话或者逻辑复杂就用 pandas 吧
        36
    bridgeca0   295 天前
    各位注意审题啊,分数在数据库里面,说什么 lookup、access、vba 都出来了。。。。
        37
    likuku   295 天前
    如今伸手党这么开心啊....超幸福
        38
    zealzz   295 天前 via Android
    直接放内存里,爱咋搞咋搞
        39
    alcarl   295 天前 via Android
    。。。。。。这种手动操作,好歹说一下是用的什么库把,sqlserver 的话,只需要建个表,右键点他,编辑前 200 行,然后从 excel 里 ctrl+c,再回到 sqlserver 在右面打开的输入窗口中 ctrl+v 即可,sql 查询走起
        40
    congeec   295 天前
    Excel 现在不是能直接连数据库么...........
        41
    sutra   295 天前
    首先将 Excel 内的 ID 另存为 CSV 之类的纯文本文件,得到 ids.csv 。

    比如:
    $ cat ids.csv
    1
    2
    3

    然后生成 SQL 语句:
    $ cat ids.csv | awk 'BEGIN{ print "select id, score from student where id in("}{print "'\''"$1"'\'',"}END{ print "'\''0'\'');"}' > ids.sql

    生成的 SQL 如下:
    $ cat ids.sql
    select id, score from student where id in(
    '1',
    '2',
    '3',
    '0');

    将该 SQL 去数据库中查询,将查询结果导出成 CSV 格式(不同的数据库引擎或者数据库工具导出方式不一样,比如 psql -t -A -F ",")。
        42
    CEBBCAT   295 天前
    @likuku #37 这也许算是一个好问题,因为解法多样有挑战性
        43
    PythonAnswer   295 天前 via iPhone
    才 1w 行。现代 excel 能装 100w 行。
        44
    8e47e42   295 天前 via iPhone
    问导师要 20 个人的经费,然后请两个人请他们吃顿饭,让他们手动一个个去数据库里面查了抄进 excel 里。

    这是典型的印度人肉云的运作方式,有技术、有钱赚、有创新精神,最重要的是下次有同样需求的时候可以以人力成本上升为理由成倍涨价
        45
    KingPL   295 天前
    作业不应该自己完成么...
        46
    5ispy   295 天前
    @ioschen 对对对 场景是这样的
        47
    5ispy   295 天前
    @sambohuang 额 我遇到的问题是 6 楼说的那样的,我在帖子里没说清楚。。
        48
    5ispy   295 天前
    @alcarl 额。。。怪我没讲清楚具体场景。其实这个是工作中遇到到的问题,我只是简化了,真实的是数据库表里有 160w 条数据我需要用 excel 里的 id 去查数据库里的数据。oracle 数据库。
        49
    5ispy   295 天前
    @8e47e42 你的段位明显超出程序员的范畴了,,,
        50
    5ispy   295 天前
    @bridgeca0 用 in 的话 速度慢,没敢试怕把机器搞死,而且 in 里面数据量是有限制的,oracle 好像只能 1000 个
        51
    5ispy   295 天前
    @Tumblr 这个是用 excel 直接连接的数据库?
        52
    5ispy   295 天前
    @CivAx (⊙o⊙)哦!我去试一下,感谢!
        53
    5ispy   295 天前
    @sutra 这样也是用的 sql 的 in 吧
        54
    gaius   295 天前
    11L 的方法不错 装个 Navicat
        55
    Tumblr   295 天前
    @5ispy #51 是的,Excel 本身就可以直接连接数据库的,装驱动就好,像 MySQL-Connector 啊,ODBC 之类的。
    其实你的这个问题,Google 一下很多的,https://www.google.com/search?q=excel+database+query+based+on+cell+value&newwindow=1
        56
    shangfabao   295 天前
    笨的方法,数据导出 excel,两个 excel 内容合并一下,Vlookup 一下,5 分钟之内直接搞定
        57
    Gempty   295 天前
    连表查询了解一下
        58
    sdalkesioe   294 天前
    OPENROWSET 可以直接查啊
        60
    likuku   294 天前
    @5ispy [额。。。怪我没讲清楚具体场景。其实这个是工作中遇到到的问题,我只是简化了,真实的是数据库表里有 160w 条数据我需要用 excel 里的 id 去查数据库里的数据。oracle 数据库。]


    额,不同数量级有时就是有完全不同的玩法(甚至是各自有完全不同的唯一解,同一时代条件),
    否则 大数据相关技术 就真成了个谎言 /笑话。
        61
    allanzhuo   294 天前
    直接 in 一下不就 OK 了,楼上一个比一个复杂。
    1W 条数据直接在编辑工具替换为' xx',的形式,几秒钟就搞定了
        62
    allanzhuo   294 天前
    11 楼就是我说的方法~~~给老铁点个赞
        63
    expkzb   294 天前
    ID 复制到一个文本里,一行一个。利用 python 去读取 ID,并从数据库里获取相应数据就行了吧。不知道 lz 的代码能力如何。
        64
    Les1ie   294 天前
    pandas.read_excel().tosql()
        65
    ccoming   294 天前
    excel 里面直接就能用 sql,况且还有查找函数、数据透视表、power query 这些功能在,想怎么弄就怎么弄
        66
    saulshao   294 天前
    最快的做法是导入到数据库里,然后写 SQL 查询。
    楼上有人提到用文本编辑器拼 SQL 也是相当简单实用的办法。
        67
    leavan   294 天前
    postgresql 的 fdw 了解一下?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2152 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 05:11 · PVG 13:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.