数据蛙数据分析每周作业小秩学数据分析

小白学SQL(1)

2018-12-11  本文已影响14人  Lykit01

这篇文章是2018/3/22发在我公众号上的文章,是我第一次学习sql时的笔记。那时我在上方言分析课,老师教我们用手工操作的方法去使用access。他说他年纪大了,学不了代码了。我们年轻人可以学,于是我开始学习sql。原文标题《方言语料分析课使用sql的笔记(一)》

Access所有的功能都可以用手工操作完成,但是有的操作比较繁琐,容易出错,学会简单的sql语句,可以非常方便地使用这些常用功能。

我也是小白,从0学起的~这些常用功能的实现代码不止一种,这里只举我们常用的一些语句以及简单实现方法,举例尽量贴近我们的使用。

要写代码需要编辑器,所以要先新建一个查询,用如何表建立查询都行,之后用代码实现查询,不仅可以查询这个表,还可以查询其他表格,我们只需要这个编辑器就够了。

可以看到屏幕右下角有三个快捷键,分别是数据表视图、sql视图和设计视图。手工操作就是在设计视图。Sql视图就是编辑器。

注意几点(不好归类,就写在这了):

1.写好代码后要点:设计——运行,这样才会生成结果。或者直接点击数据表视图生成代码运行的结果;直接点的方法有时候不适用,最好还是点运行。

2.sql对大小写不敏感;

3.access的id列是自动更新的,表中的每条记录都有唯一的数字。删除了某一行系统不会重新排序,这行的这个唯一的数字就空缺了。

一、按条件筛选

1要确定筛选的范围

格式:Select 列名,列名from 表名;

表和它所属的列之间用英文点号隔开,只涉及一个表时可以省略表名。多个列时用逗号隔开。

如:select 方言调查字表.gs,方言调查字表.gy from 方言调查字表

也可以是:select gs,gy from方言调查字表

Select * from 表名; 表示选取所有列

小技巧:在表中,一个列可能会包含多个重复值,有时可能希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。

我们可以用这个特性返回我们调查的声韵调系统:

返回所有的声母:select distinct fs from 方言调查字表

返回不重复的音节种数:select distinct fs,fy,fd from 方言调查字表

2确定筛选条件

格式:where 条件;

注意where是子句,可以不写,不能单独存在,之前必须有语句:Select 列数 from 表名

注意整个句子只能有一个结句符号“;”

1) 运算符

运算符

2)逻辑运算

逻辑运算符

运算符优先级:()>not>and>or

举例:select * from 方言调查字表 where gs=”並” and bs=”ph” and gd<>”平”;

找出普通话中今读送气的中古並母仄声字。

3)通配符

通配符含义

A*,以A开头的

A,包含A的

*A??,A为倒数第三个的

举例:select * from 方言调查字表 where gy like”?开??”;

找出广韵中所有开口字

4)特殊条件

不用where,而是用以下表达式:

select top 50 percent * from

方言调查字表;选取这个表前50%的记录

Select top 5 * from 表;选取这个表前5条记录

3对结果进行排序

语法:order by 列名,列名(ASC/DESC);

列名后省略ASC/DESC不写或者只写ASC表示按照顺序排序

只写DESC表示按照降序排序

当对多列进行排序时,先按照列1排列,再在列1相同的行中按照列2的值排序。

注意:order也是子句,可以不写。

举例:select * from 方言调查字表 where gy like”?开??” order by gs,gd ASC;

找出广韵中所有开口字并对结果按照中古声母和声调排序。

二、对表进行更新

1. 插入一行,即增加一行数据

格式:insert into 表 (列1,列2,列3……)values (值1,值2,值3……)

注意:这里的括号不是可以省略的意思,是要加的,不过列是可以省略的。没有指定要插入数据的列名的形式需要列出插入行的每一列数据。

举例:INSERT INTO 声母 (

gs, gz, gx, qz ) values("帮","帮组","帮系","qc");

