文章目录
检索一列(不过滤不排序)
SELECT prod_name FROM Products;
select后面是列名,from后面是表名
返回了所有行,因为没指定顺序,所以没有顺序,行数对就行
所以关键字可以小写
select prod_price from Products;
甚至这么写都可以::::
seleCt prod_price from Products;
我发现mysql对于表,列名也是不区分大小写的:(其他DBMS不一定)
seleCt prod_desC from pRoducts;
还是正确拿到了结果
注意SQL语言忽略所有空格,所以可以这么写:
select
prod_name
from
products;
或者这样
select
prod_name from
products;
都正确
而且很多SQL开发人员都觉得写成多行多便于阅读和调试,他们不赞成写成长长的一行
检索多列 (逗号)
select prod_id, prod_name, prod_price
from products;
检索所有列(*通配符)
select * from products;
通配符有好有坏,如果明确知道自己要检索的是哪些列就不用*,如果想知道有哪些你还不知道名字的列就可以用。双刃剑。
注意SQL检索语句返回的数据一般是没有格式的,我们看到的格式是workbench做的工作和贡献。平时访问数据库也是,返回的数据需要应用程序自己来调整显示格式。
检索时显示唯一值(distinct关键字)
select vend_id
from products;
因为有9种产品,所以显示了9行,但是有一些产品的供应商是一样的,所以我想只显示唯一值,只返回一列中不同的值
select distinct vend_id
from products;
但是distinct关键字作用于后面的所有列,只要有两列不一样,就会显示所有行
select vend_id, prod_id
from products;
限制只输出某几行(limit,offset,不同DBMS实现不同)
只输出前5行,使用limit关键字
select prod_name
from products
limit 5;
返回从第5行开始(包括第5行)的5行数据(行号从0开始)
select prod_name
from products
limit 5 offset 5;
由于一共只有9行,所以只返回4行
总结:
- limit指定返回的行数
limit后面是0 ,则返回0行;后面是1则返回1行
select prod_name
from products
limit 0 offset 1;
select prod_name
from products
limit 1 offset 1;
- offset指定返回的行是从哪一行开始的,包含offset后面的数字那一行,注意行数从0开始
比如lIimit 5 offset 5,返回5行,从第5行开始,所以返回的是5,6,7,8行。因为一共只有9行,最大行号为8,所以只返回了4行
返回第0行
select prod_name
from products
limit 1 offset 0;
但是!在这里可以引入一个很重要的点!!!那就是:不同的DBMS软件的SQL实现会有很多小的差异!比如这节说的这个功能,选中间某几行,在mysql使用limit和offset关键字实现的,但是其实在其他DBMS中都不一样!
注释
- 行内注释:两个连字符–
也有人像Python那样用#表示行内注释,但是很多DBMS都不支持
select prod_name
from products
limit 1 offset 0;
-- select prod_id from products;
第二条注释,就执行第一行。其实本来只会执行第二行的。
注意–后面一定要加空格,否则报错
- 多行注释:/**/,和C一样
select prod_name
from products
limit 1 offset 0;
/*select prod_id from products;
select prod_price from products;*/
总结
涉及关键字:
- select
- from:其实from是select语句的子句(clause)
- limit
- offset
- distinct
用到了逗号分隔符,*通配符
明白了不同DBMS对SQL的实现的差异
版权声明:本文为qq_36607894原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。