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 数据类型,
....
)

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

修改表

在已有的表中添加、修改或删除列: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 ] } ]

删除数据库

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

DROP DATABASE database_name [ ,...n ]

三、创建索引与视图

索引的创建与销毁

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

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

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

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

索引的销毁

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

DROP INDEX (索引名称)

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

使用索引的几点原则

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

四、视图

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

创建视图

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

CREATE VIEW [(column1, column2...)] AS SELECT FROM

销毁视图

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

DROP VIEW (视图名称)

销毁视图,只需在 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 ] ]

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

列的查询

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

SELECT () FROM (字段)

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

使用DISTINCT去除重复数据

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

SELECT DISTINCTFROM 字段

多列查询

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

SELECT col1,col2,……,coln FROM table_name

查询所有的列

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

SELECT * FROM table_name

六、排序查询

单列排序

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

SELECT column1, column12,……
 FROM table_name_name
 ORDER BY column N

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

多列排序

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

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY col1,col2,……,colm

采用序号进行多列排序

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

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY i,j,……

反向排序

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

SELECT col1,col2,……,coln
 FROM table_name
ORDER BY col1 DESC,col2

七、使用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

目录
相关文章
|
23天前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
16 0
sql语句加正则 简化查询
|
2月前
|
SQL
sql server链接查询
sql server链接查询
18 1
|
2月前
|
SQL
sql server简单查询
sql server简单查询
15 1
|
2月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
68 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
15 0
|
2月前
|
SQL
sql高级查询
sql高级查询
15 0
|
2月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
3天前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
|
3天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之在sql 里嵌套查询时,查询条件带有instr时报错,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
8天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句