SQL必知必会讲解
一、基础类
首先,要先知道一下什么是数据库。
数据库:是一个以某种有组织的方式存储的数据集合。
也可以说保存有组织的数据的容器通常是一个文件或一组文件。当然,要注意的一点是“数据库”这个术语并不可以用来代表他们使用的数据库软件,确切的说,数据库软件应该称为数据库管理系统(DBMS)。
表:某种特定类型数据的结构化清单。
表名在数据库是唯一的,也就是说在同一个数据库中不能连续使用两次相同的表名,但是在不同的数据库中完全可以使用相同的表名。而每个表则是由列组成的,列存储表中的某部分信息也就是俗称的字段。
列:表中的一个字段,所有表都是由一个列或者多个列组成的。
在数据库中,每个列都有相应的数据类型,每个表列都有相应的数据类型,它限制(或允许)该列中数据的存储。(数据类型及其名称是SQL不兼容的一个主要原因,这块一定要注意,在使用某种数据库的时候一定要先查询好。)
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。因此:行是表中的一个记录。
表中每一行都应该有一列(或几列)可以唯一标记自己,而这就是主键
主键:一列(或一组列),其值能够唯一标识表中每一行。
虽然并不总是需要主键,但是多数数据库设计者都会保证他们创建的每个表具有一个主键,以便于以后的数据操作和管理,因此应该总是定义主键。
二、数据检索
SELECT语句应该是最常用的语句,它的用途是从一个或多个表中检索信息。而使用SELECT必须至少给出两个条件:
想选择什么 从什么地方选择
例:
SELECT prod_name FROM Products;
这表示从Products表中检索prod_name的列。(如果没有明确排序查询结果,则返回数据没有特定的顺序)
注:
多条SQL语句必须以“;”分隔,因此SELECT不需要再单条SQL语句后加分号,当然也有可能有的DBMS需要单条也加上分好,因此可以总是加上分号。
在SQL语句大小写方面,SQL语句是不区分大小写的,因此SELECT与select是相同的,同样Select也没有关系,只是为了便于阅读和调试,习惯对关键字进行大写,对列名表名进行小写。
在处理SQL语句时,其中所有空格都被忽略。
想要从一个表中检索多个列,仍然可以用SELECT语句,且必须在SELECT关键字之后给出多个列名,并用逗号分隔,例如:
SELECT prod_id,prod_name,prod_price FROM Products;
SQL语句一般返回原始的、无格式的数据。数据的格式化是表示问题而非检索问题。
除了查询指定的列之外,SELECT还可以检索所有的列而不必逐个列出在检索的语句中,例如:
SELECT * FROM Products;
如果给定一个通配符(*),则返回表中所有列。(一般来说,除非你确定需要表中的每一列,否则不推荐使用通配符,因为会降低检索的效率。)
如前所述,SELECT语句返回所有匹配的行,但是如果你不希望每个值都回返,比如说重复的值只返回一次机器,那么我们应该怎么做呢?可以这么写:
SELECT DISTINCT vend_id FROM Products;
这样就只会返回不同的vend_id行了。但是要注意的是,DISTINCT关键字作用于所有的列而非仅仅是跟在其后的那一列。
当然,有时候并不单单只显示排重操作,有时还需要只返回第一行或者一定数量的行,而这个方法在不同的DBMS中实行并不相同,在此仅举例SQLite的实现:
SELECT prod_name FROM Products LIMIT 5;
这句话的意思是返回不超过5行的数据。
为了得到后面的5行数据,需要制定从哪开始以及检索的行数,像这样:
SELECT prod_name FROM products LIMIT 5 OFFSET 5;
LIMIT 5 OFFSET 5 是指返回从第5行起的5行数据,第一个数字是检索的行数,第二个数字是从哪开始。(在SQLite中支持简化语句,可以使用 LIMIT 5,5代替,逗号之前的值对应OFFSET,之后的值对应LIMIT。)同时,在使用的时候要注意第0行,因为第一个被检索的行是第0行,而不是第1行,因此,LIMIT 1 OFFSET 1会被检索到第2行,而非第一行。
下一篇: 现在人出门,还有哪个傻X带钱包