热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLSERVER的知识点

1.列和表别名SQL别名用于为表或表中的列提供临时名称。SQL别名通常用于使表名或列名更具可读性。SQL一个别名只存在于查询期间。别名使用AS关键字,通常可以省略

1.列和表别名

SQL 别名用于为 表 或 表中的列 提供临时名称。 SQL 别名通常用于使 表名 或 列名 更具可读性。 SQL 一个别名只存在于查询期间。

别名使用 AS 关键字,通常可以省略。

建议在下列情况下使用别名 查询涉及多个表 用于查询函数 需要把两个或更多的列放在一起 列名长或可读性差

SELECT 列名
FROM 表名 AS 别名;

2. 连接表

在关系数据库中,数据分布在多个逻辑表中。

要获得完整有意义的数据集,需要使用连接来查询这些表 中的数据。

SQL Server支持多种连接,包括 [内连接],[左连接],[右连接],[全外连接]和[交叉连接]。 每种连接类型指定SQL Server如何使用一个表中的数据来选择另一个表中的行。

(1).SQL Server内连接

内连接是SQL Server中最常用的连接之一。 内部联接子句用于查询来自两个或多个相关表的数据。 SQL Server INNER JOIN 子句的语法:

SELECT
product_name,
category_name,
brand_name,
list_price
FROM
production.products p
INNER JOIN production.categories c ON c.category_id = p.category_id
INNER JOIN production.brands b ON b.brand_id = p.brand_id
ORDER BY
product_name DESC;

(2).SQL Server左连接

LEFT JOIN 子句用于查询来自多个表的数据。

它返回左表中的所有行和右表中的匹配行。 如果在右表中找不到匹配的行,则使用 NULL 代替显示。 以下图说明了两个结果集的左连接结果:

SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id

(2).ON与WHERE子句 

SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id = 100
ORDER BY
order_id;

(3). SQL Server右连接

RIGHT JOIN 子句组合来自两个或多个表的数据。

RIGHT JOIN 开始从右表中选择数据并与左表中的行 匹配。

RIGHT JOIN 返回一个结果集,该结果集包含右表中的所有行,无论是否具有左表中的匹配行。

如果右表中的行没有来自右表的任何匹配行,则结果集中右表的列将使用 NULL 值。 以下是 RIGHT JOIN 的语法:

SELECT
product_name,
order_id
FROM
sales.order_items o
RIGHT JOIN production.products p
ON o.product_id = p.product_id
ORDER BY
order_id;

 (4).SQL Server 交叉连接

CROSS JOIN 连接两个或多个不相关的表。 以下是两个表的SQL Server CROSS JOIN 的语法:

SELECT
select_list
FROM
T1
CROSS JOIN T2;
或者
SELECT
select_list
FROM
T1, T2;

CROSS JOIN 将第一个表(T1)中的每一行与第二个表(T2)中的每一行连接起来。

换句话说,交叉连接返回 两个表中行的笛卡尔积。

与INNER JOIN或LEFT JOIN不同,交叉连接不会在连接的表之间建立关系。

假设 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。

CROSS JOIN 从第一个表(T1)获取一行,然后为第二个表(T2)中的每一行创建一个新行。

然后它对第一个 表(T1)中的下一行执行相同操作,依此类推。 在此图中, CROSS JOIN 总共创建了 9 行。 通常,如果第一个表有 n 行,第二个表有 m 行,则交叉连接 将产生 n x m 行。 

(5).SQL Server自连接

自联接用于将表连接到自身(同一个表)。

它对于查询分层数据或比较同一个表中的行很有用。 自联接使用内连接或左连接子句。 由于使用自联接的查询引用同一个表,因此表别名用于为查询中的表 分配不同的名称。

SELECT
e.first_name + ' ' + e.last_name employee,
m.first_name + ' ' + m.last_name manager
FROM
sales.staffs e
INNER JOIN sales.staffs m ON m.staff_id = e.manager_id
ORDER BY
manager

