Mysql中的select查询操作

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之后。否则将产生错误消息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值