【www.shanpow.com--简历下载】
如何获取数据篇(一):怎么免费从网上获取需要的数据?
我最常用的从网上获取数据的方法有两种,一是下载公开数据,可以从政府、企业、统计局等机构去下载公开数据。二是通过Python编写网页爬虫,收集互联网的数据。比如我就抓取过:知乎粉丝过万所有用户,咪蒙的211 万的新浪微博粉丝信息,豆瓣8分以上的书籍以及网易云音乐歌单排行榜等等。
虽然我平常撰写数据分析报告大部分都是自己写代码抓取的,但我也有在网上下载过公开数据。这里我分享几个免费可获取数据来源。当然,如果是程序员的话,也可以学习怎么自己抓取数据,毕竟这样获取数据更灵活。
1.国家数据
这个数据库信息内容涵盖范围全面、详实,并且有些数据已经做好了可视化,所以具有很高的实用性;基本只要和国情相关的信息都会在里边发布;比如地区房价、工业、能源、居民消费总额、房地产投资甚至食品的平均价格。
国家统计数据库包括历年月、季、年度数据,可通过数据库“搜索”、选择“指标”等方式,方便快捷地查询到历年、分地区、分专业的数据。是公众快速查阅统计指标及系列数据的最便捷方法。
2.中华人民共和国国家统计局
这个网站的信息是比较宏观的,国家统计局一般只发布全国和分省的宏观统计数据。但如果想获取市级、地级信息,也可以底部的友情链接中获取。
3.艾瑞咨询
是比较权威的互联网数据咨询集团,主要针对互联网市场。数据更新比较及时,也很清晰,并且根据数据发表研究报告。
4.CEIC
主要涉及和经济相关信息,最大的优点就是不止可以查中国国内数据,还涉及许多其他国家,缺点就是部分免费。
仁兄,有帮助就留个赞呗~~~
如何获取数据篇(二):这些数据获取方式,一般人不知道
1公开的数据库- 国家数据 -
http://data.stats.gov.cn/index.htm
数据来源于中国国家统计局,包含了我国经济民生等多个方面的数据,并且在月度、季度、年度都有覆盖,较为全面和权威,对于社会科学的研究不要太有帮助。最关键的是,网站简洁美观,还有专门的可视化读物。
- CEIC -
http://www.ceicdata.com/zh-hans
最完整的一套超过128个国家的经济数据,能够精确查找GDP, CPI, 进口,出口,外资直接投资,零售,销售,以及国际利率等深度数据。其中的“中国经济数据库”收编了300,000多条时间序列数据,数据内容涵盖宏观经济数据、行业经济数据和地区经济数据。
- wind(万得)-
http://www.wind.com.cn/
万得被誉为中国的Bloomberg,在金融业有着全面的数据覆盖,金融数据的类目更新非常快,据说很受国内的商业分析者和投资人的亲睐。
- 搜数网 -
http://www.soshoo.com/
已加载到搜数网站的统计资料达到7,874本,涵盖1,761,009张统计表格和364,580,479个统计数据,汇集了中国资讯行自92年以来收集的所有统计和调查数据,并提供多样化的搜索功能。
- 中国统计信息网 -
http://www.tjcn.org/
国家统计局的官方网站,汇集了海量的全国各级政府各年度的国民经济和社会发展统计信息,建立了以统计公报为主,统计年鉴、阶段发展数据、统计分析、经济新闻、主要统计指标排行等。
- 亚马逊aws -
http://aws.amazon.com/cn/datasets/?nc1=h_ls
来自亚马逊的跨科学云数据平台,包含化学、生物、经济等多个领域的数据集。
- figshare -
https://figshare.com/
研究成果共享平台,在这里你会发现来自世界的大牛们的研究成果分享,同时get其中的研究数据,内容很有启发性,网站颇具设计感。
- github -
https://github.com/caesar0301/awesome-public-datasets
如果觉得前面的数据源还不够,github上的大神已经为大家整理好了一个非常全面的数据获取渠道,包含各个细分领域的数据库资源,自然科学和社会科学的覆盖都很全面,简直是做研究和数据分析的利器。
随便上几个图,满满的都是资源啊2数据交易平台- 优易数据 -
http://www.youedata.com/
由国家信息中心发起,拥有国家级信息资源的数据平台,国内领先的数据交易平台。平台有B2B、B2C两种交易模式,包含政务、社会、社交、教育、消费、交通、能源、金融、健康等多个领域的数据资源。
- 数据堂 -
http://www.datatang.com/
专注于互联网综合数据交易,提供数据交易、处理和数据API服务,包含语音识别、医疗健康、交通地理、电子商务、社交网络、图像识别等方面的数据。
3网络指数- 百度指数 -
http://index.baidu.com/
大家都很熟悉的指数查询平台,可以根据指数的变化查看某个主题在各个时间段受关注的情况,进行趋势分析、舆情预测有很好的指导作用。除了关注趋势之外,还有需求分析、人群画像等精准分析的工具,对于市场调研来说具有很好的参考意义。同样的另外两个搜索引擎搜狗、360也有类似的产品,都可以作为参考。
- 阿里指数 -
https://alizs.taobao.com/
国内权威的商品交易分析工具,可以按地域、按行业查看商品搜索和交易数据,基于淘宝、天猫和1688平台的交易数据基本能够看出国内商品交易的概况,对于趋势分析、行业观察意义不小。
- 艾瑞咨询 -
http://www.iresearch.com.cn/
艾瑞作为老牌的互联网研究机构,在数据的沉淀和数据分析上都有得天独厚的优势,在互联网的趋势和行业发展数据分析上面比较权威,艾瑞的互联网分析报告可以说是互联网研究的必读刊物。
- 友盟指数 -
http://www.umeng.com/
友盟在移动互联网应用数据统计和分析具有较为全面的统计和分析,对于研究移动端产品、做市场调研、用户行为分析很有帮助。除了友盟指数,友盟的互联网报告同样是了解互联网趋势的优秀读物。
- 爱奇艺指数 -
http://index.iqiyi.com/
爱奇艺指数是专门针对视频的播放行为、趋势的分析平台,对于互联网视频的播放有着全面的统计和分析,涉及到播放趋势、播放设备、用户画像、地域分布、等多个方面。由于爱奇艺庞大的用户基数,该指数基本可以说明实际情况。
- 猫眼专业版-
http://piaofang.maoyan.com/
电影票房统计分析平台,猫眼专业版有实时的票房统计,影片的排盘情况、上座率和影院数据,对于当前电影的分析是必不可少的。
4网络采集器
网络采集器是通过软件的形式实现简单快捷地采集网络上分散的内容,具有很好的内容收集作用,而且不需要技术成本,被很多用户作为初级的采集工具。
- 火车采集器 -
http://www.locoy.com/
一款专业的互联网数据抓取、处理、分析,挖掘软件,可以灵活迅速地抓取网页上散乱分布的数据信息,并通过一系列的分析处理,准确挖掘出所需数据,最常用的就是采集某些网站的文字、图片、数据等在线资源。接口比较齐全,支持的扩展比较好用,懂代码的话,可以使用PHP或C#开发任意功能的扩展。
- 八爪鱼 -
http://www.bazhuayu.com/
简单实用的采集器,功能齐全,操作简单,不用写规则。特有的云采集,关机也可以在云服务器上运行采集任务。
- 集搜客 -
http://www.gooseeker.com/
一款简单易用的网页信息抓取软件,能够抓取网页文字、图表、超链接等多种网页元素,提供好用的网页抓取软件、数据挖掘攻略、行业资讯和前沿科技等。
5网络爬虫
作为极客们最喜欢的数据收集方式,爬虫高度的自由性、自主性都使其成为数据挖掘的必备技能,当然精通python等语言是必要前提。
利用爬虫可以做很多有意思的事情,当然也可以获取一些从其它渠道获取不到的数据资源,更重要的是帮你打开寻找和搜集数据的思路。
- 利用爬虫爬取网络图片 -
爬取的图像素材
你看到某个网站上的图片恰好是你需要的,但是量大单个下载太麻烦,那么利用爬虫你可以快速地进行抓取,并可以根据标签、特征、颜色等信息进行分类储存。从此不缺设计素材,不缺美女图片,连斗图都多了几分自信。
- 利用爬虫爬取高质量资源 -
爬取的音乐资源
我们总是想快速地去搜集高质量的网络资源,但是人工查找比对实在太麻烦,利用爬虫你就可以轻松解决。比如爬取知乎点赞最多的文章列表,爬取网易云音乐评论最多的音乐,爬取豆瓣网高评分的电影或图书……总之,你可以从此拒绝平庸。
- 利用爬虫获取舆情数据 -
爬取的某招聘网站职位信息
比如你可以批量爬取社交平台的数据资源,可以爬取网站的交易数据,爬取招聘网站的职位信息等,可以用于个性化的分析研究。
总之,爬虫是非常强大的,甚至有人说天下没有不能爬的网站,因而爬取数据也成为了很多极客的乐趣。开发出高效的爬虫工具可以帮助我们节省很多时间,可以完全按照自己的需求来订制,想想这个世界就太美好。
6小工具- Web Plot Digitizer -
http://arohatgi.info/WebPlotDigitizer/app/
比如我们在查看期刊文献的时候看到一张成型的图表,但其本身数据是缺失的,你想获得这个图表的相关数据怎么办?有了这个小工具就非常easy了。直接上传我们需要获得数据的图表,如下:
然后我们就会获得如下的数据反馈,感觉运筹帷幄有木有,对于一些不需要十分精确的分析研究足够使用。
当然并不推荐用这个作为量化分析的依赖,对于定性的分析,做ppt级的数据统计分析就足够了。
- you-get -
https://you-get.org/
这是一个程序员基于python 3开发的项目,已经在github上面开源,支持64个网站,包括优酷、土豆、爱奇艺、b站、酷狗音乐、虾米……总之你能想到的网站都有! 还有一个黑科技的地方,即使是名单上没有的网站,当你输入链接,程序也会猜测你想要下载什么,然后帮你下载。
下载优酷视频
批量下载图片
当然you-get要在python3环境下进行安装,用pip安装好后,在终端输入“you get+你想下载资源的链接”就可以等着收藏资源了。
7数据导航
收集数据是一种能力,学习收集数据也是一种能力,数据的来源是没有穷尽的,转换一种思维,你就可以获得不一样的数据,下面推荐几个可以用到的大数据导航,从这里面你可能会发现一些你自己想要的东西。每个人喜欢的收集数据的渠道不尽相同,只有尽量多地去见识和实践才会发现更多的适合自己的数据获取方式。
- 199IT大数据导航 -
http://hao.199it.com/
- 数据分析网导航 -
http://www.afenxi.com/hao
如何获取数据篇(三):第6章? 如何获取数据库中的数据
第6章 如何获取数据库中的数据
教学内容:
6.1 案例引入——从商品信息管理数据库中获取数据
6.2 查询商品信息管理数据库
6.3 应用SELECT—SQL命令进行“查询”
6.4 用“视图”方法查看商品信息管理数据库
教学时间:
第九、十周
教学方法:
演示文稿演示教学和实际操作演示教学相结合
教学目的:
本章介绍数据库及自由表一个重要应用——查询和视图。查询和视图是根据用户的需要从数据库或自由表中按一定要求选择出部分数据及计算统计组成一个虚拟数据表。查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。
教学重点难点:
1、建立、使用、修改查询
2、应用SELECT—SQL命令进行“查询”
3、建立、使用、修改视图
教学过程:
Visual FoxPro 提供了查询和视图的工具: 查询设计器和视图设计器。通过查询设计器和视图设计器进行设计,使用户很方便地从数据库或自由表中检索及统计出所需要的数据。
查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。
6.1 案例引入——从商品信息管理数据库中获取数据
建立数据库表或自由表后,在数据表中保存了大量数据,如何灵活使用这些数据,是充分利用数据资源、提高管理水平的一个重要问题。在实际应用中用户常常需要根据要求选择其中一部分数据构成所需的新的数据组合。如员工表yg.dbf,表中有6个字段: 员工编号ygbh、姓名xm、性别xb、基本工资jbgz、职务zw和密码mm。员工表中的部分记录内容显示在表6-1中。
<参见教材P167表6--1>
利用员工表yg.dbf中的记录数据,选择其中的部分数据构成各种不同的表。如选择员工编号ygbh、员工姓名ygxm、性别xb、职务zw等字段列出表6-2所示数据。
<参见教材P168表6--2>
又如选择列出所有女职工的数据表6-3。
<参见教材P168表6--3>
还可以用多个表中的数据构成新的表,使用员工表yg.dbf和销售情况表xsqk.dbf构成员工的销售情况表ygxsqk.dbf,如表6-4所示。表中选择了员工表的员工编号yg.ygbh、姓名字段yg.xm,选择了销售情况表的商品编号xsqk.spbh、销售数量xsqk.xssl和总金额xsqk.zje等字段。多表之间的数据通过表之间的关系联接。如列出员工的销售情况,计算出每个员工的销售总金额作为一输出项。
<参见教材P169表6--4>
从上面几个表格的例子可知,开发人员可以灵活使用数据库中各表的数据组成不同需要的数据表,除了选择字段还可以设置条件,如选择性别是“女”的记录;也可以进行统计计算,如计算出每位职工销售商品的总的金额等。Visual FoxPro 为用户提供了从数据表中按一定的条件获取部分数据的工具,有“查询”和“视图”两种。“查询”和“视图”都是对数据表进行检索及统计出所需的数据。用“视图”构成的表可以视为一数据表保存在数据库中,可对源数据表记录进行修改或直接被作为数据表引用。而用“查询”构成的表不能直接对源表进行操作。“查询”和“视图”对多个相关的数据表进行检索统计时显得特别方便。“查询”是通过“查询设计器”、“视图”通过“视图设计器”进行设计操作,在后面的几节中将详细介绍“查询”和“视图”的操作方法。
6.2 查询商品信息管理数据库
用“查询设计器”对数据表进行各种查询操作,获得用户所需要的不同结果。本节中通过对商品信息管理数据库进行查询来介绍“查询设计器”的操作。
6.2.1 单表“查询”日销售商品情况
对单个数据表进行查询,这里以商品信息管理数据库中的销售情况表xsqk.dbf获得某一天的商品销售情况为例,查询日销售情况。所要选取的字段有:商品编号spbh、销售数量xssl、总金额zje。 获得某日商品销售情况的操作如下:
1. 打开“查询设计器”
从项目管理器打开“查询设计器”。打开项目管理器,在“数据”选项栏列表中选择“查询”项。再单击“新建”按钮,出现“新建查询”对话框。在对话框中选择“新建查询”即打开“查询设计器”。如图6-1所示。随“查询设计器”打开的有“查询”菜单和“查询设计器”工具栏,如图6-2所示。
2. 添加数据表
打开“查询设计器”后,一般将出现“添加表或视图”对话框,如未出现“添加表或视图”对话框时,可选择“查询设计器”工具栏或执行“查询”菜单中的“添加表”命令打开。“添加表或视图”对话框如图6-3所示。在对话框内的“数据库”栏和“数据库中的表”栏中选择所需的数据库sp和销售情况表xsqk.dbf。选择了数据表xsqk.dbf后,单击“添加”按钮。将所需的表添加到“查询设计器”,再单击“关闭”按钮,进入“查询设计器”。
图6-3 “添加表或视图”对话框
3. 选择所需的输出字段
“查询设计器”的下半部有多个选项卡,选择“字段”选项卡。“字段”选项卡上包含了“可用字段”列表、“选定字段”列表和将字段从“可用字段”列表调入“选定字段”列表中的“添加”和“全部添加”按钮,以及将选定输出的字段从“选定字段”列表中释放回“可用字段”列表中的“移去”和“全部移去”按钮。“可用字段”列表中列出了可供选用的数据表字段,每个字段前面标出了字段所属的数据表。在“查询设计器”的“可用字段”列表中分别选择商品编号xsqk.spbh、销售数量xsqk.xssl、总金额xsqk.zje等字段,每选定一个字段后单击“添加”按钮,则将选定的字段一一添加到“选定字段”列表中。
4. 设置筛选日期的条件
案例中要求选择某日的销售情况,筛选条件通过“筛选”选项卡进行设置,如图6-4所示。在此选项卡中建立“销售日期xsqk.xsrq”字段的筛选关系: xsqk.xsrq=日期。如选择2003年10月29日的销售情况。表达式则为:
xsqk.xsrq={^2003/10/29}
在“筛选”选项卡中设置筛选条件的方法是: 表达式等号左边的内容列在选项卡的“字段名”栏中,单击“字段名”右边的下拉箭头,出现所有的可选字段和一个<表达式…>项。
如果表达式左边选用的是字段,可直接在列表中单击选用。如果还要构成一定的表达式关系,则可选择<表达式…>项。本例中的xsqk.xsrq可直接从“字段名”栏中选出。表达式等号右边的内容列在“实例”栏中。在“条件”栏中选择“=”关系符号。
5. 运行查询结果
单击工具栏中的“运行”按钮或选择“查询”菜单中的“运行查询”命令,以默认的浏览状态显示出日销售情况表,如图6-5所示。
6.2.2 多表“查询”日销售商品情况
上面的查询日销售商品情况是应用一个数据表进行查询的,如果希望销售商品情况表表达得更完善,这里可增加一个商品信息表spxx.dbf参与查询,从中获得商品名称.spxx.spmc字段,使查询结果更加直观,如图6-6所示。现介绍多表的“查询”操作。
1. 打开“查询设计器”
单击“文件”菜单中的“新建”命令,在“新建”对话框中选择“查询”选项,单击“新建文件”按钮,打开“查询设计器”。
2. 添加数据表
按工具栏“添加表”按钮,打开“添加表或视图”对话框,在“数据库”栏中选择数据库sp。从“数据库中的表”栏中分别选择商品信息表spxx.dbf和销售情况表xsqk.dbf添加到“查询设计器”中。
3. 建立两表的联接关系
在“查询设计器”中选择“联接”选项卡,建立商品信息表spxx和销售情况表xsqk两表的联接关系: spxx.spbh=xsqk.spbh,如图6-7所示。如果两表在数据库中已建立了永久关联的关系,“联接”选项卡中会自动建立起联接关系。
4. 选择输出字段
选择“字段”选项卡。“可用字段”列表中列出了商品信息表spxx.dbf和销售情况表xsqk.dbf两表的全部字段。在其中分别选择商品信息表spxx.dbf的商品编号spxx.spbh、商品名称spxx.spmc字段和销售情况表xsqk.dbf的销售数量xsqk.xssl、总金额xsqk.zje字段添加到“选定字段”列表中。
5. 设置筛选日期的条件
在“筛选”选项卡中建立销售日期xsqk.xsrq字段的日筛选关系。同样选择表达式:
xsqk.xsrq={^2003/10/29}
6. 运行查询结果
单击工具栏中的“运行”按钮或选择“查询”菜单中的“运行查询”命令,出现如图6-6所示的日商品销售查询情况表。
6.2.3 查询员工销售业绩情况
通过查询每个员工的销售情况,表现每个员工的工作业绩。本例中以月为时间单位查询员工在某一月的销售情况,需要用到销售情况表xsqk.dbf和员工表yg.dbf。查询操作如下:
(1) 打开查询设计器,添加销售情况表xsqk.dbf和员工表yg.dbf。
(2) 选择输出字段。选择的字段应该有: 员工编号xsqk.ygbh、姓名yg.xm、销售金额小计。其中销售金额小计是对每一个员工的当月销售总值进行统计。
“销售金额小计”的设置: 销售金额小计是按员工编号xsqk.ygbh对销售总金额xsqk.zje字段进行求和,求和计算表达式为SUM(xsqk.zje),并按员工编号分组计算。销售金额小计的设置是使用查询设计器“字段”选项卡中的“函数和表达式”生成。具体操作为:
① 单击“函数和表达式”栏右边的按钮,出现“表达式生成器”对话框。
② 在对话框的“表达式”栏中生成表达式: SUM(xsqk.zje) AS “销售金额小计”。 SUM()求和符号从“表达式生成器”的函数“数据”栏中选择获得,在函数“数学”栏中寻找到“SUM()”求和符号,双击该求和符号,符号立即显示到“表达式”栏中。
③ 在“来源于表”栏中选择销售情况表xsqk。在“字段”栏中选择总金额xsqk.zje字段并双击,xsqk.zje(总金额)字段显示在“表达式”栏中的SUM()的括号中间。
④ 用AS引出该字段的标题“销售金额小计”,完成表达式SUM(xsqk.zje) AS “销售金额小计”的设置。
⑤ 按“表达式生成器”的“确定”按钮,退出表达式生成器。表达式SUM(xsqk.zje) AS “销售金额小计”显示在“函数和表达式”栏中。
⑥ 单击“添加”按钮将表达式添加到“选定字段”栏中。
(3) 分组统计的控制。“销售金额小计”项是对每一个员工的销售情况求和。这里按员工编号分组对每个员工的销售情况进行统计。分组统计通过查询设计器的“分组依据”选项卡进行设置。在“可用字段”栏中选择员工编号xsqk.ygbh添加到“分组字段”中,如图6-8所示。根据分组依据的设置,则可分别按照员工编号对总金额字段进行分组求和统计出每个员工的“销售金额小计”值。
(4) 设置筛选月份条件。案例中要求的统计某月的销售情况通过“筛选”选项卡进行。在此项中获得销售日期xsqk.xsrq字段的年份和月份筛选关系:
YEAR(xsqk.xsrq)=年 AND MONTH(xsqk.xsrq)=月份
例如这里选择2003年及9月份,表达式则为:
YEAR(xsqk.xsrq)=2003 AND MONTH(xsqk.xsrq)=9
在“筛选”选项卡中获得表达式的方法是: 等号左边的内容置于“筛选”选项卡中的“字段名”栏中,单击“字段名”栏右边的下拉箭头,出现所有可选字段和一个<表达式…>项。如果表达式左边选用的是字段,可直接在列表中单击选择。如果还要构成一定的表达式关系,则可选择<表达式…>项进行设计。本例中的YEAR(xsqk.xsrq)和MONTH(xsqk.xsrq)都须通过<表达式…> 项进行设置。等号右边的内容在“实例”栏中输入。关系符等于号在“条件”栏中选择。第一个表达式YEAR(xsqk.xsrq) =2003设置在第1行,第2个表达式MONTH(xsqk.xsrq)=9设置在第2行,两个表达式之间的“与”关系在第1行表达式后的“逻辑”项中选择。“筛选”选项卡显示在图6-9所示。
(5) 运行查询结果。单击工具栏中的“运行”按钮,运行上面设置的“查询”,得到每个员工在9月份中的销售情况表,如图6-10所示。
6.2.4 “查询设计器”的各功能设计方法
掌握了查询的作用和基本操作后,我们来全面了解一下“查询设计器”的各种功能的设计方法。
1. 打开“查询设计器”的方法
① 用“文件”菜单中的“新建”命令打开“查询设计器”。单击“文件”菜单中的“新建”命令,在出现“新建”对话框中选择“查询”,并单击“新建文件”按钮,打开“查询设计器”。
② 从项目管理器打开“查询设计器”。打开项目管理器,如图6-11所示。在“数据”选项栏列表中选择“查询”项。再单击“新建”按钮,出现“新建查询”对话框。在对话框中选择“新建查询”即打开“查询设计器”。
打开“查询管理器”后的同时在菜单栏上出现“查询”菜单,在查询设计器窗口出现“查询设计器”工具栏。如果“查询设计器”工具栏未出现,可选择“显示”菜单中的“工具栏”命令,从“工具栏”对话框中选择“查询设计器”打开“查询设计器”工具栏。
2. 添加或移除数据库表或自由表
选择“查询”菜单中的“添加表”或单击“查询设计器”工具栏中的“添加表”按钮,调出图6-3的“添加表或视图”对话框。在“添加表或视图”对话框中选择所要添加的数据库和数据表,按“确定”按钮,将选定的表添加到“查询设计器”中。要添加多个数据表时,则重复进行上述操作。如果所需要的表在数据表栏中未列出,可按“其他”按钮,从“打开”对话框中寻找所需的表。所需添加的表加到“查询设计器”中后,按“关闭”按钮,退出“添加表”对话框,完成添加表的操作。
从“查询设计器”中移除数据表的方法是: 先选定要移去的表,再按“查询”菜单中的“移去表”命令或“查询设计器”工具栏的“移去表”按钮,即可移去选择的表。
3. 选择“查询”输出字段
选择“查询设计器”的“字段”选项卡,该选项卡上的“可用字段”列表框中列出了“查询设计器”中数据表的全部字段,从中单击选择要输出的字段。选择所需要的字段后单击“添加”按钮,将选定的字段添加到“选定字段”中。“全部添加”可将“可用字段”列表中的所有字段同时添加到“选定字段”中。“移去”按钮将“选定字段”列表框中选择的字段移回到“可用字段”列表框中。“全部移去”按钮将“选定字段”列表中的全部字段移回到“可用字段”列表框中。
利用“函数和表达式”栏构成一定的表达式作为一个字段,用AS引导该表达式的标题。单击“添加”按钮将表达式添加到“选定字段”栏中。
4. 建立多表联接关系
如果使用多个相关的数据表须建立联接关系,建立联接关系的方法是: 单击“联接”选项卡,如图6-12。在“联接”选项卡的“字段名”中选择第一个数据表的一个字段,在“值”中选择另一个数据表与第一个数据表所选的字段相关联的字段。
选项中的“条件”是确定所选两表的字段以什么条件关联。关联的条件有多种,关联条件在表6-5中列出。选项卡中的“否”表示与所选择的条件相反。
选项中“类型”确定关联的关系类型,关联的类型有内联接(Inner Join)、左联接(Left Outer Join)、右联接(Right Outer Join)和完全联接(Full Join)四种。四种联接类型的关系列在表6-6中。
5. 确定查询条件
选择查询的数据需要满足一定的条件时,在“查询设计器中”使用“筛选”选项卡。“筛选”选项卡如图6-13所示。查询条件根据字段满足的条件来确定,在“筛选”卡中设置字段符合的条件。“字段名”中选择所设计的字段,“实例”中输入满足的条件值。可选择的“条件”与表6-5中列出的条件相同。
6. 设置查询的排序
当需要对查询结果按某一字段进行排序时,选择“查询设计器”的“排序依据”选项卡。“排序依据”选项卡如图6-14所示。在此选择卡中,“选定字段”列表框中列出可选择的字段,其字段是前面选定的输出字段。在“选定字段”列表中选择需要排序的字段,按“添加”按钮将其添加到“排序条件”列表中。同时在“排序选项”栏中确定排序的字段是升序还是降序。
7. 确定查询的分组
在查询时有时需要对记录的某些数据进行分组统计计算,如对销售出的商品按相同的商品进行销售量的统计。对此使用“分组依据”选项卡。“分组依据”选项卡在如图6-15中显示。
8. 其他项目的设定
应用“查询设计器”的“杂项”选项卡对查询结果排除重复记录、选择查询范围等操作。“杂项”选项卡如图6-16所示。
(1) 查询结果排除重复数据的记录
当记录中的某一字段有相同记录时,查询使用“无重复记录”选项可以使查询结果排除该字段的重复记录,只显示排在最前面的一个记录。
(2) 设置查询的记录范围
使用查询“杂项”选项卡中的“列在前面的记录”选项,可以选择查询范围。查询的范围有下面几种情况:
① 全部: 查询全部记录。
② 部分记录: 查询记录中前n个记录。在“记录个数”选项中设定记录的前面n个记录。
③ 前n%个记录: 按百分比选择记录的范围,选择n值后,再选定“百分比”项确定选择记录的百分比。
选择后两种情况时,需要先对记录进行排序。
9. 查询结果的输出方向
查询设置完成后,其查询结果可有多个去向。查询结果主要去向有: 浏览、临时表、表、图形、屏幕、报表、标签。
查询输出去向的设置通过“查询”工具栏中的“查询去向”按钮或“查询”菜单中的“查询去向”命令。单击“查询去向”按钮或命令后出现“查询去向”对话框,如图6-17所示。在对话框中选择查询输出结果的去向后,按“确定”完成设置。
设置查询结果去向后执行查询,将以设定的去向产生查询结果,如设置了查询结果去向为“表”,则查询的输出结果存入指定的数据表中,而不显示在“浏览”框中。
10. 运行查询
使用“查询设计器”完成查询设置后,用“查询”菜单中的“运行查询”命令或“常用”工具栏的“运行”按钮来运行“查询”结果。
查询文件的扩展名为.qpr,编译后的查询文件扩展名为.qpx。
使用命令执行查询,使用 DO 查询文件名.qpr 命令进行查询。
6.2.5 部门月销售情况交叉表的设计
月销售情况表的记录如表6-7中所示,表中反映了各销售部门每个月的销售情况,从表中查看部门各月份销售情况时不够直观,Visual FoxPro 提供了一种更直观查看这类表的设计方法: 交叉表设计。交叉表将两个字段的值分作为表格的行标题和列标题,如将月份字段的值作为行标题、部门字段的值作为列标题。另一个字段作为前两个字段交叉单元的值,查询结果构成一种三维表,如表6-7所示。
设计交叉表应用“交叉表向导”工具,“交叉表向导”设计方法如下:
① 选择“文件”菜单中的新建命令,打开“新建”对话框。在对话框中选择“查询”项,并单击“向导”按钮,打开“向导选取”对话框。在“向导选取”对话框中选择“交叉表向导”,即打开“交叉表向导”。
② 字段选择。在交叉表设计步骤1中选择数据表和设计交叉表所需的字段,如字段选择 : 部门、月份和销售额。
③ 定义布局。交叉表设计步骤2中设计查询表的行标题、列标题和数据栏内容,如图6-18所示。将“部门”字段拖到“行”框中,把“月份”字段拖到“列”框中,“销售额”拖到“数据”框中。
④ 加入总结信息。交叉表设计步骤3是加入总结信息,总结信息为查询增加一个统计计算列,对查询的数据进行总结计算。总结计算的类型分别有: 求和、计数、平均值、最大值、最小值等。汇总分类有数据求和、包含数据的单元格数目、占整张表的总计的百分比、不统计等各项。加入总结信息设计对话框如图6-19所示。计算各部门的销售总金额时总结项选择“求和”,分类汇总项选择“数据求和”。
⑤ 完成设计。在保存交叉表查询、保存并运行交叉表查询和保存交叉表查询并在查询设计器中修改该查询中选择一项,完成交叉表设计。部门月销售情况交叉表的运行结果如图6-20所示。
6.3 应用SELECT—SQL命令进行“查询”
使用“查询设计器”工具对数据表进行的查询也可以使用SELECT—SQL命令实现。实质上使用“查询设计器”的查询设计最终也是生成一组SELECT—SQL命令。
6.3.1 SELECT—SQL查询命令
SELECT—SQL查询命令的格式如下:
SELECT [ALL / DISTINCT] [TOP nExpr [PERCENT]]
[Alias.]Select-Item [AS Column-Name]
[,[Alias.]Select-Item [AS Column-Name]…]
FROM [FORCE][DatabaseName!] table [lacal-Alias]
[INNER/LEFT/[OUTER]/RIGHT[OUTER]/FULL[OUTER]
JOIN [DatabaseName!]Table [Local-Alias] ON JoinCondition [[INTO Destination] /[TO FILE FileName
[ADDITIVE]/TO PRINTER [PROMPT]/TO SCREEN]]
[PREFERENCE PreferenceName]
[NOCONSOLE] [PLAIN][NOWAIT]
[WHERE JoinCondition [AND JoinCondition…] [AND/OR
FilterCondition [AND /OR FilterCondition….]]]
[GROUP BY GroupColumn [,GroupColumn…]]
[HAVING FilterCondition UNION
[ALL] SELECTCommand]
[ORDER BY Order-Item [ASC/DESE] [,Order-Item [ASC/DESC]…]]
SELECT—SQL命令可以分解为多个部分,每一部分分别对应“查询设计器”的一种操作。SELECT—SQL命令主要分为下列各部分:
1. 指定输出字段
SELECT [ALL / DISTINCT] [TOP nExpr [PERCENT]]
[Alias.]Select-Item [AS Column-Name]
[,[Alias.]Select-Item [AS Column-Name]…]
命令中的参数:
[Alias.]Select-Item: 指定查询结果的输出字段、常量或表达式。Alias表示数据表别名。如果选择一个数据表的全部字段可用“*”表示。
[AS Column-Name]: 设置查询输出字段或表达式项的标题。
[ALL / DISTINCT]: 确定有无重复记录。ALL表示所有记录,ALL可以省略。DISTINCT表示当有重复记录时只输出重复记录中第一个记录。
[TOP nExpr [PERCENT]]: 确定记录范围。TOP nExpr表示记录数,TOP nExpr PERCENT表示记录的百分数。
2. 指定查询的数据表
FROM [DatabaseName!] table [lacal-Alias]
table: 指定查询的数据表。
[DatabaseName!]: 当数据源是数据库表时的数据库名。
[lacal-Alias]: 本地表的别名。
如数据表取自sp数据库的xsqk表表示为: FROM sp!xsqk。
例: 显示sp数据库中xsqk表的所有记录,输出商品编号spbh和销售数量xssl字段。
SELECT xsqk.spbh, xsqk.xssl FROM sp! xsqk
3. 确定多表间的联接
[INNER / LEFT [OUTER] / RIGHT[OUTER] / FULL[OUTER]
JOIN DatabaseName!]Table [Local-Alias] ON JoinCondition
命令中的参数:
[INNER/LEFT [OUTER]/RIGHT [OUTER]/FULL[OUTER]: 确定是内联接、左联接、右联接还是完全联接。
INNER OUTER: 内联接
LEFT OUTER: 左联接
RIGHT OUTER: 右联接
FULL OUTER: 完全联接。
DatabaseName!]Table: 指定被联接的数据库和数据表名。
JoinCondition: 确定联接条件。
例: 查询数据库源sp的spxx表和xsqk表。其中spxx表和xsqk表以内联接方式联接。
FROM sp!spxx INNER JOIN sp!xsqk ON spxx.spbh= xsqk.spbh
4. 确定查询输出去向
[[INTO Destination] / [TO FILE FileName [ADDITIVE] / TO PRINTER [PROMPT] / TO SCREEN]]
命令中的参数:
INTO Destination中Destination代表下列输出去向:
① ARRAY ArrayName: 将查询结果保存到内存变量数组中。ArrayName表示内存变量名。
② CURSOR CursorName: 将查询结果保存到临时表中。CursorName表示临时表名。
③ DBF TableName / TABLE TableName: 将查询结果保存到一数据表中。TableName是数据表名。
TO FILE FileName [ADDITIVE] / TO PRINTER [PROMPT] / TO SCREEN]: 输出到文件、打印机或屏幕。
ADDITIVE表示数据输入到文件时不删除原有数据,而是从数据后面增加记录。如果没有ADDITIVE,则数据输入到文件中时不保留原数据,原数据被新数据覆盖。
5. 筛选源表记录条件
[WHERE JoinCondition [AND JoinCondition….][AND/OR FilterCondition [AND /OR FilterCondition….]]]
命令中的参数:
FilterCondition: 筛选条件。
JoinCondition: 多表查询时的联接条件,作用同JOIN ON JoinCondition语句中的JoinCondition。
例如: 筛选员工表yg.dbf中性别为“男”的子命令: WHERE yg.xb = ″男″
6. 定义记录的分组
[GROUP BY GroupColumn [,GroupColumn…]]
GroupColumn: 分组的列或字段。
例如: 以员工表中的员工编号分组的子命令: GROUP BY yg.ygbh。
7. 指定分组满足条件
[HAVING FilterCondition UNION [ALL] SELECTCommand]
指定包含在查询结果中的组必须满足的筛选条件。
8. 指定输出记录的排序顺序
[ORDER BY Order—Item [ASC/DESE] [,Order-Item [ASC/DESC]…]]
Order—Item: 排序的字段等项目
ASC: 升序
DESE: 降序
例如: 以销售情况表中销售数量xssl字段以降序排序命令:
ORDER BY xsqk.xssl DESC
6.3.2 SELECT—SQL查询命令应用举例
SELECT—SQL查询命令比较复杂,下面通过一些例子介绍SELECT—SQL查询命令的应用。
1. 单表查询
【例6-1】查询销售商品管理数据库sp.dbc中商品信息表spxx.dbf的商品编号spbh、商品名称spmc和销售单价xsdj。
SELECT spxx.spbh, spxx.spmc, spxx.xsdj FROM sp!spxx
【例6-2】查询商品信息表spxx.dbf销售单价大于1000元的商品,输出商品编号spbh、商品名称spmc和销售单价xsdj等字段。
SELECT spxx.spbh, spxx.spmc, spxx.xsdj FROM sp!spxx ;
WHERE spxx.xsdj > 1000
【例6-3】按商品编号顺序从小到大查询商品信息表spxx.dbf的商品编号spbh、商品名称spmc和销售单价xsdj。
SELECT spxx.spbh, spxx.spmc, spxx.xsdj ;
FROM sp!spxx ORDER BY spxx.spbh
【例6-4】将库存表kc.dbf的查询输出到库存情况表kcqk.dbf中。查询的字段为: 商品编号spbh、进货日期jhrq和库存数量kcsl。
SELECT kc.spbh, kc.jhrq, kc.kcsl FROM sp!kc;
INTO TABLE kcqk.dbf
2. 多表查询
【例6-5】查询销售商品管理数据库sp.dbc的员工表yg.dbf和销售情况表xsqk.dbf的员工编号yg.ygbh、员工姓名yg.xm、销售金额xsqk.zje和销售日期xsqk.xsrq等字段。
SELECT yg.ygbh, yg.xm, xsqk.zje, xsqk.xsrq ;
FROM sp!yg INNER JOIN sp!xsqk ;
ON yg.ygbh = xsqk.ygbh
【例6-6】查询某一日销售情况表xsqk.dbf和商品信息表spxx.dbf的商品销售情况,输出字段有: 商品编号xsqk.spbh、商品名称spxx.spmc、销售单价spxx.xsdj、销售数量xsqk.xssl、总金额xsqk.zje和销售日期xsqk.xsrq等字段。
SELECT xsqk.spbh, spxx.spmc, spxx.xsdj, xsqk.xssl, xsqk.zje, xsqk.xsrq;
FROM sp!spxx INNER JOIN sp!xsqk ON spxx.spbh = xsqk.spbh;
WHERE xsqk.xsrq = {^2003/10/29}
3. 包含计算字段的查询
【例6-7】查询销售情况表xsqk.dbf中各种销售商品的总金额小计,输出为商品编号spbh、以商品编号分组统计的总金额小计。
SELECT xsqk.spbh , SUM(xsqk.zje) AS 销售金额小计 FROM sp!xsqk;
GROUP BY xsqk.spbh
【例6-8】查询销售情况表xsqk.dbf中同一种销售商品成交价最高的商品交易情况。输出字段有: 成交编号xsqk.cjbh、商品编号xsqk.spbh、以商品编号分组查找的同商品交易中最高成交金额的记录。
SELECT xsqk.cjbh, xsqk.spbh, MAX(xsqk.zje) AS 交易最高价
FROM sp!xsqk;
GROUP BY xsqk.spbh
6.4 用“视图”方法查看商品信息管理数据库
在数据库中,可以建立与“查询”相同功能的“视图”,通过“视图”从数据表中查询所需的数据信息,组成新的数据集合表存放于数据库中,所以“视图”也称为“虚表”。“视图”与“查询”很相似,在数据表的基础上,构成一组检索和计算结果。支持“视图”的数据表称为“源数据表”,也称为“基表”。“查询”不能改变源数据表中数据,而与“查询”不同的是,通过“视图”可以改变源数据表中的记录值。
“视图”是在“数据库设计器”中建立的。“视图”分为“本地视图”和“远程视图”。“本地视图”使用Visual FoxPro SQL语法从数据表或视图中选择信息;“远程视图”使用远程SQL语法从远程ODBC数据源表中选择信息。这里主要介绍“本地视图”的设计方法。
6.4.1 建立员工销售业绩情况视图
用建立“视图”的方法来构成每一员工某月的销售情况。销售情况表(xsqk.dbf)和员工表(yg.dbf)作为源数据源。建立员工销售视图的操作如下:
1. 打开“视图设计器”
“视图”是在“数据库设计器”中建立的,所以首先打开数据库:
① 打开sp商品信息管理数据库。
② 选择“数据库设计器”工具栏中的“新建本地视图”按钮或“数据库”菜单中的“新建本地视图”命令,出现“新建本地视图”对话框,单击对话框中的“新建视图”打开“视图设计器”。
视图设计器与查询设计器的结构基本相同,视图设计器如图6-21所示。打开“视图设计器”同时出现“视图设计器”工具栏和“查询”菜单,供设计视图时使用。视图的设计方法也与查询的设计方法基本一致。
2. 添加数据表
单击“视图设计器”工具栏的“添加表”按钮或“查询”菜单中的“添加表”命令,打开“添加表或视图”对话框,添加销售情况表xsqk.dbf和员工表yg.dbf。
3. 选择输出字段
在“字段”选项卡中的“可用字段”栏中选择员工编号xsqk.ygbh、姓名yg.xm、销售总值SUM(xsqk.zje)等字段。添加到“选定字段”栏中。“销售总量”通过“函数和表达式”栏设置。
4. 分组统计
按员工编号xsqk.ygbh分组进行统计的设计是通过视图设计器的“分组依据”选项卡。在“可用字段”栏中选择员工编号xsqk.ygbh添加到“分组字段”栏中,根据分组依据的设置,求总金额的和按照员工编号分组进行统计。
5. 月份的筛选
单击“筛选”选项卡,建立表达式关系: YEAR(xsqk.xsrq) =2003(年)和MONTH(xsqk.xsrq)=9(月份)。单击“字段名”栏右边的下拉箭头,出现所有的可选字段和一个“表达式”项。选择“表达式”项,在“表达式生成器”中组成YEAR(xsqk.xsrq),在“实例”栏输入要设置的年份2003,在“条件”栏中选择等于号。MONTH(xsqk.xsrq)=9表达式的设计以同样的方法设计。
6. 运行“视图”
单击工具栏中的“运行”按钮或“查询”菜单中的“运行查询”命令,运行上面设置的“视图”,得到每个员工某个月份的销售总值表,如图6-22所示。与“查询”的结果表6-10比较两个结果是相同的。
7. 更新视图与源数据表数据
在默认情况下,是不能更新视图与源数据表中的记录的。为了能更新视图与源数据表,可通过设置“更新条件”选项卡上的参数来确定。操作方法如下:
① 选择“更新条件”选项卡,如图6-23显示。
② 选择可更新的表在“表”下拉列表中选择需要更新的数据表。如员工表yg.dbf。
③ 设置关键字“字段名”列表中列出了可使用的字段,单击关键字段员工编号yg.ygbh前“钥匙”下面的位置,出现一个“√”符号,设定该字段为关键字。关键字应该在数据表的主关键字段或候补关键字段中选择。设置关键字后,如果要重新设置关键字,可单击“重置关键字”按钮后再重新设置关键字。
④ 设置可更新字段在要更新的字段即员工姓名yg.xm前面单击可更新列(笔形标志),确定字段可修改。如果要使表中的所有字段可更新,将全部字段设置成可更新的。可用“全部更新”按钮设置,但用“全部更新”不影响关键字。因为一般不会直接修改关键字段。
⑤ 更新源数据表设置了可更新字段后可以对视图进行更改,但还不能对源数据表直接更新。如需通过视图对源数据源表进行更改时,要进一步选择设置“发送SQL更新”项。
⑥ 设置“SQL WHERE 子句包括”项如果在一个多用户环境中工作,用户使用的数据表也可以被别的用户访问或修改。为了检查数据表是否被其他用户修改过,对“SQL WHERE 子句包括”进行设置。各选项的功能为:
关键字: 当源表中的关键字段被修改时,更新失败。
关键字和可更新字段: 当远程表中可更新的字段被改变时,更新失败。
关键字和已修改字段: 当在本地改变的字段在源表中被改变时,更新失败。
关键字和时间戳: 当远程表上记录的时间戳在首次检索之后被改变时,更新失败。
⑦ 设置“使用更新”项确定视图更新源表记录时使用的方法。第一项“SQL DELETE 然后 INSERT”是选删除原始记录,再插入新记录。另一项“SQL UPDATE”是直接更新已经存在的记录。
6.4.2 创建供货商参数化视图
参数化视图是根据某个参数的不同值分别查询对应的有关数据,这种视图称为参数化视图,如供货商表ghs.dbf按供货商的编号分别查看出对应每一编号的供货商情况。变化的参数是供货商编号ghs.ghsbh字段。如采用前面介绍的视图设计方法,对每个供货商编号,将建立起一个视图。表中有多个供货商,就必须建立多个相对应的视图。而参数化视图则可根据改变供货商编号获得不同的视图结果,操作和使用十分方便。供货商参数化视图的设计方法如下:
① 打开“视图设计器”,添加数据表,选择输出的字段。操作方法同前面的介绍。
② 在“筛选”选项卡中建立一个筛选关系: 字段名 = ?<提示符>。
如: ghs.ghsbh =?供货商编号,见图6-24。
③ 从“查询”菜单中选择“视图参数”,出现“视图参数”对话框,在其中定义参数名和参数类型,在“参数名”项中输入“供货商编号”,在“类型”项中选择“字符型”,如图6-25所示。
④ 运行视图。参数化视图设置完成后,每当运行该视图时,会先出现提示输入参数对话框,如图6-26所示,在对话框中输入相应的供货商编号ghsbh字段的参数值后,查询对应的视图。
用参数化视图可不需建立多个视图的情况下获得各个与参数相对应的视图。
视图建立后,对视图的使用可以视为一个数据库表,很多情况下对视图的操作与对数据库表的操作方法相同。如打开视图、修改视图和关闭视图等操作。在程序中,打开视图和关闭视图的命令与打开数据库表与关闭数据库表的命令相同。打开视图时系统在其他工作区自动打开该视图的源数据表,但关闭视图后,视图的源数据表不能随视图的关闭而自动关闭,必须另外用命令关闭数据表。
打开sp数据库的“员工销售情况”视图的命令为:
OPEN DATABASE sp
USE 员工销售情况
在打开“员工销售情况”视图的同时,系统自动打开“员工销售情况”视图的源数据表kc.dbf。
课后总结:
本章介绍数据库及自由表一个重要应用——查询和视图。查询和视图是根据用户的需要从数据库或自由表中按一定要求选择出部分数据及计算统计组成一个虚拟数据表。
Visual FoxPro 提供了查询和视图的工具: 查询设计器和视图设计器。通过查询设计器和视图设计器进行设计,使用户很方便地从数据库或自由表中检索及统计出所需要的数据。
查询(Query)是从数据库或自由表中检索或统计出所需数据。视图(View)除具有查询所有的检索、统计功能外,还可以改变视图中记录值以及源数据库或自由表的值。
作业:
第五章习题 第五章上机实验题(书写相应实验报告)