(6).SQL Server全外链接

 FULL OUTER JOIN当左表或右表中存在匹配项时,该命令将返回所有行。 下面创建一些示例表来演示全外连接。 首先,创建一个名为 pm 的新模式,它代表项目管理

INSERT INTO
pm.projects(title)
VALUES
('New CRM for Project Sales'),
('ERP Implementation'),
('Develop Mobile Sales Platform');
INSERT INTO
pm.members(name, project_id)
VALUES
('John Doe', 1),
('Lily Bush', 1),
('Jane Doe', 2),
('Jack Daniel', null);

3.分组数据

(1).SQL Server Group By语句

 Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组,

所谓的分组就是将一个“数据集” 划分成若干个“小区域”,

然后针 对若干个“小区域”进行数据处理。 以下是 GROUP BY 子句的语法:

SELECT
customer_id,
YEAR (order_date) order_year
FROM
sales.orders
WHERE
customer_id IN (1, 2)
ORDER BY
customer_id;

(2).GROUP BY子句和聚合函数

 GROUP BY 子句通常与聚合函数一起用于统计数据。

聚合函数对组执行计算并返回每个组的唯一值。

例如, COUNT() 函数返回每个组中的行数。

其他常用的聚合函数是: SUM() , AVG() , MIN() , MAX()。

GROUP BY 子句将行排列成组,聚合函数返回每个组的统计量(总数量,最小值,最大值,平均值,总和 等)。 例如,以下查询返回客户按年度下达的订单数:

SELECT
customer_id,
YEAR (order_date) order_year,
COUNT (order_id) 订单数量
FROM
sales.orders
WHERE
customer_id IN (1, 2)
GROUP BY
customer_id,
YEAR (order_date)
ORDER BY
customer_id;

(1).带有COUNT()函数示例的GROUP BY子句

SELECT
city,
COUNT (customer_id) customer_count
FROM
sales.customers
GROUP BY
city
ORDER BY
city;

(2).GROUP BY子句带有MIN和MAX函数示例

SELECT
brand_name,
MIN (list_price) min_price,
MAX (list_price) max_price
FROM
production.products p
INNER JOIN production.brands b ON b.brand_id = p.brand_id
WHERE
model_year = 2018
GROUP BY
brand_name
ORDER BY
brand_name;

4.SQL Server Having子句

HAVING 子句通常与[GROUP BY]子句一起使用,以根据指定的条件列表过滤分组。 以下是 HAVING 子句 的语法:

SELECT
select_list
FROM
table_name
GROUP BY
group_list
HAVING
conditions;

在此语法中,

GROUP BY 子句将行汇总为分组,

HAVING 子句将一个或多个条件应用于这些每个分组。

只有使条件评估为 TRUE 的组才会包含在结果中。

换句话说,过滤掉条件评估为 FALSE 或 UNKNOWN 的 组。

因为SQL Server在 GROUP BY 子句之后处理 HAVING 子句,所以不能通过使用列别名来引用选择列表中指 定的聚合函数。 以下查询将失败: 

 

SELECT
column_name1,
column_name2,
aggregate_function (column_name3) column_alias
FROM
table_name
GROUP BY
column_name1,
column_name2
HAVING
column_alias > value

5.子查询

(1).SQL Server子查询

子查询是嵌套在另一个语句(如:[SELECT],[INSERT]

,[UPDATE]或[DELETE])中的查询。 以下语句显示如何在 SELECT 语句的[WHERE]子句中使用子查询来查找位于纽约( New York )的客户的销售订单:

SELECT
order_id,
order_date,
customer_id
FROM
sales.orders
WHERE
customer_id IN (
SELECT
customer_id
FROM
sales.customers
WHERE
city = 'New York'
)
ORDER BY
order_date DESC;

(2).SQL Server嵌套子查询

子查询可以嵌套在另一个子查询中。

SQL Server最多支持 32 个嵌套级别。 请考虑以下示例: 

SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price > (
SELECT
AVG (list_price)
FROM
production.products
WHERE
brand_id IN (
SELECT
brand_id
FROM
production.brands
WHERE
brand_name = '上海永久'
OR brand_name = '凤凰'
)
)
ORDER BY
list_price;

 (3).SQL Server相关子查询

