您的位置:首页 > 数据库 > MySQL

Mysql中的select查询操作

2017-04-18 17:17 323 查看
Mysql中的select查询操作

一、基本介绍

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

二、select基本操作演示

首先创建一个数据表book
CREATE TABLE `book` (
`book_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '图书ID',
`name` varchar(100) NOT NULL COMMENT '图书名称',
`number` int(11) NOT NULL COMMENT '馆藏数量',
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8 COMMENT='图书表'
之后向数据表中插入一些数据,如下:



1、检索单个列

语句:SELECT name FROM book

结果如下:



上述语句利用 SELECT语句从book表中检索一个名为name的列。所需的列名在SELECT关键字之后给出, FROM关键字指出从其中检索数据的表名。需要注意的是:如果没有明确排序查询结果(则返回的数据的顺序没有特殊意义。返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数目的行,就是正常的。如上的一条简单SELECT语句将返回表中所有行。数据没有过滤 (过滤将得出结果集的一个子集), 也没有排序。

请注意, SQL语句不区分大小写,因此SELECT与select是相同的。同样,写成Select也没有关系。许多SQL开发人员喜欢对所有SQL关键字使用大写,而对所有列和表名使用小写,这样做使代码更易于阅读和调试。在处理SQL语句时,其中所有空格都被忽略。 SQL语句可以在一行上给出,也可以分成许多行。多数SQL开发人员认为将SQL语句分成多行更容易阅读和调试。

2、检索多个列

语句:SELECT name,number FROM book

结果如下:



要想从一个表中检索多个列,使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

3、检索所有列

语句:SELECT * FROM book

结果如下:



SELECT语句可以检索所有的列而不必逐个列出它们。这可以通过在实际列名的位置使用星号( *)通配符来达到。

注意:一般,除非你确实需要表中的每个列,否则最好别使用*通配符。虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。

4、检索出值不同的行

语句:SELECT DISTINCT number FROM book

结果如下:



假如使用SELECT number FROM book语句,则查询结果如下:



可见DISTINCT关键字的作用是指示MySQL只返回不同的值。

注意:不能部分使用DISTINCT DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出查询语句是SELECT DISTINCT NAME,number FROM book,则有除非两个数据的name和number都相同,否则所有行都将被检索出来。如下:

5、限制显示结果数

语句:SELECT name FROM book LIMIT 2

结果如下:



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

为得出下一个2行,可指定要检索的开始行和行数,如下所示:

语句:SELECT name FROM book LIMIT 2,2

结果如下:



LIMIT 2, 2指示MySQL返回从第2行开始的后面2行。第一个数为开始位置,第二个数为要检索的行数。所以, 带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。为了避免混淆,MySQL 5支持LIMIT的另一种替代语法。 即使用如下形式:LIMIT 4 OFFSET 3。意为从行3开始取4行,就像LIMIT 3, 4一样。

注意:检索出来的第一行为行0而不是行1。因此, LIMIT 1, 1将检索出第二行而不是第一行。

6、使用完全限定的表名

语句:SELECT book.name FROM book

结果如下:



我们可以使用完全限定的名字来引用列(同时使用表名和列字),这在有些时候十分有用。我们还可以使用完全限定的名字来引用表名。如:SELECT book.name FROM liberty.book,其中liberty指定了book表所在的数据库。

三、select排序检索数据

1、单列排序数据

语句:SELECT name,number FROM book ORDER BY number 

结果如下:



上述结果显示以字母顺序排序数据,默认为升序排序(即从小到大)。

2、按多个列排序

语句:SELECT * FROM book ORDER BY number,book_id 

结果如下:



为了按多个列排序,只要指定列名,列名之间用逗号分开即可。排序时首先按照number进行排序,当number相同时,显示顺序按照book_id进行排序。

3、指定排序方向

语句:SELECT * FROM book ORDER BY book_id DESC 

结果如下:



可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须在ORDER BY后指定DESC关键字。与DESC相反的关键字是ASC ( ASCENDING),在升序排序时可以指定它。但实际上,默认排序就是升序的。

注意:DESC关键字只应用到直接位于其前面的列名。例如如下语句:

SELECT * FROM book ORDER BY number DESC,book_id

结果如下:



如果想在多个列上进行降序排序, 必须对每个列指定DESC关键字。而且在字典 ( dictionary)排序顺序中,大写的“A”被视为与小写的“a”相同,这是MySQL(和大多数数据库管理系统)的默认行为。

4、查找最大或最小

语句:SELECT * FROM book ORDER BY number DESC LIMIT 1

结果如下:



上述语句查出了所有book数据中number值最大的一个。同样可以查出最小的,只要去掉DESC即可。

注意:在给出ORDER BY子句时,应该保证它紧跟FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。否则将产生错误消息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: