MS-SQL创建查询排序语句总结

简介: MS-SQL中的查询排序语句(ORDER BY)用于在执行SQL查询后,按照指定列的值对查询结果进行升序或降序排列。

重新捡起枪杆子,学习N年没用过的MS-SQL,整理一些学习笔记记录。

一、创建、修改和删除表

在SQL中,表有如下规则:

  1. 每张表都有一个名字,通常称为表名或关系名。
  2. 表名必须以字母开头,最大长度为 30 个字符。
  3. 一张表可以由若干列组成。
  4. 同一张表中,列名唯一,列名也称为属性名或字段。
  5. 同一列的数据必须有相同的数据类型。
  6. 表中的每一列值必须是不可分割的基本数据项。
  7. 表中的一行称为一个元组,相当于一条记录。

SQL支持以下3种类型的表:

  1. 永久表
  2. 全局临时表
  3. 局部临时表

创建表

创建数据库中的表,表由行和列组成,每个表都必须有个表名:CREATE TABLE

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
AI 代码解读

注:创建表,必须要保证该表名在数据库中不存在,否则数据库会提示创建失败。如果需要创建已经存在的表,我们必须先将原来的表删除,再重新创建。

修改表

在已有的表中添加、修改或删除列:ALTER TABLE
表中添加列:ALTER TABLE (表) ADD (列)
表中删除列:ALTER TABLE (表) DROP COLUMN (列)
注:一些数据库系统不允许这样删除数据库表中的列。
表中更改列的数据类型:ALTER TABLE (表) ALTER COLUMN (更改的数据类型)

表的删除与重命名

重命名表:SP_RENAME '原始名','重命名'
删除表:DROP TABLE 表

二、创建、删除数据库

创建数据库

SQL Server 允许为每个数据库服务创建多个数据库。在 MS-SQL 中,使用 CREATE DATABASE 语句创建数据库的完整语法:

CREATE DATABASE database_name

[ ON
 [ < filespec > [ ,...n ] ]
 [ , < filegroup > [ ,...n ] ]
 ]
 [ LOG ON { < filespec > [ ,...n ] } ]
AI 代码解读

删除数据库

与表的删除类似,数据库的删除是通过 DROP DATABASE 语句来实现的,语法如下:

DROP DATABASE database_name [ ,...n ]
AI 代码解读

三、创建索引与视图

索引的创建与销毁

索引是一个单独的、物理的数据库结构,是数据库的一个表中所包含的值的列表,其中 注明了表的各个值所在的存储位置。索引是依赖于表建立的,提供了编排表中数据的方法。打个比方,把数据库看作一本书,把索引看作书的目录,通过目录查找书 中的信息。显然,与没有目录的书相比,这显得方便和快捷。
按存储结构的不同将索引分为两类,簇索引 (ClusteredIndex)和非簇索引(Nonclustered Index)。

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [ WITH { PAD_INDEX | FILLFACTOR = fillfactor | IGNORE_DUP_KEY | DROP_EXISTING | STATISTICS_NORECOMPUTE | SORT_IN_TEMPDB} [ ,...n] ] [ ON filegroup ]
AI 代码解读

UNIQUE (DISTINCT):惟一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。

CLUSTERED/ NONCLUSTERED:聚集和非聚集索引,若为 CLUSTERED,则为聚 集索引,即表中元组按索引项的值排序,并聚集在一起。一个基本表上只能建一个 聚集索引。NONCLUSTERED 表示创建的索引为非聚集索引。缺省时,创建的索引 为非聚集索引。

ASC/DESC:索引表中索引值的排序次序,缺省为 ASC(正序排列)。

索引的销毁

在 SQL 中,无论是簇集索引还是非簇索引,都可以通过 DROP INDEX 关键字销毁。

DROP INDEX (索引名称)
AI 代码解读

在 SQL Server 中,用 DROP INDEX 语句销毁索引时,我们一定要指明索引所在表 的名字。

使用索引的几点原则

  1. 对小的数据表来说,使用索引并不能提高检索效率,因此不需对其创建索引。
  2. 当用户要检索的字段的数据包含有很多数值或很多空值(NULL)时,为该字段创建 索引,会大大提高检索效率。
  3. 当用户查询表中的数据时,如果查询结果包含的数据(行)较少,一般少于数据总 数的 25%时,使用索引会显著提高查询效率。反之,如果用户的查询操作返回结果 总是包含大量数据,那么索引的用处不大。
  4. 索引列在 WHERE子句中应频繁使用。
  5. 我们要先装数据,后建索引。对于大多数的表,总有一批初始数据需要装入。该原则是说,建立表后,我们要先将这些初始数据装入表,然后再建索引,这样可以加快初始数据的录入。如果建表后就建索引,那么在输入初始数据时,每插入一个记
    录都要维护一次索引;当然,对于索引来说,早建和晚建都是允许的。
  6. 索引提高了数据检索的速度,但也降低了数据更新的速度。如果要对表中的数据进行大量更新,我们最好先销毁索引,等数据更新完毕再创建索引,这样会
    提高效率。
  7. 索引要占用数据库空间。在设计数据库时,我们要把需要的索引空间考虑在内。 我们要尽量把表和它的索引存放在不同的磁盘上,这样会提高查询速度。

