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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核8GB
简介: 数据库(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

目录
相关文章
|
3月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
3月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
402 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
2月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
205 6
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
288 0
|
2月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
243 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
317 8
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
SQL Oracle 关系型数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
739 0

热门文章

最新文章