SELECT 语句
用途是从一个或多个表中检索信息。
必须至少给出两条信息:
1.选择什么信息
2.从哪里选择
检索单个列
SELECT
prod_name
FROM
products;
从products表中检索一个名为prod_name的列;
未排序数据
如果没有明确排序查询结果,则返回的数据顺序没有特殊意义,可能不一样,只要返回相同数目的行,就是正常的
结束SQL语句
- 多条的SQL语句必须以分号(;)分隔
- MySQL和其他DBMS一样,不需要在单条SQL语句后加分号,某些DBMS可能需要加上分号
- 如果使用mysql命令行,必须加上分号结束SQL语句
SQL语句大小写
SQL语句不区分大小写
习惯上对所有SQL关键字使用大写,对列名、表名使用小写,易于区分阅读和调试
使用空格
处理SQL语句时,所有空格都被忽略。
SQL可以在一行上给出,也可以分成许多行
将SQL语句分成多行更容易阅读和调试
检索多个列
在SELECT关键字后面给出多个列名,列名之间必须以逗号分隔。
SELECT
prod_id,
prod_name,
prod_price
FROM
products;
当心逗号
多个列时,一定要在列名之间加上逗号,但最后一个列名不加。如果加了逗号,将会出现错误
检索所有列(*)
在实际列名的位置使用星号(*)通配符来达到。
返回表中所有列。列的顺序一般是在表定义中出现的顺序。但有时候并不是这样,表的模式的变化(添加或删除列)可能会导致顺序的变化。
使用通配符
使用*检索不需要的列通常会降低检索和应用程序的性能。
检索未知列
使用*检索可以检索出名字未知的列
检索不同的行(DISTINCTT去重)
SELECT
vend_id
FROM
products;
检索产品表中的所有供应商。
因为有14个产品,所以返回14行。但其实只有4个供应商。DISTINCT关键字指示MySQL只返回不同的值。
SELECT DISTINCT
vend_id
FROM
products;
使用DISTINCT vend_id告诉MySQL只返回不同(唯一)的vend_id行,因此只返回4行。
DISTINCT注意点
- DISTINCT关键字必须直接放在列名的前面
- DISTINCT关键字应用于所有列,而不仅仅是前置的列,即:
SELECT DISTINCT
vend_id,
prod_price
FROM
products;
只会去重vend_id和prod_price列完全相同的行信息,即只要2个字段中有一个字段值不同都不会过滤
限制结果
SELECT语句可以返回所有匹配的行,可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句
SELECT
prod_name
FROM
products
LIMIT 5;
LIMIT 5指示MySQL返回不多于5行
SELECT
prod_name
FROM
products
LIMIT 5,5;
得出下一个5行,可指定要检索的开始行和行数
LIMIT 5,5指示MySQL返回从行5开始的5行。
第一个5为开始位置,第二个5为要检索的行数
总结
- 带一个值的LIMIT总是从第一行开始,给出的数为返回的行数
- 带两个值的LIMIT可以指定从行号为第一个值的位置开始。
行0
检索出来的第一行为0,而不是1,所以LIMIT 1,1将检索出第二行而不是第一行
检索结果行数不够时
LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行,将只返回实际的行数
MySQL 5的LIMIT语法
MySQL5支持LIMIT另一种替代语法,LIMIT 4 OFFSET 3 为从3行开始取4行,等价于LIMIT 3,4
使用完全限定的表名和列名
在某些情况下需要使用到完全限定名字来引用列或表
SELECT
products.prod_name
FROM
study_test.products;
Comments | 0 条评论