SQL Server——T-SQL基础技术

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SQL Server——T-SQL基础技术

T-SQL基础技术


T-SQL语言中最重要的部分是它的查询功能,查询语言用来对已经存在于数据库中的数据按 照特定的行、列、条件表达式或者一定次序进行检索。


T-SQL对数据库的查询使用SELECT语句,SELECT语句具有灵活的使用方式和强大的功能, SELECT语句的基本语法格式如下:


基本语法格式


SELECT select_list /* 指定要选择的列 */ 
FROM table_source /* FROM子句,指定表或视图 */ 
[ WHERE search_condition ] /* WHERE子句,指定查询条件 */ 
[ GROUP BY group_by_expression ] /*GROUP BY子句,指定分组表达式 */
[ HAVING search_condition ] /* HAVING子句,指定分组统计条件 */ 
[ ORDER BY order_expression [ ASC | DESC ]] /*ORDER子句,指定排序表达式和顺序*/


代码准备:(可以按照我的实例自行建立数据库)



1、投影查询


a、投影指定的列


b、投影全部列


c、修改查询结果的列标题


d、去掉重复行


此部分比较简单,直接上代码


-- 打开数据库
use sixstardb
go
-- 1、【投影查询数据】
-- 查询输出指定字段:学号,姓名,专业,总分
select sno,sname,cname,cscore from student
-- 查询输出所有字段
select *from student
-- 查询输出:则修改标题名称 
select sno as '学号',sname as '姓名',cscore as '总分' from student
-- 查询输出:去掉重复
select *from student
select distinct cname from student
--------------------------------------------------------------------------------------------------


2、选择查询


语法格式:


选择查询通过WHERE子句实现,WHERE子句给出查询条件,该子句必须紧跟FROM子句之后。WHERE <search_condition>


其中search_condition为查询条件,<search_condition>语法格式为:


{ [ NOT ] <precdicate> | (<search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | (<search_condition>) } ]
} [ ,…n ]


其中predicate为判定运算,语法格式为:


{ expression { = | < | <= | > | >= | <> | != | !< | !> } expression /*比较运算*/
| string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character'  /*字符串模式匹配*/
| expression [ NOT ] BETWEEN expression AND expression  /*指定范围*/
| expression IS [ NOT ] NULL  /*是否空值判断*/
| CONTAINS ( { column | * },'<contains_search_condition>')  /*包含式查询*/
| FREETEXT ({ column | * },'freetext_string') /*自由式查询*/
| expression [ NOT ] IN ( subquery | expression [,…n] ) /*IN子句*/
| expression { = | < | <= | > | >= | <> | != | !< | !> } { ALL | SOME | ANY } ( subquery )
/*比较子查询*/
| EXIST ( subquery )  /*EXIST子查询*/
}


表1 查询条件



a.表达式比较


比较运算符用于比较两个表达式值,比较运算的语法格式如下: expression { = | < | <= | > | >= | <> | != | !< | !> } expression 其中expression是除text、ntext和image之外类型的表达式。


b.范围比较


BETWEEN、NOT BETWEEN、IN是用于范围比较的三个关键字,用于查找字段值在(或不在)指定范围的行。


c.模式匹配


字 符 串 模 式 匹 配 使 用 LIKE 谓 词 ,LIKE 谓 词 表 达 式 的 语 法 格 式 如 下 : string_expression [ NOT ] LIKE string_expression [ ESCAPE ‘escape_character’]


其含义是查找指定列值与匹配串相匹配的行,匹配串(即string_expression)可以是一个完整的字符串, 也可以含有通配符。


通配符有以下两种:


%:代表0或多个字符。


_:代表一个字符。


d.空值使用


空值是未知的值,判定一个表达式的值是否为空值时,使用IS NULL关键字,语法格式如下:


expression IS [ NOT ] NULL


代码示例:


-- 2、【选择查询】
-- a--表达式比较 查询输出性别为"女"且"模特专业"
select *from student where ssex='女' and cname='软件工程'
update student
set cscore=88
where sname='大春'
select *from student
-- b--范围查询 查询输出总分为(710,700,750)
select *from student where cscore in(88,100,99)
select *from student where cscore=88 or cscore=100 or cscore=99 -- 同上面一样
-- 查询输出700-712
select *from student
select *from  student where cscore between 85 and 100
-- c--模式匹配 查询输出姓名中有"小"开头
select *from student
select *from student where sname like '大%'
select *from student where sname like '%虎'
select *from student where sname like '%明%'
select *from student where sname like '_明_'
select *from student where cscore like '%9'
-- d--判断空值
insert into student values(8,'04','狗蛋','女','原子弹制备',56,null)
select *from student where crank is null
delete from student   -- 删除一组数据
where sname='狗蛋'
--------------------------------------------------------------------------------------------------


结果可以自行测试,内容过多,我就不往这放了



3、连接查询


a.连接谓词


在SELECT语句的WHERE子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。其一般语法格式为:


[<表名1.>] <列名1> <比较运算符> [<表名2.>] <列名2> 比较运算符有:<、<=、=、>、>=、!=、<>、!<、!> 连接谓词还有以下形式:


[<表名1.>] <列名1> BETWEEN [<表名2.>] <列名2>AND[<表名2.>] <列名3>


由于连接多个表存在公共列,为了区分是哪个表中的列,引入表名前缀指定连接列。例如,student.stno表示student表的stno列, score.stno表示score表的stno列


经常用到的连接如下:


●等值连接:表之间通过比较运算符“=”连接起来,称为等值连接。


●非等值连接:表之间使用非等号进行连接,则称为非等值连接。


●自然连接:如果在目标列中去除相同的字段名,称为自然连接。


●自连接:将同一个表进行连接,称为自连接。


