MySQL入门学习:SELECT数据检索

一、数据库概述

        数据库是一个以某种有组织的方式存储的数据集合。理解数据库的一种最简单的办法是将其
想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。

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

1.1 表

        表(table): 某种特定类型数据的结构化清单

        通常我们将资料放入自己的文件柜时,并不是随便将它们扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。 在数据库领域,这种文件称为表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单。

        数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。

1.2 列和数据类型

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

        表由列组成。列中存储着表中某部分的信息。理解列的最好办法是将数据库表想象为一个网格。网格中每一列存储着一条特定的信息。例如,在顾客表中,一个列存储着顾客编号,另一个列存储着顾客名,而地址、城市、州以及邮政编码全都存储在各自的列中。 

        数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。数据类型限制可存储在列中的数据种类(例如,防止在数值字段中录入字符值)。数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。

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

1.3 行

        行(row): 表中的一个记录。 

        例如,顾客表可以每行存储一个顾客。表中的行数为记录的总数。

1.4 主键

        表中每一行都应该有可以唯一标识自己的一列(或一组列)。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。唯一标识表中每行的这个列(或这组列)称为主键

        主键(primary key)一一列(或一组列),其值能够唯一区分表中每个行。 

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

  • 任意两行都不具有相同的主键值; 
  • 每个行都必须具有一个主键值(主键列不允许NULL值)。

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

二、检索数据

2.1 SELECT语句

        SELECT语句的用途是从一个或多个表中检索信息,是最常使用的SQL语句。为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。

2.1.1 检索单列示例

SELECT prod_name FROM products

        上例表示利用SELECT语句从products表中检索一个名为prod_name的列。所需的列名在SELECT关键字之后给出,FROM关键字指出从其中检索数据的表名。结果会将products表中prod_name的每一行内容输出,如下:

MySQL入门学习:SELECT数据检索

 2.1.2 检索多个列示例:

        检索多个列的时候,只要在SELECT关键字后给出多个列名就行。列名之间必须以逗号分隔

SELECT prod_id,prod_name,prod_price FROM products

MySQL入门学习:SELECT数据检索

2.1.3 检索所有的列 

         可以使用通配符*,检索所有的列。如下:

SELECT * FROM products

 2.1.4 检索不同的行

         如下,当我们检索vend_id,SELECT返回所有匹配的行,其中会有一些相同的行,如果我们想要检索出有不同值的列表,可以使用DISTINCT关键字。此关键字指示MySQL只返回不同的值。 

SELECT DISTINCT vend_id FROM products

 返回值如下,没有相同值:

MySQL入门学习:SELECT数据检索

 2.1.5 限制结果

        SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句,如下,LIMIT 5限制返回不多于5行

SELECT prod_name FROM products LIMIT 5

MySQL入门学习:SELECT数据检索

         为得出下一个5行,可指定要检索的开始行和行数,如下所示,LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数 。

SELECT prod_name FROM products LIMIT 5,5

MySQL入门学习:SELECT数据检索

 总结LIMIT限制:

        带一个值的LIMIT总是从第一行开始,给出的数为返回的行数带两个值的LIMIT可以指定从行号为第一个值的位置开始。 

2.2 排序检索数据 

        在前一节中,SQL语句返回某个数据库表的单个列的数据并没有特定的顺序。为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。 

2.2.1 以字母顺序排序:

SELECT prod_name FROM products ORDER BY prod_name;

MySQL入门学习:SELECT数据检索

 2.2.2  按多个列排序

        经常需要按不止一个列进行数据排序。例如,如果要显示雇员清单,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就像选择多个列时所做的那样)。  

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

MySQL入门学习:SELECT数据检索

        上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。 

2.2.3 指定排序方向

        数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字

SELECT prod_price,prod_name FROM products ORDER BY prod_price DESC

MySQL入门学习:SELECT数据检索

多个列排序示例:

SELECT prod_price,prod_name 
FROM products 
ORDER BY prod_price DESC, prod_name

MySQL入门学习:SELECT数据检索

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

三、结束

        本文是MySql必知必会的学习笔记,主要介绍了SELECT数据检索,包括单列、多列数据检索以及LIMIT限制语句和ORDER BY 排序语句。

 

上一篇:【工控老马】OPC通讯协议解析-OPC七问


下一篇:MySql入门学习:过滤数据