注意:插入后可能原表没有更新,需要把原表关了再打开。Access对sql支持不完整,不能同时插入多行,还是手工输入比较好。

2. 更新,即改变原来的值

格式:UPDATE 表名SET 列1=值1,列2=值2,... WHERE 列=值;

注意:这里的where列=值是条件,这里的列可以是列1、列2…where子句也是可以不写的,但是这样默认整张表都会被更新,要非常小心。

举例: update 声母 set

qz="全清" where qz="qq";

3. 删除

格式:delete from 表名where 列=值;

注意:这里的where子句也是可以不写的,此时所有记录将被删除;

举例:delete from 声母where qz="qq";

4. 复制,将一个表的内容复制到一个新表

格式:Select * into 新表from 旧表

注意:一般语句中加了into,都是生成新表

三、关联/连接多个表格

格式:(关联两个表)

Select 列1,列2…… from 表1 inner/left/right/full join 表2 on 表1.列=表2.列

注意:列1,列2……表示显示的范围,inner/left/right/full表示关联的类型,on后是判定条件


关联

遇到超过2个表的关联,需要嵌套,即加括号,括号中是一个join语句:

三个表关联:

Select (列1,列2…… from 表1 inner/left/right/full join 表2 on 表1.列=表2.列)inner/left/right/full join 表3 on 表1.列=表3.列

四个、五个依次类推。

举例:

(关联方言调查字表和gs)

SELECT 方言调查字表.hz,方言调查字表.gs,方言调查字表.gy,方言调查字表.gd,方言调查字表.bs,方言调查字表.by,方言调查字表.bd,gs.gsx,gs.xi,gs.zu,gs.qz

FROM 方言调查字表

left join gs

on 方言调查字表.gs=gs.gs

order by 方言调查字表.gs;

(关联方言调查字表和gs还有另一个表symbol)

SELECT 方言调查字表.hz, 方言调查字表.gs, 方言调查字表.gy, 方言调查字表.gd, 方言调查字表.bs, 方言调查字表.by, 方言调查字表.bd, gs.gsx, gs.xi, gs.zu, gs.qz,

symbol.num INTO 调查字表新

FROM (方言调查字表 LEFT

JOIN gs ON 方言调查字表.gs = gs.gs) LEFT JOIN symbol ON 方言调查字表.gs = symbol.gs

ORDER BY 方言调查字表.gs;

注意:这只是实现了“查询”功能,即没有生成新表,如果要把关联后的表生成新表,需要在from前加上into 新表名,即:

格式:Select 列1,列2…… into 新表名 from 表1

inner/left/right/full join 表2 on 表1.列=表2.列

举例:SELECT 方言调查字表.hz,方言调查字表.gs, 方言调查字表.gy, 方言调查字表.gd, 方言调查字表.bs, 方言调查字表.by, 方言调查字表.bd, gs.gsx, gs.xi, gs.zu, gs.qz INTO调查字表新

FROM 方言调查字表 LEFT

JOIN gs ON 方言调查字表.gs = gs.gs

ORDER BY 方言调查字表.gs;

四、不那么常用的功能

(我们用不着的功能我就不写了,这几个勉强用得到)

1. 同时执行多条select语句

用union连接。

格式:select 列1,列2 from 表1 union [all] 列1,列2 from 表2

注意:1.UNION 内部的每个SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同;2. 默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL;3. UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

2. 别名

格式:select 列1 as 别名1,列2 as 别名2,…… from表[as 别名];

别名实际上是为列或者表指定一个便于识别的别名。

举例:SELECT gs as 广韵声母,gy as 广韵韵母 from 调查字表新 as new;

3. 删除表格

在表的视图右键删除就可以,不过用语句也可以。

格式:drop table 表名;

举例:drop table 调查字表新;

这次就写到这!

参考网站:http://www.runoob.com/sql/sql-tutorial.html

有些内容我在网上搜了然后总结的,例子是我自己举的,仅供参考。

上一篇下一篇

猜你喜欢

热点阅读