b.以JOIN关键字指定的连接


T-SQL扩展了以JOIN关键字指定连接的表示方式,使表的连接运算能力有了增强。JOIN连接在FROM子句的< joined_table >中指定。


语法格式

<joined_table> ::=
{
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| <joined_table>
}


说明:


<join_type>为连接类型, ON用于指定连接条件, <join_type>的格式如下:[INNER|{LEFT|RIGHT|FULL}[OUTER][<join_hint>]JOIN


INNER表示内连接,OUTER表示外连接,CROSS表示交叉连接,此为JOIN关键字指定的连接的3种类型。


(1)内连接


内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。内连接是系统默认的,可省略INNER关键字。


(2)外连接


在内连接的结果表,只有满足连接条件的行才能作为结果输出。外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。外连接有以下3种:


●左外连接(LEFT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行;


●右外连接(RIGHT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行;


●完全外连接(FULL OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。


代码如下:

-- 3、【连接查询】
-- a--连接谓词
select *from student
select *from course
select student.sno,student.sname,student.ssex,student.cname,course.cno,course.cname,course.cstudyscore
from student,course
where student.cno=course.cno
-- 内连接
select *from student inner join course on student.cno=course.cno  -- 全显示
select s.sno,s.sname,c.cno,c.cname      -- 查询显示
from student s join course c on s.cno=c.cno
where c.cno='03' and s.cscore>=90
--------------------------------
-- 以下操作容易打乱上述数据库,所以我新建了个数据库用于执行下面的操作
create database testdb 
use testdb
go
-- b--JOIN关键字
select *from a
select *from b
-- 左连接
select a.*,b.* from a left join b on a.id=b.id
-- 右连接
select *from a
select *from b
select a.*,b.* from a right join b on a.id=b.id
-- 完全连接
select *from a
select *from b
select a.*,b.* from a full join b on a.id=b.id
--------------------------------------------------------------------------------------------------


4、统计计算


--4、【统计计算】
use sixstardb
go
-- 统计最大数 最小数 平均数
select *from student
select max(cscore) as '最高分',min(cscore) as '最低分',avg(cscore) as '总分平均分'
from student
-- 统计行数
select *from student
select count(*) as '学生总数' from student
--------------------------------------------------------------------------------------------------


5、排序查询


-- 5、【排序查询】
-- order by语句-->排序操作 默认为升序,DESC降序
use testdb
go
select *from orders
-- 根据字母顺序显示公司名称 
select company,ordernumber from orders order by company
-- 根据数字降序显示 (升序去掉desc即可)
select company,ordernumber from orders order by ordernumber desc
-- having子句
select *from orderhaving
-- 查询金额少于2000,
select order_custmer,sum(order_price) as '总数' from orderhaving
group by order_custmer
having sum(order_price)<20000
-------------------------------------------------
use sixstardb 
go
select *from course
--select *from grade
select *from student
select *from student
select s.sno,s.sname,c.cname
from student s,/*grade g,*/course c
where /*s.stno=g.stno and */s.cno=c.cno and c.cname='软件工程'
----------------------------------------------------------


6、子查询


/*  什么是子查询?子查询就是嵌套在主查询中的查询  */
use testdb 
go
select *from customers
select *from customers 
where id 
in(
select id       -- 子查询id
from customers    -- 子查询来自cunstomers
where salary>=7000) -- 子查询条件     整体查询后返回id值
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2天前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
1月前
|
SQL 安全 数据库
sql注入技术
sql注入技术
|
2月前
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文主要介绍了阿里云OpenSearch在Text-to-SQL任务中的最新进展和技术细节。
|
1月前
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
185 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
105 0
|
3月前
|
Java 应用服务中间件 Maven
从零到英雄:一步步构建你的首个 JSF 应用程序,揭开 JavaServer Faces 的神秘面纱
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的 Java EE 标准,用于构建企业级 Web 应用。它提供了丰富的组件库和声明式页面描述语言 Facelets,便于开发者快速开发功能完善且易于维护的 Web 应用。本文将指导你从零开始构建一个简单的 JSF 应用,包括环境搭建、依赖配置、Managed Bean 编写及 Facelets 页面设计。
89 0
|
3月前
|
测试技术 Java
揭秘Struts 2测试的秘密:如何打造无懈可击的Web应用?
【8月更文挑战第31天】在软件开发中,确保代码质量的关键在于全面测试。对于基于Struts 2框架的应用,结合单元测试与集成测试是一种有效的策略。单元测试聚焦于独立组件的功能验证,如Action类的执行逻辑;而集成测试则关注组件间的交互,确保框架各部分协同工作。使用JUnit进行单元测试,可通过简单示例验证Action类的返回值;利用Struts 2 Testing插件进行集成测试,则可模拟HTTP请求,确保Action方法正确处理请求并返回预期结果。这种结合测试的方法不仅提高了代码质量和可靠性,还保证了系统各部分按需协作。
21 0
|
3月前
|
SQL 数据挖掘 数据库
SQL中的重复行删除:技术与策略
【8月更文挑战第31天】
94 0
|
3月前
|
SQL 关系型数据库 MySQL
【超全整理】SQL日期与时间函数大汇总会:MySQL与SQL Server双轨对比教学,助你轻松搞定时间数据处理难题!
【8月更文挑战第31天】本文介绍了在不同SQL数据库系统(如MySQL、SQL Server、Oracle)中常用的日期与时间函数,包括DATE、NOW()、EXTRACT()、DATE_ADD()、TIMESTAMPDIFF()及日期格式化等,并提供了具体示例。通过对比这些函数在各系统中的使用方法,帮助开发者更高效地处理日期时间数据,满足多种应用场景需求。
315 0

热门文章

最新文章

下一篇
无影云桌面