数据库(Sql server语言)(一)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 数据库(Sql server语言)(一)

例题:(不介绍创建和插入)

a7e72120effb4d02afbc1514aeada9ca.png

star表      

1915fc25dc8647dba2f530007030d277.png


首先先来讲下group by语句:


group by的使用条件


使用了分组子句一定有聚合操作,但是执行聚合操作不一定要有分组子句

如:求男同学的人数,此时聚合值只有一个,因此不必分组


同一个聚合操作的值有多个时,才必须使用分组子句


如:求每一年龄的学生人数,此时聚合值有多个,与年龄有关,必须分组。


(1)


1. select sno,avg(grade)
2. from sc
3. where avg(grade)>=88
4. group by sno


(2)


1. select sno,avg(grade)
2. from sc
3. group by sno
4. having avg(grade)>=88


where子句与having子句


where子句作用于基图或视图,从中选择满足条件的元组


where子句中不能用聚集函数作为条件表达式,所以第(1)个是错的,第(2)个才是对的


having语句作用于,从中选择满足条件的组


查询每个组合的名称及其成员个数


select g.name,count(*) 成员个数
from star s,stargroup g
where s.gid = g.gid
group by g.name


cc672688f0014b89a5c7627c073bde04.png

如果不写where s.gid=g,gid会出现成员个数重复


所以一般语句为:where...group by.....having....order by

重点:嵌套语句:带有in,比较字符串,any(some)或者all,exists的子查询

不相关查询:子查询的查询条件不依赖于父循环


●由里向外逐层处理:每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查询条件

相关查询:子查询的查询条件依赖于父循环

●首先取外层查询中表的第一个元组,根据他与内层查询相关的属性值处理内层循环,若where子句返回真值,则取此元组放入结果表

●然后再取外层表的下一个元组

●重复这一过程直到外层表全部检查完为止

注:子查询不能用order by


常见的是不相关查询:不相关子查询和自连接


查询与”刘晨“在同一个系学习的学生


select sno,sname,sdept
from student
where sdept in
(select sdept
from student
where sname='刘晨')


select s1.sno,s1.sname,s1.sdept
from student s1,student s2
where s1.sdept=s2.sdept
and s2.sname='刘晨';


两者返回值相同,但是多数情况下,不相关查询较为复杂,很难优化,尽量能用连接就用连接实现


查询身高最高的团员姓名及其身高


1. select name,height from star
2. where height = (select max(height) from star)

e638ea5d65b646b2bc67740c2f4778cb.png


查询每个组合的名称,及其平均年龄

重点:year(getdate())


select g,name '团名',avg(year(getdate())-byear) '平均年龄'
from star s,stargroup g
where s.gid=g.gid
group by g.name

aba42ebfa5254e81b986b44e8d20a449.png


●查询团员的最高身高,最矮身高以及最高身高与最矮身高的身高差


select
(select max(height) from star)"最高’
(select min(height) from star)'最矮”
(select max(height) from star) -(select min(height) from star)最大身高差

b3d6bfc6e3054d4388c67437239c7508.png


按照身高降序列出首尔出生的团员的姓名,所属团名,出生年份,身高


升序:ASC,降序:DESC,默认值为升序,可以不写,对于空值,排序时显示的次序由具体系统实现来决定


select s.name,g.name,byear,height
from star s,stargroup g
where s.gid=g.gid
and born='首尔'
order by 4 desc

245940187982420e8cff11aeb3c56022.png

查询团员中不同姓及其人数


substring(name,1,1):截取第一个字

substring(name,1,2):从第一个字开始截,截两个


注:substring是从1开始的


select substring (nane, 1, 1) '姓’,count
(*)'人数
from star
group by substring (name,1,1)
select substring(name,1,1)'姓’,count(*)'人数
from star
group by substring(name,1,1)

12cd1c1582d84490971f5a29f8ce4753.png

●查询姓’金‘的团员是姓’李‘的团员多少倍


like '金'


select
(select count(*) from star where name like'金%)"姓金的人数”
select count (*
from star where name like'李%”"姓李的人数”
select count (*)
from star where name like"金%’)/(select count(*)
from star where name
like'李%),姓金的人数是姓李的人数的倍数

b6a89ddb141d4503b0ab9679c4784d42.png


注:如果字符串本身就包含%,_,那么就要用转义字符‘\’,跟在'\'的字符不再具有通配符的含义,转义为普通的%,_


a%b:表示以a开头,以b结尾的任意长度字符串


a_b:表示以a开头,以b结尾的长度为3的字符串


补充:


select name,sex
from student
where sdept like'cs' or sdept like'ma' and sex like'女'
select name,sex
from student
where sdept='cs' or sdept='ma' and sex='女'


如果like后面的匹配字符串不含通配符,可以用=运算代替like,用!=或<>代替not like


not的优先级比and高,and的优先级比or高,括号可以改变优先级 ,要用括号括起来,否则先查询and


查询(cs)或(ma)的女生的姓名和性别


select name,sex
from student
where (sdept='cs' or sdept='ma') and sex='女'


查询(cs)的学生或(ma)的女生的姓名和性别


1. select name,sex
2. from student
3. where sdept='cs' or (sdept='ma' and sex='女')


查询首尔出生的团员最少的组合名称


select top 1 gid


select name from stargroup
where gid in (select top 1 gid
from star
where born ='首尔
group by gid
order by
count(*))


605dd53b8b774966b7fecf0c93b20c94.png

相关实践学习
使用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 server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
2月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
3月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
85 16
|
3月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
4月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
337 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
3月前
|
SQL 存储 缓存
YashanDB SQL语言
YashanDB SQL语言
|
4月前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
4月前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
139 9
|
5月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
540 6
|
4月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。

热门文章

最新文章