关键字
作为 SQL 组成部分的保留字,关键字是不能用作表或列的名字的
常有的关键字有:select
、update
、create
等
每个 SQL 语句都是由一个或多个关键字构成的
SELECT
select
语句的作用是从一个或多个表中检索信息
至少需要给出两个信息——想要选择什么,以及从什么地方选择
检索单个列
以下所有代码均来自《SQL必知必会(第四版)》,且需要配合书中给出的案例使用,相关链接为 案例源码下载与导入
在 mysql 中输入
select prod_name from Products;
利用 SELECT
语句从 Products 表中检索一个名为 prod_name 的列
- 多条 SQL 语句必须以分号(;)分隔
- SQL 语句不区分大小写;但是将 SQL 关键字使用大写,其他使用小写,可以使代码更加易于阅读
- 在处理 SQL 语句时,其中所有的空格都被忽略;一条语句可以写成很长的一行,也可以分写在多行
检索多个列
要想从一个表中检索多个列,仍然使用相同的 SELECT
语句;
只是,必须在 SELECT
关键字后给出多个列名,列名之间必须使用 逗号分隔
SELECT prod_id, prod_name, prod_price FROM Products;
检索所有列
除了指定所需的列外,SELECT
语句还可以检索所有的列而不必逐个列出
在实际列名的位置使用星号(*
)通配符可以做到这点
SELECT * FROM Products;
-
列的顺序一般是列在表中定义出现的顺序,但是并不总是如此;由于通常,数据返回程序后,会根据需要进行格式化,再表示出来,所以不需要考虑此问题
-
使用通配符(
*
)可以检索出名字未知的列(优点),但是检索不必要的列通常会降低检索和应用程序的性能(缺点)
检索不同的值
SELECT
语句会返回所有匹配的行;如下所示,有时候这样是不必要的,因为有一部分是重复的,所以需要检索出不同的值
这时可以使用 DISTINCT
关键字,指示数据库只返回不同的值
如果使用 DISTINCT
关键字,必须直接放到列名的前面;并且将作用于所有的列,而不仅仅是其后的一个列
SELECT vend_id FROM Products;
SELECT DISTINCT vend_id FROM Products;
不能部分使用
DISTINCT
:
DISTINCT
关键字应用于所有列而不仅仅是前置它的列
如果给出SELECT DISTINCT vend_id, prod_price
, 除非指定的两个列都不同, 否则所有行都将被检索出来
限制结果
SELECT
语句返回指定表中所有匹配的行,很可能是每一行,如果只想返回第一行或一定数量的行
这个语句随使用的数据库的不同而不同
在 MySQL 中,使用 LIMIT
子句
SELECT prod_name FROM Products LIMIT 5;
LIMIT 5
指示 MySQL 等 DBMS 返回不超过 5 行的数据
为了得到后面的 5 行数据,需要指定从哪儿开始以及检索的行数
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;
LIMIT 5 OFFSET 5
指示 MySQL 等 DBMS 返回 从第5行起的5行数据
- 第一个数字 5 指示检索的行数
- 第二个数字 5 指示从哪儿开始
MySQL 支持简化版的 LIMIT 4 OFFSET 3
语句,即 LIMIT 3,4
逗号前的数字对应 OFFSET
;逗号后的数字对应 LIMIT
1、第一个被检索的行是第0行,而不是第1行;即索引从0开始
2、
LIMIT 1,1
将检索出第二行而不是第一行
3、
LIMIT
中指定要检索的行数为检索的最大行数,如果没有足够的行( 例如,给出LIMIT 10, 5
,但是只有 13 行 ),MySQL 将只返回它能够返回的那么多行
使用完全限定的表名
迄今为止使用的 SQL 例子只通过列名引用列,也可以使用完全限定的名字来引用列(同时使用表名和列名)
SELECT products.prod_name FROM products;
表名也可以是完全限定的
mysql> SELECT products.prod_name
-> FROM crashcourse.products;
只要 products 表确实位于 crashcourse 数据库中,那么上述两个 SQL 语句作用是一样的
使用注释
SQL 语句是由 DBMS 处理的指令,如果向其中加入不执行的解释文本,可以使用 --
或者 #
--
之后的文本就是注释
#
需要在一行的开始使用,这一整行都将变成注释
也可以进行多行注释,注释可以在脚本的任何位置停止和开始,使用 /* */
注释从 /*
开始,到 */
结束,/*
和 */
之间的任何内容都是注释
参考内容
SQL 必知必会(第四版)
MySQL 必知必会