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;

image.png
检索产品表中的所有供应商。
因为有14个产品,所以返回14行。但其实只有4个供应商。DISTINCT关键字指示MySQL只返回不同的值。

SELECT DISTINCT
	vend_id
FROM
	products;

image.png
使用DISTINCT vend_id告诉MySQL只返回不同(唯一)的vend_id行,因此只返回4行。

DISTINCT注意点

  • DISTINCT关键字必须直接放在列名的前面
  • DISTINCT关键字应用于所有列,而不仅仅是前置的列,即:
SELECT DISTINCT
	vend_id,
	prod_price 
FROM
	products;

只会去重vend_id和prod_price列完全相同的行信息,即只要2个字段中有一个字段值不同都不会过滤
image.png

限制结果

SELECT语句可以返回所有匹配的行,可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句

SELECT
	prod_name 
FROM
	products 
	LIMIT 5;

image.png
LIMIT 5指示MySQL返回不多于5行

SELECT
	prod_name 
FROM
	products 
	LIMIT 5,5;

image.png
得出下一个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;

image.png


这个家伙很懒,啥也没有留下😋