SELECT语句基本结构

SELECT语句可以从数据表中或视图中进行查询,并将查询结果以表格的形式返回,以表格返回的结果称为结果集

SELECT select_list
[INTO new_table]
FROM table_name
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC|DESC]]

参数说明:

  • select_list:制定需要查询返回的列。多个列之间使用[,]分隔。也可使用[*]表示返回表中的所有列
  • INTO new_table:指定查询的表,也称来源表来源表可能包括基表、视图和连接表。FROM字句还可以包含连接说明,该说明定义了数据库用来在表之间进行导航的特定路径
  • WHERE search_condition:限制返回的行的搜索条件
  • GROUP BY group_by_expression:根据条件将结果集分组
  • HAVING search_condition:指定组或聚合的搜索条件。HAVING子句从中间结果集对行进行筛选,通常与GROUP BY字句一起使用
  • [ORDER BY order_expression [ASC|DESC]:定义结果集中的行排列的顺序。order_expression指定组成排序列表的结果集的列。ASC|DESC指定行是按升序还是按降序排序。
  • 在SQL Server和MySQL数据库中,SQL代码末尾的[;]可以省略,其他数据库(Oracle)中不能省略

别名的应用

在创建数据表时,一般都会使用英文单词或英文单词的缩写来设置字段名,在查询时列名都会以英文的形式显示,可以使用别名来待敌英文列名,增强阅读性

//使用双引号创建别名
SELECT 列名 "别名" FROM 表名;
//使用单引号创建别名
SELECT 列名 '别名'FROM 表名;
//不适用引号创建别名
SELECT 列名 别名 FROM 表名;
//使用AS关键字创建别名
SELECT 列名 AS "别名" FROM 表名;

当字段为英文时

  • 增强阅读性

对多个表查询时出现相同的列名

  • 对多个表进行查询时可能会出现相同列命,避免造成误解可用别名区分

为计算结果设置别名列

  • 在表中可以对多个列进行计算,计算后会产生一个新列,可以使用别名给该列指定列名(若不指定,则默认列名为产生的条件例如A+B)

为使用聚合函数的列设置别名

使用聚合函数对数据进行查询后会产生一个新列,可以使用别名来制定该列的列名

删除重复数据

数据表中有可能会出现重复数据。为解决数据重复问题,需要使用DISTINCT关键字,DISTINCT必须放在第一个字段名的前面
DISTINCT关键字可以从SELECT语句的结果中删除重复的行,如果未指定则将返回所有行,包括重复的行。
在SELECT列表中只能使用一次DISTINCT关键字,而且DISTINCT关键字必须放在第一位,不要在其后面添加[,]

限制查询结果

在SQL Server 数据库中限制查询结果

使用TOP关键字来限制最多返回多少行,TOP关键字可以指定返回表中的前n行数据

SELECT TOP n FROM table

在MySQL 数据库中限制查询结果

  • LIMIT 子句来限制查询结果,LIMIT字句可以对查询结果的记录条数进行限定,控制输出行数
//只显示前n条
SELECT 列名  FROM 表名 LIMIT n;

//从第n-1条(n行)开始显示m条
SELECT 列名  FROM 表名 LIMIT n,m;

在查询的结果中,第一个结果的记录编号时0,而不是1

  • 还可以使用LIMIT n OFFSET m (n为查询的行数,m为查询的起始位置)
//从第n行开始的m条数据
SELECT 列名  FROM 表名 LIMIT n,m;

在Oracle 数据库中限制查询结果

使用ROWNUM

//显示前n行的数据
SELECT 列名  FROM 表名 WHERE ROWNUM <= n;

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