四、视图

视图是从一个或多个表中导出的表,其结构和数据是建立在对表的查询基础上的。和表 一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言,这些数据列和数据 行来源于它所引用的表。所以视图不是真实存在的基础表,而是一张虚表。

创建视图

视图的创建主要由 CREATE VIEW 关键字实现,其数据则由 SELECT 语句定义。

CREATE VIEW [(column1, column2...)] AS SELECT FROM
AI 代码解读

销毁视图

在 SQL 中,我们可以通过 DROP VIEW 关键字销毁创建的视图。

DROP VIEW (视图名称)
AI 代码解读

销毁视图,只需在 DROP VIEW 关键字后写入视图的名称就可以了。

视图也有几个原则

  1. 和表一样,视图必须有唯一的名字。
  2. 并且视图与表不允许拥有相同的名字。
  3. 视图的创建个数不受限制,用户可以创建任意多个视图。
  4. 用户要创建视图,必须从数据库管理员那里得到创建权限。
  5. 视图可以嵌套,即可以创建视图的视图。
  6. SQL Server禁止用户在查询语句中使用ORDER BY 子句。

五、SQL查询语句

SELECT语句的完整语法

SELECT [DISTINCT | ALL] select_list
 FROM table_name_source
 [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
 [ HAVING search_condition ]
 [ ORDER BY order_expression [ ASC | DESC ] ]
AI 代码解读

DISTINCT:删除查询结果中相同的行。
ALL:返回查询结果中的所有行。如果没有指定任何一个关键字,那么关键字 ALL 就是默认的关键字。
WHERE:列出搜索标准,用于选择要显示的数据行。
GROUP BY :分组查询结果。
HAVING:列出另外的行选择标准。
ORDER BY : 对 查询结果进行排列。
ASC:升序排列结果。
DESC:降序排列结果。

列的查询

在 SQL 中,查询表中某一列(字段)信息的语法可表示如下

SELECT (表) FROM (字段)
AI 代码解读

注:在 SQL 语言中,SQL 关键词对大小写不敏感,所以对 SELECT 关键词来说, SELECT、select 或者 Select 都是一样的;然而对于表名或者列名来说,可能对大小写 敏感,这取决于数据库的 DBMS。

使用DISTINCT去除重复数据

SELECT 子句中,我们通过指明 DISTINCT 关键字,可以去除列中的重复数据。

SELECT DISTINCTFROM 字段
AI 代码解读

多列查询

多列查询只是在 SELECT 关键词后罗列出所要查询的列名并以逗号相互间隔,注意一点,列出的最后一列的名字后面不能加逗号,否则会造成语法错误。

SELECT col1,col2,……,coln FROM table_name
AI 代码解读

查询所有的列

使用“*”通配符,查询结果将列出表中所有列的元素,而不必指明各列的列名,这在用户不清楚表中各列的列名时非常有用。

SELECT * FROM table_name
AI 代码解读

六、排序查询

单列排序

按照某一列的顺序(升序)进行排列显示的,即 ORDER BY 子句后面只有一个字段。

SELECT column1, column12,……
 FROM table_name_name
 ORDER BY column N
AI 代码解读

注:ORDER BY 子句一定要放在所有子句的最后(无论包含多少子句)。

多列排序

根据 ORDER BY 子句后面列名的顺序确定优先级的, 即查询结果首先按照列 col1 的顺序进行排列,而只有当列 col1 出现相同的信息时,这些相同 的信息再按照列 col2 的顺序进行排列,以此类推。

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY col1,col2,……,colm
AI 代码解读

采用序号进行多列排序

根据列的相对位置(即序号)进行排序。

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY i,j,……
AI 代码解读

反向排序

要实现反向(降序)排序,我们必须使用关键字“DESC”。

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY col1 DESC,col2
AI 代码解读

七、使用WHERE子句定义搜索条件查询

WHERE 子句中定义的搜索条件可以是简单的单值比较条件,也可以使用各种运算符、组合子句条件。

参考资料:
https://learn.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver16
https://learn.microsoft.com/zh-cn/sql/relational-databases/indexes/indexes?view=sql-server-ver16
https://learn.microsoft.com/zh-cn/sql/relational-databases/tables/tables?view=sql-server-ver16
https://learn.microsoft.com/zh-cn/sql/relational-databases/views/views?view=sql-server-ver16

目录
打赏
0
0
0
0
5
分享
相关文章
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
155 77
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
14 1
|
1月前
|
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
51 17
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
112 6
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
466 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
124 9
|
3月前
|
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
57 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等