如何学习数据分析中的SQL

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家。博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~
前言:各种和数据分析相关python库的介绍(前言1~4摘抄自《利用python进行数据分析》)
  Numpy是python科学计算的基础包,它提供以下功能(不限于此):
    (1)快速高效的多维数组对象naarray
    (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数
    (3)用于读写硬盘上基于数组的数据集的工具
    (4)线性代数运算、傅里叶变换,以及随机数生成
    (5)用于将C、C++、Fortran代码集成到python的工具
  pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
  对于金融行业的用户,pandas提供了大量适用于金融数据的高性能时间序列功能和工具。
  DataFrame是pandas的一个对象,它是一个面向列的二维表结构,且含有行标和列标。
  ps.引用一段网上的话说明DataFrame的强大之处:
  Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框&此文本包含多行文本,无法放置在一个工作表中&。Pandas处理上千万的数据是易如反掌的事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。 说了一大堆它的好处,要实际感触还得动手码代码。
3.matplotlib
  matplotlib是最流行的用于绘制数据图表的python库。
  Scipy是一组专门解决科学计算中各种标准问题域的包的集合。5.statsmodels: 各种模型
****待学习6.scikit-learn: machine learning模块,很全 ****待学习
一.数据导入和导出
(一)读取csv文件
1.本地读取
import pandas as pd
df = pd.read_csv('E:\\tips.csv')
#根据自己数据文件保存的路径填写(ps.填写路径时,单斜杠会报错,双斜杠不会,不知为何)#输出:
total_bill
sex smoker
[244 rows x 7 columns]
2.网络读取
import pandas as pd
data_url = "/mwaskom/seaborn-data/master/tips.csv" #填写url读取
df = pd.read_csv(data_url)
#输出同上,为了节省篇幅这儿就不粘贴了
3.read_csv详解
功能: Read CSV (comma-separated) file into DataFrame
read_csv(filepath_or_buffer, sep=',', dialect=None, compression='infer', doublequote=True, escapechar=None, quotechar='"', quoting=0, skipinitialspace=False, lineterminator=None, header='infer', index_col=None, names=None, prefix=None, skiprows=None, skipfooter=None, skip_footer=0, na_values=None, true_values=None, false_values=None, delimiter=None, converters=None, dtype=None, usecols=None, engine=None, delim_whitespace=False, as_recarray=False, na_filter=True, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, warn_bad_lines=True, error_bad_lines=True, keep_default_na=True, thousands=None, comment=None, decimal='.', parse_dates=False, keep_date_col=False, dayfirst=False, date_parser=None, memory_map=False, float_precision=None, nrows=None, iterator=False, chunksize=None, verbose=False, encoding=None, squeeze=False, mangle_dupe_cols=True, tupleize_cols=False, infer_datetime_format=False, skip_blank_lines=True)
参数详解:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
(二)读取Mysql数据
  假设数据库安装在本地,用户名为myusername,密码为mypassword,要读取mydb数据库中的数据
import pandas as pd
import MySQLdb
mysql_cn= MySQLdb.connect(host='localhost', port=3306,user='myusername', passwd='mypassword', db='mydb')
df = pd.read_sql('select *', con=mysql_cn)
mysql_cn.close()
上面的代码读取了test表中所有的数据到df中,而df的数据结构为Dataframe。
ps.MySQL教程:/mysql/mysql-tutorial.html
(三)读取excel文件
要读取excel文件还需要安装xlrd模块,pip install xlrd即可。
df = pd.read_excel('E:\\tips.xls')
(四)数据导出到csv文件
df.to_csv('E:\\demo.csv', encoding='utf-8', index=False)
#index=False表示导出时去掉行名称,如果数据中含有中文,一般encoding指定为&utf-8&
&(五)读写SQL数据库
import pandas as pd
import sqlite3
con = sqlite3.connect('...')
sql = '...'
df=pd.read_sql(sql,con)
help(sqlite3.connect)
Help on built-in function connect in module _sqlite3:
connect(...)
connect(database[, timeout, isolation_level, detect_types, factory])
Opens a connection to the SQLite database file *database*. You can use
":memory:" to open a database connection to a database that resides in
RAM instead of on disk.
#############
help(pd.read_sql)
Help on function read_sql in module pandas.io.sql:
read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
Read SQL query or database table into a DataFrame.
ps.数据库的代码是我直接从网络上粘贴过来的,没有测试过是不是可行,先贴上来。
&&& 数据库我还在摸索中,学习心得学习笔记之类的大家可以一起分享23333~
二.提取和筛选需要的数据
(一)提取和查看相应数据 (用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
print df.head() #打印数据前五行#输出
total_bill
sex smoker
print df.tail()
#打印数据后5行
total_bill
sex smoker
print df.columns
Index([u'total_bill', u'tip', u'sex', u'smoker', u'day', u'time', u'size'], dtype='object')
print df.index
Int64Index([
234, 235, 236, 237, 238, 239, 240, 241, 242, 243],
dtype='int64', length=244)
print df.ix[10:20, 0:3]
#打印10~20行前三列数据
total_bill
#提取不连续行和列的数据,这个例子提取的是第1,3,5行,第2,4列的数据
df.iloc[[1,3,5],[2,4]]
#专门提取某一个数据,这个例子提取的是第三行,第二列数据(默认从0开始算哈)
df.iat[3,2]
print df.drop(df.columns[1, 2], axis = 1) #舍弃数据前两列
print df.drop(df.columns[[1, 2]], axis = 0) #舍弃数据前两行
#为了节省篇幅结果就不贴出来了哈~
print df.shape #打印维度
df.iloc[3] #选取第3行
total_bill
Name: 3, dtype: object
df.iloc[2:4] #选取第2到第3行
total_bill
sex smoker
df.iloc[0,1] #选取第0行1列的元素
(二)筛选出需要的数据(用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
#example:假设我们要筛选出小费大于$8的数据
df[df.tip&8]
total_bill
sex smoker
#数据筛选同样可以用&或&和&且&作为筛选条件,比如
df[(df.tip&7)|(df.total_bill&50)] #筛选出小费大于$7或总账单大于$50的数据
total_bill
sex smoker
df[(df.tip&7)&(df.total_bill&50)]#筛选出小费大于$7且总账单大于$50的数据
total_bill
sex smoker
#假如加入了筛选条件后,我们只关心day和time
df[['day','time']][(df.tip&7)|(df.total_bill&50)]
三.统计描述(用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
print df.describe() #描述性统计
各指标都比较简单就不解释了哈
total_bill
244.4.4.000000
四.数据处理(一)数据转置(用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
print df.T
total_bill
total_bill
total_bill
[7 rows x 244 columns]
&(二)数据排序(用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
df.sort_values(by='tip')
#按tip列升序排序
#输出(为了不占篇幅我简化了一部分)
total_bill
sex smoker
[244 rows x 7 columns]
(三)缺失值处理1.填充缺失值(数据来自《利用python进行数据分析》第二章 usagov_bitly_data-.txt,需要的同学可以找我要)
import json
#python有许多内置或第三方模块可以将JSON字符串转换成python字典对象
import pandas as pd
import numpy as np
from pandas import DataFrame
path = 'F:\PycharmProjects\pydata-book-master\ch02\usagov_bitly_data-.txt' #根据自己的路径填写
records = [json.loads(line) for line in open(path)]
frame = DataFrame(records)
frame['tz']
#输出(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
从以上输出值可以看出数据存在未知或缺失值,接着咱们来处理缺失值。
print frame['tz'].fillna(1)
#以数字代替缺失值
#输出结果(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
print frame['tz'].fillna('YuJie3') #用字符串代替缺失值
#输出(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
print frame['tz'].fillna(method='pad') #用前一个数据代替缺失值
print frame['tz'].fillna(method='bfill') #用后一个数据代替缺失值
2.删除缺失值 (数据同上)
print frame['tz'].dropna(axis=0) #删除缺失行
print frame['tz'].dropna(axis=1) #删除缺失列
3.插值法填补缺失值
由于没有数据,这儿插播一个小知识点:创建一个随机的数据框
import pandas as pd
import numpy as np
#创建一个6*4的数据框,randn函数用于创建随机数
czf_data = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
0....818982
0....493502
2 -0....223771
0....199428
0....363640
5 -1....546152
好啦,数据就出来了。接着我们用空值替换数值,创造出一个含有空值的DataFrame。
#把第二列数据设置为缺失值
czf_data.ix[2,:]=np.nan
0....818982
0....493502
0....199428
0....363640
5 -1....546152
#接着就可以利用插值法填补空缺值了~
print czf_data.interpolate()
0....818982
0....493502
0....846465
0....199428
0....363640
5 -1....546152
&(四)数据分组(用的是tips.csv的数据,数据来源:/mwaskom/seaborn-data)
group = df.groupby('day')
#按day这一列进行分组
print group.first()#打印每一组的第一行数据
total_bill
sex smoker
print group.last()#打印每一组的最后一行数据
total_bill
sex smoker
(五)值替换
import pandas as pd
import numpy as np
#首先创造一个Series(没有数据情况下的福音233)
Series = pd.Series([0,1,2,3,4,5])
dtype: int64
#数值替换,例如将0换成00
print Series.replace(0,00)
dtype: int64
#列和列的替换同理
print Series.replace([0,1,2,3,4,5],[,44,])
dtype: int64
五.统计分析
1.独立样本t检验
两独立样本t检验就是根据样本数据对两个样本来自的两独立总体的均值是否有显著差异进行推断;进行两独立样本t检验的条件是,两样本的总体相互独立且符合正态分布。
开始找不到合适的数据,我就在网上随便摘抄了个spss做独立样本t检验的实例数据作为例子大家暂时看着吧找到合适的例子再给大家举~
数据如下,我将数据保存为本地xlsx格式:
import pandas as pd
from scipy.stats import ttest_ind
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
print ttest_ind(Group1,Group2)
输出结果的第一个元素为t值,第二个元素为p-value
ttest_ind默认两组数据方差齐性的,如果想要设置默认方差不齐,可以设置equal_var=False
print ttest_ind(Group1,Group2,equal_var=True)
print ttest_ind(Group1,Group2,equal_var=False)
2.配对样本t检验
同样找不到数据,让我们暂且假设上边独立样本是配对样本吧,使用同样的数据。
import pandas as pd
from scipy.stats import ttest_rel
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
print ttest_rel(Group1,Group2)
同样的,输出结果的第一个元素为t值,第二个元素为p-value。
&(二)方差分析
1.单因素方差分析
这里依然沿用t检验的数据
import pandas as pd
from scipy import stats
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
w,p = stats.levene(*args)
#levene方差齐性检验。levene(*args, **kwds)
Perform Levene test for equal variances.如果p&0.05,则方差不齐
#进行方差分析
f,p = stats.f_oneway(*args)
(0..65535)
2.多因素方差分析
&&& 数据是我从网上找的多因素方差分析的一个例子,研究区组和营养素对体重的影响。我做成了excel文件,需要的同学可以问我要哈~做多因素方差分析需要加载statsmodels模块,如果电脑没有安装可以pip install一下。
import pandas as pd
MANOVA=pd.read_excel('E:\\MANOVA.xlsx')
#输出(为了节省篇幅删掉了中间部分的输出结果)
.......................
#多因素方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
formula = 'weight~C(id)+C(nutrient)+C(id):C(nutrient)'
anova_results = anova_lm(ols(formula,MANOVA).fit())
print anova_results
339.087619
C(nutrient)
C(id):C(nutrient)
也许数据选得不对,p-value全是空值23333,待我找个好点儿的数据再做一次多因素方差分析。
3.重复测量设计的方差分析(单因素)&& ********待完善
重复测量设计是对同一因变量进行重复测度,重复测量设计的方差分析可以是同一条件下进行的重复测度,也可以是不同条件下的重复测量。
代码和多因素方差分析一样,思路不一样而已~但我还找不到多因素方差分析合适的数据所以这儿就先不写了2333
&4.混合设计的方差分析&& ********待完善
#########统计学学得好的同学们,教教我吧。。
(三)卡方检验
  卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。(from 百度百科2333)
1.单因素卡方检验
数据源于网络,男女化妆与不化妆人数的理论值与实际值。
import numpy as np
from scipy import stats
from scipy.stats import chisquare
observed = np.array([15,95])
#观测值:110学生中化妆的女生95人,化妆的男生15人
expected = np.array([55,55])
#理论值:110学生中化妆的女生55人,化妆的男生55人
chisquare(observed,expected)
(58.18, 2.044e-14)
2.多因素卡方检验*****正在研究中,学会了完善这一块~
&(四)计数统计(用的数据为tips.csv)
#example:统计性别
count = df['sex'].value_counts()
print count
Name: sex, dtype: int64
(五)回归分析& *****待学习: 数据拟合,广义线性回归。。。。等等
  我觉得吧,其实看着excel就可以实现的功能为何那么复杂,excel确实够通用够便捷,但是处理很大数据量的话也许吃不消吧。学学python绘图也不赖,而且讲真,有的成效真的挺好看的。
(一)Seaborn
我学数据分析可视化是从学习Seaborn入门的,Seaborn是基于matplotlib的Python可视化库,刚开始便接触matplotlib难免有些吃力,参数多且难理解,但是慢慢来总会学会的。还有关键的一点是,seaborn画出来的图好好看。。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
#小费数据真的挺好的,这儿用tips作为example
tips = sns.load_dataset('tips') #从网络环境导入数据tips
1.lmplot函数
lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers='o', sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)功能:Plot data and regression model fits across a FacetGrid.&
下面就不同的例子,对lmplot的参数进行解释
例子1.& 画出总账单和小费回归关系图
用到了lmplot(x, y, data,scatter_kws)
x,y,data一目了然这儿就不多解释了,scatter_kws和line_kws的官方解释如下:
{scatter,line}_kws : dictionarie
Additional keyword arguments to pass to plt.scatter and
scatter为点,line为线。其实就是用字典去限定点和线的各种属性,如例子所示,散点的颜色为灰石色,线条的颜色为印度红,成像效果就是这样点线颜色分离,展现效果很好。大家也可以换上自己想要的图片属性。
sns.lmplot("total_bill", "tip", tips,
scatter_kws={"marker": ".", "color": "slategray"},
line_kws={"linewidth": 1, "color": "indianred"}).savefig('picture2')
另外:颜色还可以使用RGB代码,具体对照表可以参考这个网站,可以自己搭配颜色:
/other/rgb.htm
marker也可以有多种样式,具体如下:
.& Point marker
,& Pixel marker
o& Circle marker
v& Triangle down marker
^& Triangle up marker
&& Triangle left marker
&& Triangle right marker
1& Tripod down marker
2& Tripod up marker
3& Tripod left marker
4& Tripod right marker
s& Square marker
p& Pentagon marker
*& Star marker
h& Hexagon marker
H& Rotated hexagon D Diamond marker
d& Thin diamond marker
| Vertical line (vlinesymbol) marker
_& Horizontal line (hline symbol) marker
+& Plus marker
x& Cross (x) marker
sns.lmplot("total_bill", "tip", tips,
scatter_kws={"marker": ".","color":"#FF7F00"},
line_kws={"linewidth": 1, "color": "#BF3EFF"}).savefig('s1')ps.我修改maker属性不成功不知为何,求解答
例子2.用餐人数(size)和小费(tip)的关系图
官方解释:
x_estimator : callable that maps vector -& scalar, optional
Apply this function to each unique value of x and plot the resulting estimate. This is useful when x is a discrete variable. If x_ci is not None, this estimate will be bootstrapped and a confidence interval will be drawn.
大概解释就是:对拥有相同x水平的y值进行映射
plt.figure()
sns.lmplot('size', 'tip', tips, x_estimator= np.mean).savefig('picture3')
{x,y}_jitter : floats, optional
Add uniform random noise of this size to either the x or y variables. The noise is added to a copy of the data after fitting the regression, and only influences the look of the scatterplot. This can be helpful when plotting variables that take discrete values.
jitter是个很有意思的参数, 特别是处理靶数据的overlapping过于严重的情况时, 通过增加一定程度的噪声(noise)实现数据的区隔化, 这样原始数据是若干 点簇 变成一系列密集邻近的点群. 另外, 有的人会经常将 rug 与 jitter 结合使用. 这依人吧.对于横轴取离散水平的时候, 用x_jitter可以让数据点发生水平的扰动.但扰动的幅度不宜过大。
sns.lmplot('size', 'tip', tips, x_jitter=.15).savefig('picture4')
seaborn还可以做出xkcd风格的图片,还挺有意思的
with plt.xkcd():
sns.color_palette('husl', 8)
sns.set_context('paper')
sns.lmplot(x='total_bill', y='tip', data=tips, ci=65).savefig('picture1')
with plt.xkcd():
sns.lmplot('total_bill', 'tip', data=tips, hue='day')
plt.xlabel('hue = day')
plt.savefig('picture5')
with plt.xkcd():
sns.lmplot('total_bill', 'tip', data=tips, hue='smoker')
plt.xlabel('hue = smoker')
plt.savefig('picture6')
sns.set_style('dark')
sns.set_context('talk')
sns.lmplot('size', 'total_bill', tips, order=2)
plt.title('# poly order = 2')
plt.savefig('picture7')
plt.figure()
sns.lmplot('size', 'total_bill', tips, order=3)
plt.title('# poly order = 3')
plt.savefig('picture8')
sns.jointplot("total_bill", "tip", tips).savefig('picture9')
(二)matplotlib ********待完善
让Python直接调用R的函数,下载安装rpy2模块即可~
具体步骤:/posts/python-%E9%80%9A%E8%BF%87rpy2%E8%B0%83%E7%94%A8-r%E8%AF%AD%E8%A8%80/
亲测可用~ 大大大大大前提:电脑上安装了R
(二)ipython ********待完善
阅读(...) 评论()浅谈数据分析中的SQL
很久没写东西了,正好群里有童鞋最近要换工作,提到有关数据库方面的问题,个人认为,做数据分析的并没有必要把数据库开发之类的弄懂,你只需要从相应的数据库中调用你需要的数据即可,至于数据库设计相关的安全事务,开发之类的问题那是数据库工程师的事情,而作数据分析的你了解SQL语言即可。当然,谁都不会嫌自己的知识多,掌握的东西越多对自己的发展当然也就越有利。&
&&&&了解SQL的必要性
俗话说“巧妇难为无米之炊”,没有数据怎么分析。而SQL对于你来说就好比电脑的键盘鼠标,虽说没有了它也能照常运行,但对使用它的人来说灵活性却下降了许多。而这一点也正是许多数据分析从业者所缺少的(包括我),记得白鸦曾在他的博客中发表过数据分析师很少的言论。不管数据分析师在什么样的团队,其所起的作用都是统计和调查,数据挖掘、可行性及策略分析等类似的功能。真正的数据分析师,或者能达到企业期望要求的数据分析师为什么凤毛麟角。为什么满足企业要求的数据分析师凤毛麟角,其中一个主要的原因就是学统计的人不会数据库,而学计算机的同学不会建模分析。
SQL使得数据的采集过程变得更加方便快捷,此处的方便快捷可以从2方面得以体现,1.在分析数据时候不必再苦苦请求其他同事,自己需要什么数据自己直接去导,而不再是从别人手中接过譬如.xls或.csv之类的数据文档;2.便捷快速的清洗出自己所需要的原始数据,譬如你需要的是每个月销售额排名前20的产品相关数据,这时你就可以直接从数据库导出数据时来完成数据筛选的过程,而不是傻傻的导出所有产品销售数据再进行二次处理。关于如何利用SPSS从数据库中挑选自己所需要的数据参见Syntax代码旅途。此外,在EXCEL的多表操作中也涉及相关SQL语句,如数据透视表的应用等。
&&SQL查询相关小技巧&
·使用AND时,将不为真的条件放在前面
&&&&数据库系统遵循运算符的优先级,并且运算过程是从左至右的,将条件不为真的放在前面,则能够省去and后面的相关运算,以达到减少数据库系统运算工作量的目的,提高工作效率。
·使用OR运算符时,则将最可能为真的条件放在前面
&和上面and的原理类似,and运算符要求两边条件都为真,整个条件才为真,而or只需要一边为真,将条件为真的放在前面可使or运算符不需要检查右边的条件,从而节约时间,提高工作效率。
·distinct比group
&distinct和group
by通常起限制结果为唯一的记录行的作用,处理此类问题时distinct往往比group by更加迅速。
·限制联合的结果
从数据库中提取的信息量越少,速度也就越快,而加适当的限制条件除了满足自身的需求之外,另外一个原因就是为了加快处理查询速度。e.g:
&&select var1, var2 from
table1 inner join table2 on table1.id=table2.id where
·对子查询使用in运算符
&&在子查询过程中,运用select语句往往会使数据库系统考虑更多的东西,从而降低工作效率,相比较而言,运用in运算符则可以有效的解决这个问题。e.g:下面的子查询中第1句将比第2句更加有效
&&select var1, var2 from
table1 where var1 in (select var1 from table2 where condition);
&&select var1, var2 from
table1 where var1=(select var1 from table2 where condition) ;
·尽量避免使用select *
指定确定的列可以让你清楚的了解你所需要采集的变量,利用select *
from不只是效率低下,更不利于你的后续分析,所以对于select * from则是能避免则尽量避免。
·对整数类型列进行搜索
这类问题主要针对字符变量的查询而言,对应的字符变量如果有相应的编码对应,直接将编码设置为查询条件将比直接查询字符变量来得更加迅速。
&数据采集中常用的SQL语句
相同的SQL语句运用到不同数据库中会有略微的差别,对字符变量的要求,相关函数的变化,以及语法规则的不同等等,
1.&抽取非重复数据
select distinct var1 from tableN
2.&抽取某个时间段间的数据
select var1,var2 from 数据表 where 字段名 between 时间1 and
3. 连接多个变量
select '123'+cast(456 as varchar);
select '123'+cast(456 as varchar)+'789';
4. 用SQL语句找出表名为Table1中的处在ID字段中1-200条记录中Name字段包含w的所有记录
select&*&from&Table1&where&id&between&1&and&200&and&Name&like&'%w%';&&
5. 找出拥有超过10名客户的地区的列表
select&country&from&test&group&by&country&having&count(customerId)&10;&
6. 关于取出每个部门工资最高的前三人
select&*&from&table
t&where&工资&in&(select&top&3&工资&from&table&where&部门&=&t.部门&order&by&工资&desc);
7. 两个结构完全相同的表a和b,主键为index,使用SQL语句,把a表中存在但在b表中不存在的数据插入的b表中
insert&into&b&select&*&from&a&where&not&exists(select&*&from&b&where&"index"=a."index");&&&
8.从一个数据库中的多个数据表提取相关变量
Select table1.var1,table2.var2,table2.var3,
From table1 inner join table2
On tabel1.var1=table2.var1
Inner join table3
On tabel1.var2=table3.var2
(order by ……)
&&PS:关于SQL查询语句还有很多很多,本人最近也在学习这方面的知识,今天最后一天班,马上就5.1放假了,大家节日快乐!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信