小白学SQL(1)
这篇文章是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
有些内容我在网上搜了然后总结的,例子是我自己举的,仅供参考。