数据库之必知必会(一)

1、了解SQL

1.1 数据库基础

1.1.1 数据库 database

保存有组织的数据的容器(通常是一个文件或一组文件)

1.1.2  表 table

某种特定数据类型数据的结构化清单。

数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字。但在不同的数据库中完全可以使用相同的表名。

1.1.3 列和数据类型

表由列组成。列存储表中某部分的信息。

column

表中的一个字段。所有表都是由一个或多个列组成的。

数据类型

所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。

1.1.4 行 row

表中的数据都是按行存储的,所保存的每个记录存储在自己的行内。

表中的一个记录。

1.1.5 主键 primary key

一列(或一组列),其值能够唯一标识表中每一行。

表中的任何列都可以作为主键,只要它满足以下条件:

任意两行都不具有相同的主键值;

每一行都必须具有一个主键值(主键列不允许NULL值);

主键列中的值不允许修改或更新;

主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

主键通常定义在表的一列上,但并不是必需这么做,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。

1.2 什么是SQL

SQL是Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库沟通的语言。

优点:

(1)SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL,所以学习此语言使你几乎能与所有数据库打交道。

(2)SQL简单易学。

(3)SQL是一种强有力的语言,灵活使用其语言元素,可以进行正常复杂和高级的数据库操作。

2、 检索数据

2.1 SELECT语句

从一个或多个表中检索信息。

为了使用SELECT检索数据,必须至少给出两条信息----想选择什么,以及从什么地方选择。

2.2 检索单个列

输入:

SELECT prod_name FROM Products;

分析:

上述语句利用SELECT 语句从Products表中检索一个名为prod_name的列。

所需的列名写在SELECT关键字之后,FROM关键字指出从哪个表中检索数据。

2.3 检索多个列

从一个表中检索多个列,必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

提示:

在选择多个列时,一定要在列名之后加上逗号,但最后一个列名之后不加。如果最后一个列名之后加了逗号,将出现错误。

输入:

SELECT prod_id, prod_name, prod_price From Products;

分析:

使用SELECT语句从表Products中选择数据,指定3列,列名之间用逗号分隔。

2.4 检索所有列

SELECT语句检索所有列时,在实际列名的位置使用星号(*)通配符可以做到。

输入:

SELECT * FROM Products;

分析:

给定一个通配符(*),则返回表中所有列。列的顺序一般是列在表定义中出现的物理顺序,但并不总是如此。

2.5 检索不同的值

使用DISTINCT关键字,指示数据库只返回不同的值。

输入:

SELECT DISTINCT vend_id FROM Products;

分析:

SELECT DISTINCT vend_id告诉DBMS只返回不同(具有唯一性)的vend_id行。如果使用DISTINCT关键字,它必须直接放在列名的前面。

注意:不能不分使用DISTINCT

DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,指定SELECT DISTINCT vend_id, prod_price,因为指定的两列不完全相同,所以所有的行都会被检索出来。

2.6 限制结果

SELECT语句返回指定表中所有匹配的行,很可能是每一行。如果只想返回第一行或者一定数量的行是可行的,只是各种数据库中的这一SQL实现并不相同。

(1)SQL Server和Access中使用SELECT时,可以使用TOP关键字来限制最多返回多少行

SELECT TOP 5 prod_name FROM Products;  -- 只检索前5行数据

(2)DB2

SELECT prod_name FROM Products FETCH FIRST 5 ROWS ONLY;

(3)Oracle基于ROWNUM(行计数器)来计算行

SELECT prod_name FROM Products WHERE ROWNUM <=5;

(4)MySQL、MariaDB、PostgreSQL、SQLite使用LIMIT子句

SELECT prod_name FROM Products LIMIT 5; -- LIMIT 5指示MySQL等DBMS返回不超过5行的数据

SELECT prod_name FROM Products LIMIT 5 OFFSET 5; -- LIMIT 5 OFFSET 5指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。

注意:第0

第一个被检索的行是第0行,而不是第1行。因此,LIMIT 1 OFFSET 1会检索第2行,而不是第1行。

提示:MySQLMariaDBSQLite捷径

MySQL、MariaDB、SQLite支持简化版的LIMIT 4 OFFSET 3语句,即LIMIT 3,4。使用这个语法,逗号之前的值对应OFFSET,逗号之后的值对应LIMIT。

2.7 使用注释

(1)行内注释

输入:

SELECT prod_name -- 注释内容

FROM Products;

分析:

注释使用--(两个连字符)嵌在行内。--之后的文本就是注释

(2)行内注释

输入:

# 注释内容

SELECT prod_name

FROM Products;

分析:

在一行的开始处使用#,这一整行都将作为注释。

(3)多行注释

输入:

/* SELECT prod_id, prod_name

From Products; */

SELECT prod_name

FROM Products;

分析:

注释从/*看是,到*/结束,/*和*/之间的任何内容都是注释。

3、排序检索数据

3.1 排序数据

如果不排序,数据一般将以它在底层中表现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式的影响。因此,如果不明确控制的话,则最终的结果不能(也不应该)依赖该排序顺序。

为了明确的排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

输入:

SELECT prod_name FROM Products ORDER BY prod_name;

分析:

以字母顺序排序

注意:ORDER BY子句的位置

ORDER BY子句是SELECT语句中最后一条子句。

提示:

ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。

3.2 安多个列排序

要按多个列排序,简单指定列名,列明之间用逗号分开即可。

输入:

SELECT prod_id, prod_price, prod_name FROM Products  ORDER BY prod_price, prod_name;

在按多个列排序时,排序的顺序完全按规定进行。

3.3 按列位置排序

除了能用列名指出排序顺序外,ORDER BY还支持按相对列位置进行排序。

输入:

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3;

分析:

ORDER BY 2表示按SELECT清单中的第二个列prod_price进行排序。ORDER BY 2, 3表示先按prod_price,再按prod_name进行排序。

3.4 指定排序方向

数据排序默认的是生序排序(从A到Z),还可以使用ORDER BY子句进行降序排序,必须指定DESC关键字。

输入:

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;

分析:

DESC关键字只应用到直接位于其前面的列名。只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。

警告:在多个列上降序排序

如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。

你可能感兴趣的:(数据库,数据库,sql)