相关子查询是使用外部查询的值的[子查询]。

换句话说,它取决于外部查询的值。

由于这种依赖性,相 关子查询不能作为简单子查询独立执行。

此外,对外部查询评估的每一行重复执行一次相关子查询。 相关子查询也称为重复子查询。 以下示例查找价格等于其类别的最高价格的产品。

SELECT
product_name,
list_price,
category_id
FROM
production.products p1
WHERE
list_price IN (
SELECT
MAX (p2.list_price)
FROM
production.products p2
WHERE
p2.category_id = p1.category_id
GROUP BY
p2.category_id
)
ORDER BY
category_id,
product_name;
-- 子查询写法
SELECT
p1.product_id,p1.product_name,p1.category_id,p1.list_price
FROM
production.products p1
INNER JOIN (
SELECT
category_id,
max(list_price) max_price
FROM
production.products
GROUP BY
category_id
) p2 ON p1.category_id = p2.category_id
AND p1.list_price = p2.max_price;

(4).SQL Server Exists运算符

EXISTS 运算符是一个逻辑运算符,用于检查子查询是否返回任何行。 如果子查询返回一行或多行,则 EXISTS 运算符返回 TRUE 。 以下是SQL Server EXISTS 运算符的语法:

EXISTS ( subquery)

(1).1. 带子查询的EXISTS返回NULL示例 以下示例返回 customers 表中的所有行:

SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
EXISTS (SELECT NULL)
ORDER BY
first_name,
last_name;

(5).SQL Server Any运算符

ANY 运算符是一个逻辑运算符,它将标量值与子查询返回的单列值集进行比较。 以下是 ANY 运算符的语法:

scalar_expression comparison_operator ANY (subquery)

 在上面语法中,

scalar_expression - 是任何有效的表达式。

comparison_operator - 是任何比较运算符,包括等于( &#61; )&#xff0c;不等于( <> )&#xff0c;大于( > )&#xff0c;大于或等于 ( >&#61; )&#xff0c;小于( <)&#xff0c;小于或等于( <&#61; )。

subquery 是一个[SELECT]语句&#xff0c;它返回单个列的结果集&#xff0c;其数据与标量表达式的数据类型相同。

 

SELECT
product_name,
list_price
FROM
production.products
WHERE
product_id &#61; ANY (
SELECT
product_id
FROM
sales.order_items
WHERE
quantity >&#61; 2
)
ORDER BY
product_name;

(7).SQL Server All运算符

SQL Server ALL 运算符是一个逻辑运算符&#xff0c;

它将标量值与子查询返回的单列值列表进行比较。 以下是 ALL 运算符语法&#xff1a; 

scalar_expression comparison_operator ALL ( subquery)

在上面语法中&#xff0c; scalar_expression 是任何有效的表达式。

comparison_operator 是任何有效的比较运算符&#xff0c;包括等于( &#61; )&#xff0c;不等于( <> )&#xff0c;大于( > )&#xff0c;大于或 等于( >&#61; )&#xff0c;小于( <)&#xff0c;小于或等于( ALL ( subquery ) 如果 scalar_expression 大于子查询返回的最大值&#xff0c;则表达式返回 TRUE 。

例如&#xff0c;以下查询查找价格大于所有品牌产品的平均价格的产品&#xff1a;

SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price > ALL (
SELECT
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
brand_id
)
ORDER BY
list_price;

(2).scalar_expression

如果标量表达式( scalar_expression )小于子查询( subquery )返回的最小值&#xff0c;则表达式求值为 TRUE 。 以下示例按品牌查找价格低于平均价格中最低价格的产品&#xff1a;

SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price SELECT
AVG (list_price) avg_list_price
FROM
production.products
GROUP BY
brand_id
)
ORDER BY
list_price DESC;

 

 

 

 

 

 

 

 


推荐阅读
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
author-avatar
宁波南诚装饰_886
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有