4.1SELECT语句
为了使用select语句必须至少给出两条信息—想选择什么,以及从什么地方选择
检索单个列
格式:
SELECT 想选择什么
FROM 从什么地方选择;
输入:
SELECT bookname
from BookInfo;
输出
+-----------------------+
| bookname |
+-----------------------+
| 电脑乐园 |
| Java2核心技术 |
| 计算机应用基础 |
| 大学语文教程 |
| 谁动了我的奶酪 |
| 倾城之恋 |
| 盗墓笔记 |
| 韩寒作品集 |
| 沉睡之城111 |
| 爱丽丝漫游奇境 |
+-----------------------+
10 rows in set (0.00 sec)
分析:
上述语句使用SELECT语句从BookInfo表中检索一个名为bookname的列,将表中指定列全部返回。
关于 ;符号
结束SQL语句就是;,多条SQL语句必须以分号;分割。
关于大小写
SQL语句不区分大小写,SELECT=select=Select
规范:对SQL关键字使用大写,对列和表名使用小写。
检索多列
上述只是检索了bookname一列下面展示检索多列
想从一个表中检索多列,使用相同的SELECT语句。唯一不同的是必须在SELECT关键字后给出多个需要检索的列名,列名直接必须一逗号分割,最后一列不可以添加逗号。
格式:
SELECT 想选择1,想选择2,想选择3
FROM 从什么地方选择;
输入:
SELECT bookname,bookid,author
from BookInfo;
输出
+-----------------------+-----------+------------------+
| bookname | bookid | author |
+-----------------------+-----------+------------------+
| 电脑乐园 | 1008-2352 | 谭宇 |
| Java2核心技术 | 7111-1790 | Gray Comel |
| 计算机应用基础 | 7305-0458 | 黄强 |
| 大学语文教程 | 7564-1018 | 董自厚 |
| 谁动了我的奶酪 | 7800-7336 | 斯宾塞.约翰 |
| 倾城之恋 | 7800-8287 | 莫然 |
| 盗墓笔记 | 9787-5057 | 南派三叔 |
| 韩寒作品集 | 9787-5378 | 韩寒 |
| 沉睡之城111 | 9787-5613 | 蔡骏 |
| 爱丽丝漫游奇境 | 9787-8020 | 卡罗尔 |
+-----------------------+-----------+------------------+
10 rows in set (0.00 sec)
检索所有的列
除了指定列之外,SELECT语句还可以通过通配符星号*来检索所有列
格式:
SELECT *
FROM 从什么地方选择;
输入:
SELECT *
from BookInfo;
输出
+-----------+-----------------------+------------------+-----------------------------+--------------+-------+------------+-------+
| bookid | bookname | author | press | booklocation | price | booktypeid | total |
+-----------+-----------------------+------------------+-----------------------------+--------------+-------+------------+-------+
| 1008-2352 | 电脑乐园 | 谭宇 | 广西电脑乐园杂志社 | TP3/K29 | 52 | T | 30 |
| 7111-1790 | Java2核心技术 | Gray Comel | 机械工业出版社 | TP312/233 | 68 | T | 5 |
| 7305-0458 | 计算机应用基础 | 黄强 | 南京大学出版社 | TP3/913 | 27.4 | T | 15 |
| 7564-1018 | 大学语文教程 | 董自厚 | 东南大学出版社 | H1/56 | 34 | H | 20 |
| 7800-7336 | 谁动了我的奶酪 | 斯宾塞.约翰 | 中信出版社 | B825/49 | 23.5 | B | 10 |
| 7800-8287 | 倾城之恋 | 莫然 | 华凌出版社 | I247/566 | 30.5 | I | 20 |
| 9787-5057 | 盗墓笔记 | 南派三叔 | 中国友谊出版公司 | I247/468 | 28 | I | 20 |
| 9787-5378 | 韩寒作品集 | 韩寒 | 北岳文艺出版社 | I217/257 | 36 | I | 40 |
| 9787-5613 | 沉睡之城111 | 蔡骏 | 陕西师范大学出版社 | I247/66 | 25 | I | 10 |
| 9787-8020 | 爱丽丝漫游奇境 | 卡罗尔 | 光明日报出版社 | I561/18 | 26.3 | I | 12 |
+-----------+-----------------------+------------------+-----------------------------+--------------+-------+------------+-------+
10 rows in set (0.00 sec)
如果给定一个通配符*号,则返回表中所有列,列的顺序是列在表中定义的顺序
关于使用通配符
一般最好不要使用通配符*号,虽然使用通配符可能会使自己省事省力,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。
检索去重distinct关键字
一般SELECT会返回所有匹配的行,但是,如果你不想要每个值每次都出现这时候需要用到distance。
如:
mysql> select press
from BookInfo;
+-----------------------------+
| press |
+-----------------------------+
| 广西电脑乐园杂志社 |
| 机械工业出版社 |
| 南京大学出版社 |
| 东南大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
+-----------------------------+
10 rows in set (0.00 sec)
select语句返回10行,其中大量重复,使用distance解决。
输入:
SELECT DISTINCT press
from BookInfo;
输出
+-----------------------------+
| press |
+-----------------------------+
| 广西电脑乐园杂志社 |
| 机械工业出版社 |
| 南京大学出版社 |
| 东南大学出版社 |
+-----------------------------+
4 rows in set (0.00 sec)
分析 SELECT DISTINCT press 告诉mysql之封你号不同的press行,因此只返回4行,如果使用distanct语句, 必须放在列名的最前面,一旦使用distinct则应用的是所有的列。
限制结果Limit关键字
select语句返回所有匹配的行,他们可能是表中的每个行,为了只返回前几行数据,可使用limit字句。
输入:
select press
from BookInfo
LIMIT 5;
输出
+-----------------------------+
| press |
+-----------------------------+
| 广西电脑乐园杂志社 |
| 机械工业出版社 |
| 南京大学出版社 |
| 东南大学出版社 |
| 南京大学出版社 |
+-----------------------------+
5 rows in set (0.00 sec)
分析:
使用LIMIT 5 指示MySQL返回不多于5行
为了得到下一个5行,可指定要检索的开始行与行数
输入:
select press
from BookInfo
LIMIT 5,5;
输出
+-----------------------+
| press |
+-----------------------+
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
| 南京大学出版社 |
+-----------------------+
5 rows in set (0.00 sec)
分析:
LIMIT 5,5返回从第五行开始的5行。第一个数字为开始位置,第二个为要检索的行数
关于行0
检索出来的第一行为行0即下标从0开始计算,因此,LIMIT 1,1 将检索出第二行而不是第一行。
限定表名
如果,列prod_name在表products中,则可以
输入:
SELECT products.prod_name
FROM products;
如果,列prod_name在表products中,且表products在crashcourse数据库中则可以
输入:
SELECT products.prod_name
FROM crashcourse.products;