561 阅读 2021-07-05 10:02:13 上传
以下文章来源于 语料数据库

在这个大数据的时代, 相信“数据库”再也不是陌生的词汇,它已经广泛出现在我们生活的方方面面。在学校图书馆借阅书籍,在自习室预定座位,背后都有数据库的支持。
SQL 是一种最常见的数据库语言, 能够有效提升数据管理和问询的效率。废话不多说,今天,就让我们从零开始,了解和应用 SQL, 并为以后对数据库管理和开发的学习打下基础吧。

为了使用 SQL, 我们需要某种工具来编写语句,这里我用的是SQLite DB Browser,界面如下图。

1.
什么是 SQL?
什么是 SQL
SQL 是“结构化查询语言(Structured Query Language)”的缩写,是一个关系数据库语言。SQL 语句有几个构成要素。
首先是语句。
在 SQL 中,通过输入语句可以在数据库中获取或更改信息,其中空格和空行不会影响 SQL 语句的意义,因此在使用者通常会添加一些空格或空行进行分区,来使代码更加清晰易懂。
子句是 SQL 语句的基本组成部分, 其中关键字告诉数据库要进行什么操作,字段名告诉数据库在哪里查找,以及查找什么,谓词用来明确进行操作的具体信息,包含值或条件的谓词,通常叫做表达式(比如“ 成绩 = ‘100’ ”)。
一般情况下, SQL 语句是不区分大小写的。操作时为了清楚辨关键字和字段,会将关键词字母全大写(比如“SELECT”、“FROM”)。一个语句的结尾会放一个分号,来表示一个语句的结束。
2.
如何从数据库中获取数据?
1)SELECT 语句
1)SELECT 语句
查询数据库使用的 SQL 语句是 SELECT 语句。
语法:SELECT 列名称 FROM 表名称
列名称是指你想要获取哪一列的数据,表名称是指希望从哪个表中获取数据。(e.g. SELECT 性别 FROM 表一)
如想获取两个字段的信息, 比如“性别”和“年龄”, 我们需要在两个字段中间, 添加英文的逗号,来请求多个字段。(e.g. SELECT 性别 FROM 表一)
如想获取所有的字段信息, 可以使用通配符,也就是*, 来表示表中所有的字段。(e.g. SELECT * FROM 表一)
SELECT 是一个友好的查询数据的方式,因为它不会改变数据库中任何的信息,在使用时不需有任何担心和顾虑
2)WHERE 语句
2)WHERE 语句
SELECT 语句能够获取表中的某一列或者多个列中的所有信息,然而通常我们并不需要获取整列的信息,而是希望只筛选出有用的信息。这时,WHERE 子句就可以来设置查询条件。
比如,我们想查询: 表一中满足性别是“女”的记录信息。输入"SELECT * FROM 人员 WHERE 性别 ='女'”。注意使用英文单引号。这样就筛选出了 “性别”这一列的值为'女'的数据。
需要注意的是, 如果列名称中包含了特殊字符, 需要添加双引号。(比如, 某一列名为: 乙肝Y/N, 我们想筛选出乙肝患者, 则需要这样输入子句: WHERE “乙肝Y/N” = 'Y')。
另外需要注意的是, WHERE 这类子句需要按照顺序工作,因此如果把 WHERE 子句, 放在 FROM 语句前面,将有错误提示。
3)为语句添加多个条件
3)为语句添加多个条件
在一个以上的条件下进行数据筛选时,通常使用AND 或者 OR运算符。这些运算符可以在WHERE 子句中,把多个条件结合起来。
比如,我们想在表一中查找: 性别为“女”的每个人的姓名 ,以及谁患乙肝。我们可以输入:
SELECT 姓名
FROM 表一
WHERE 性别=‘女’ AND “乙肝(Y/N)” = ‘Y‘ ;
这里的“=”也可以用“IS”来代替,结果是一样的。同样,“!=”也可以用“IS NOT“来代替。
需要注意的是,有 AND 条件时, 会优先匹配“AND”左右两边的条件, 再匹配“OR”的条件。因此,我们需要视情况添加圆括号来限定条件执行的顺序。
比如,我们希望筛选出来自苏和沪的乙肝患者姓名,输入:
SELECT 姓名
FROM 表一
WHERE 户籍 = ’苏‘ OR 户籍 = ’沪‘ AND “乙肝(Y/N)” = ‘Y‘
这样,在WHERE子句中会先匹配AND左右两边的条件,而得到非期望的查询结果。因此,需要加圆括号来限定:
WHERE (户籍 = ’苏‘ OR 户籍 = ’沪‘) AND “乙肝(Y/N)” = ‘Y‘
4)LIKE 运算符
4)LIKE 运算符
LIKE 运算符通常与%(通配符)一起使用,来匹配通配符指定模式的文本值。
假设需要查找的文本为“k”
WHERE 列名 like ‘%k’ ——查找以“k”为结尾的任意值;
WHERE 列名 like ‘k%’ ——查找以“k”为开头的任意值;
WHERE 列名 like ‘%k%’ ——查找包含“k”的任意值。
比如,想查找表一中, 哪些人姓“刘”。那么可以输入:
SELECT姓名
FROM 表一
WHERE 姓名 LIKE '刘%' ;
5)LIMIT子句
5)LIMIT子句
通常我们会根据实际需求, 希望能够针对这个结果,限制返回的数量。LIMIT可以限制返回的行数。
比如在上述条件下,我们只想返回前十行数据:
SELECT姓名
FROM 表一
WHERE 姓名 LIKE '刘%'
LIMIT 10 ;
如果想实现特定范围,比如以第 4 行为参考点, 统计从第 5 行开始的 5 行数据,就要用到 LIMIT OFFSET,语法:
LIMIT 数字1, OFFSET 数字2
其中,数字1 指取多少行数据, 数字2 指跳过多少行数据。
在SQLite中,还可以省略“OFFSET”。在LIMIT后直接传入两个数字参数。第一个参数表示跳过多少行;第二个参数表示取多少行的数据。
6)ORDER BY 子句
6)ORDER BY 子句
查询语句获取到的数据,通常并不是按照想要的顺序显示的。因此需要结合 ORDER BY 语句,对结果进行排序。
语法: ORDER BY 列名称
意思是按照指定的列的值进行排序。
默认的情况下, ORDER BY 是按照升序排列。
ORDER BY 列名称 ASC ——升序
ORDER BY 列名称 DESC ——降序
比如,我们想从表一中, 获取“姓名”和“户籍”的数据信息,并且希望“户籍”按照升序进行排序的,即从“NULL”然后是“A”, 一直到最后是“Z”,那么输入:
SELECT 姓名, 户籍
FROM 表一
ORDER BY 户籍;
如果希望降序,那就在后面加上DESC:
ORDER BY 户籍 DESC
这样的结果就是,“Z”在最上面, 然后往下直到“A”,最后是“NULL”
7)其他数据信息查找
7)其他数据信息查找
一般使用 SELECT 语句, 获得的数据都比较多,因此会进一步筛选一些数据。
LENGTH 函数
比如,想进一步查看人员名字的长度,那么需要使用 LENGTH 函数,能够返回文本字段中值的长度。
SELECT 名, LENGTH(名)
FROM 表一;
这样,我们就可以看到,“上官婉儿”有4个字符长,“李明”是2个字符长。
DISTINCT 函数
再比如,表一名单中有500行记录,可能有很多重名的, 如果只想列出不同的值。那么可以使用 DISTINCT 函数, 来返回唯一不同的值。
SELECT DISTINCT(名)
FROM 表一;
这样,显示的都是不重名的名字列表,每一个名字都是唯一项。
COUNT 函数
如果想根据指定的条件,来计算有多少记录符合条件,那么可以使用 COUNT 函数,返回匹配指定条件的行数。
向 COUNT 函数传入一个列名称,其会返回这一列的总行数。其结合 WHERE 函数, 能快速得出有多少符合条件的行。
比如,我们希望从数据库中查询, 表一中有多少人户籍为“沪”,输入:
SELECT COUNT(*)
FROM 表一
WHERE 户籍 = ’沪‘;
因为 COUNT 函数直接给出匹配条件的行数,因此我们不再需要指定一个特定的字段,只需关心返回的数值即可。









