SQL server 数据库 SQL语句高级用法

1、表的高级查询
use student
select * from stuinfo1
-- 使用 in 的子查询
select * from stuinfo where stu_age in ( select stu_age from stuinfo where
cla_id = '12345' )
select * from stuinfo where stu_age in ( 19 , 20 , 21 , 25 , 23 , 16 , 31 , 11 , 19 )
-- 使用 = 号的子查询
select * from stuinfo where stu_age = ( select stu_age from stuinfo where
stu_name = ' 张三 ' )
select * from stuinfo where stu_age = 20
-- 设置字段名称:给字段命名的时候,一般用的是英文,很理解,查询时,可以给字段进行重命名,让其便于
理解
/*
给字段设置别名格式:
1 、原字段名 as 新名称
2 、新名称 = 原字段名
3 、原字段名 新名称
*/
select stu_name from stuinfo
select stu_name as 姓名 from stuinfo
select 姓名 = stu_name from stuinfo
select stu_name 姓名 from stuinfo
/* 字段拼接:指的将多个字段合并一个新的字段,使用的是 "+" 号作为连接符。
注意:所连接的字段数据类型应该是相同类型,而且不能是数值类型;
*/
select stu_name,stu_add from stuinfo
select stu_name + stu_add from stuinfo
-- 去重 distinct ,去掉重复值
select stu_add from stuinfo
select distinct stu_add from stuinfo
-- top: 显示指定前多少条数据或前百分比的数据,后面要跟上一个数据或百分比
select * from stuinfo
select top 3 * from stuinfo -- 查询前 3 条记录
select top 10 percent * from stuinfo -- 查询前百分之 10 的记录
-- 范围查询: between and 是在一定的范围内,包含界值
-- 案例:查询年龄在 18 23 之间的学生信息,包含 18 23
select * from stuinfo where stu_age between 18 and 23
-- not between and 不在一个范围之内,不包含界值
-- 案例:查询年龄不在 18 23 之间的学生信息,结果不包含 18 23
select * from stuinfo where stu_age not between 18 and 23
-- not 否定后面的任何内容
-- 查询姓名叫张三学生
select * from stuinfo where stu_name = ' 张三 '
-- 查询姓名不叫张三的学生信息
select * from stuinfo where not stu_name = ' 张三 '
select * from stuinfo where stu_name <> ' 张三 '
select * from stuinfo where stu_name != ' 张三 '
/* 模糊查询:
关键字: like
通配符: %:0 个或多个任意字符
_ :单个字符
[] :表示在这个范围之内
[^] :表示不在这个范围之内
*/
-- 查询学生信息表中姓李学生的信息
select * from stuinfo where stu_name like ' %'
-- 查询学生信息表中姓李且名字只有一个单字的学生的信息
select * from stuinfo where stu_name like ' _'
-- 查询学生信息表中姓李或姓张学生的信息
select * from stuinfo where stu_name like ' %' or stu_name like ' %'
select * from stuinfo where stu_name like '[ 李张 ]%'
-- 查询学生信息表中即不是姓李的学生,也不是姓张的学生信息。
select * from stuinfo where not stu_name like ' %' and not stu_name like ' %'
select * from stuinfo where stu_name like '[^ 李张 ]%'
-- 排序: order by
-- 语法格式: select * from < 表名 > order by 字段名 ASC /DESC
-- 注意:如果按升序排序,可以省略 asc ,默认就是以升序进行排序;如果是降序,不可以省略 desc
-- 注意:如果有多个字段参与排序,优先级按从左至右进行排序
-- 案例:查询学生的信息,并按照年龄的升序进行排序
select * from stuinfo order by stu_age asc
select * from stuinfo order by stu_age
-- 案例:查询学生的信息,并按照年龄的降序进行排序
select * from stuinfo order by stu_age desc
-- 案例:查询学生的信息,并按照年龄降序进行排序,按照学号的升序进行排序
select * from stuinfo order by stu_age desc ,stu_id asc
-- 案例:查询学生的信息,并按照学号降序进行排序,按照年龄的升序进行排序
select * from stuinfo order by stu_id desc ,stu_age asc
-- 案例:排序与 top 结合使用
select top 2 * from stuinfo order by stu_age desc ,stu_id asc
-- 案例:按学生年龄的降序排序,并输出姓李的学生信息
select * from stuinfo where stu_name like ' %' order by stu_age desc
2、 聚合函数及 group by 分组用法
-- 求和: sum 函数,格式: sum ( 字段 ) ,注意:字段的类型只能为数值型;
-- 案例:计算学生信息表中所有学后的年龄之和
select sum ( stu_age ) 年龄之和 from stuinfo
-- 求平均值: avg 函数,格式: avg ( 字段 ) 注意:字段的类型只能为数值型
-- 案例:计算学生的平均年龄
select avg ( stu_age ) 平均年龄 from stuinfo
-- 求最大值: max 函数 格式: max ( 字段 )
-- 列出学生信息表中年龄最大的学生信息
select max ( stu_age ) 最大年龄 from stuinfo
-- 列出学生信息表中最大学号的学生信息
select max ( stu_id ) from stuinfo
-- 求最小值 : min 函数 格式: min ( 字段 )
-- 列出学生信息表中年龄最小的学生信息
select min ( stu_age ) 最小年龄 from stuinfo
-- 列出学生信息表中最小学号的学生信息
select min ( stu_id ) 最小学号 from stuinfo
-- 计数 : count 函数 格式: count ( 字段 )
-- 计算出学生信息表中学生的数量
select * from stuinfo
select count ( stu_name ) from stuinfo
select count ( stu_age ) from stuinfo
-- 计算出班级编号为 12345 的学生的人数
select count ( stu_id ) from stuinfo where cla_id = '12345'
select count ( * ) from stuinfo where cla_id = '12345'
-- 创建一个科目表
create table km (
id int identity ( 1 , 1 ) , -- 序号
km_id int primary key not null , -- 课程号
km_name varchar ( 10 ) -- 课程名称
)
insert into km values ( 1 , ' 语文 ' ) , ( 2 , ' 数学 ' ) , ( 3 , ' 英语 ' ) , ( 4 , ' 计算机 ' )
-- 创建一个成绩表
create table cj (
id int identity ( 1 , 1 ) ,
stu_id varchar ( 20 ) references stuinfo ( stu_id ) ,
km_id int references km ( km_id ) ,
cj int check ( cj >= 0 and cj <= 100 ) not null
)
insert into cj values ( '10001' , 1 , 80 ) , ( '10001' , 2 , 75 ) , ( '10001' , 3 , 90 ) ,
( '10001' , 4 , 95 ) , ( '10002' , 1 , 88 ) , ( '10002' , 2 , 98 ) , ( '10002' , 3 , 70 ) ,
( '10002' , 4 , 95 ) , ( '10003' , 1 , 30 ) , ( '10003' , 2 , 55 ) , ( '10003' , 3 , 91 ) , ( '10003' , 4 , 92 ) ,
( '10004' , 1 , 83 ) , ( '10004' , 2 , 85 ) , ( '10004' , 3 , 70 ) , ( '10004' , 4 , 65 )
select * from km
select * from cj
-- 查询学生为 10001 学生的平均成绩
select avg ( cj ) 平均成绩 from cj where stu_id = '10001'
-- 查询学生为 10001 学生的总成绩
select sum ( cj ) 总绩 from cj where stu_id = '10001'
-- 查询每个学生的总成绩
select stu_id 学号 , sum ( cj ) 总成绩 from cj group by stu_id
-- 查询每门课程平均成绩
select km_id 课程号 , avg ( cj ) 平均成绩 from cj group by km_id
-- 查询每门课程最高成绩
select km_id 课程号 , max ( cj ) 平均成绩 from cj group by km_id
-- 列出学生的总成绩大于 350 分的学生的信息
-- 使用 group by 进行分组时,如果需要用到条件语句,后面只能使用 having 做条件表达式关键字,不能使用
where
select stu_id 学号 , sum ( cj ) 总成绩 from cj group by stu_id having sum ( cj ) > 350
-- 列出每门课程的平均成绩
select km_id 课程号 , avg ( cj ) 平均成绩 from cj group by km_id
select * from class
select * from stuinfo
-- 将学生信息表中 id 编号为 7 9 的学生的班级修改为 1234
update stuinfo set cla_id = '1234' where id between 7 and 9
3、连接查询
use student
/*
连接查询:
连接查询主要应用在两张及以上有数据关联的数据查询过程中。
连接查询的分类:内连接、外连接、交叉连接
内连接:指的两表所查询结果是一样的;
左外连接:指的是查询的结果以左表为准,如果右表没有内容,则显示 null
右外连接:指的是查询的结果以右表为准,如果左表没有内容,则显示 null
全外连接:指的是查询的结果为全部结果,即两个表的所有行,如果一个没有,则显示空值。
*/
-- 案例:查询学生的总成绩,要求显示学生的姓名,总成绩
-- 查看学生信息表
select * from stuinfo
-- 查看科目信息表
select * from km
-- 查看成绩信息表
select * from cj
-- 案例:查询学生的总成绩,要求显示学生的学号,总成绩
select stu_id 学号 , sum ( cj ) 总成绩 from cj group by stu_id
select stu_name,cj,km_name from stuinfo st,cj,km where st .stu_id = cj .stu_id and
km .km_id = cj .km_id
/*
内连接:
select 字段 from 1 inner join 2 on 条件表达式(表 1 和表 2 相同的字段)
*/
-- 列出有成绩学生的所有信息及成绩信息
select st. * ,cj from stuinfo st inner join cj on st .stu_id = cj .stu_id
select st. * ,cj from stuinfo st join cj on st .stu_id = cj .stu_id
/*
左外连接:
select 字段 from 1 left join 2 on 条件表达式(表 1 和表 2 相同的字段)
右外连接:
select 字段 from 1 right join 2 on 条件表达式(表 1 和表 2 相同的字段)
全外连接
select 字段 from 1 full join 2 on 条件表达式(表 1 和表 2 相同的字段)
*/
-- 左连接
select st. * ,cj from stuinfo st left join cj on st .stu_id = cj .stu_id
-- 右连接
select st. * ,cj from stuinfo st right join cj on st .stu_id = cj .stu_id
select * from class
-- 插入一条数据
insert into stuinfo ( stu_id,stu_name,stu_sex,stu_age,stu_tel,stu_add )
values ( '10010' , ' 张飞 ' , ' ' , 20 , '133235' , ' 二七区 ' )
-- 左连接:以左表为主,左表 stuinfo, 右表为 class
select * from stuinfo -- 左表
select * from class -- 右表
-- 左连接
select * from stuinfo st left join class cl on st .cla_id = cl .cla_id
-- 右连接:
select * from stuinfo st right join class cl on st .cla_id = cl .cla_id
-- 全连接
select * from stuinfo st full join class cl on st .cla_id = cl .cla_id
-- 内连接
select * from stuinfo st inner join class cl on st .cla_id = cl .cla_id
select * from stuinfo st join class cl on st .cla_id = cl .cla_id where
cl .cla_id = '12345'
select stu_name,st .cla_id from stuinfo st,class cl where st .cla_id = cl .cla_id
-- 修改学生张三的班级编号信息
update stuinfo set cla_id = NULL where stu_id = '10001'
-- 查询学生的成绩,要求显示学生的姓名,所选课程的名称,成绩
select stu_name 学生姓名 , km_name 课程名称 ,cj 成绩 from stuinfo st
join cj on st .stu_id = cj .stu_id
join km on cj .km_id = km .km_id
-- 查询学生的成绩,要求显示学生的姓名,所选课程的名称,成绩,以内连接实现
select cla_name 班级名称 ,stu_name 学生姓名 , km_name 课程名称 ,cj 成绩 from stuinfo st
join cj on st .stu_id = cj .stu_id
join km on cj .km_id = km .km_id
join class cl on st .cla_id = cl .cla_id
-- 查询学生的成绩,要求显示学生的姓名,所选课程的名称,成绩,以左外连接实现
select cla_name 班级名称 ,stu_name 学生姓名 , km_name 课程名称 ,cj 成绩 from stuinfo st
left join cj on st .stu_id = cj .stu_id
left join km on cj .km_id = km .km_id
left join class cl on st .cla_id = cl .cla_id
-- 查询学生的成绩,要求显示学生的姓名,所选课程的名称,成绩,以右外连接实现
select cla_name 班级名称 ,stu_name 学生姓名 , km_name 课程名称 ,cj 成绩 from stuinfo st
right join cj on st .stu_id = cj .stu_id
right join km on cj .km_id = km .km_id
right join class cl on st .cla_id = cl .cla_id
-- 查询学生的成绩,要求显示学生的姓名,所选课程的名称,成绩,以全外连接实现
select cla_name 班级名称 ,stu_name 学生姓名 , km_name 课程名称 ,cj 成绩 from stuinfo st
full join cj on st .stu_id = cj .stu_id
full join km on cj .km_id = km .km_id
full join class cl on st .cla_id = cl .cla_id
/* 交叉连接也叫笛卡尔积:
格式:
select 字段名 from < A> cross join < B> [where 条件表达式 ]
不带 where 条件,显示是两个表的行数的乘积,例如 A 表为 10 行, B 表为 5 行,则结果返回为 50
如果带 where 条件,则显示满足 where 条件的记录行
*/
-- 案例一 : 不带 where 条件
select * from stuinfo cross join class
-- 案例二:带上 where 条件
select * from stuinfo st cross join class cl where cl .cla_id = '12345' and
st .cla_id is not null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云上荆楚丨云轴科技ZStack成功实践精选(湖北)

湖北自古以来有九省通衢的美称&#xff0c;地处长江中游&#xff0c;富有荆楚之美誉&#xff0c;灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发&#xff0c;计划到“十四五”末&#xff0c;数字经济核心产业增加值力争达到7000亿元&#xff0c;占GDP的比重超过12%。…

《每天一分钟学习C语言·七》指针、字节对齐等

1、 对于二维数组如a[3][4]可以当做有三个元素的一维数组&#xff0c;每个元素包含四个小元素。 2、 printf(“%-5d”, i); //负号表示左对齐&#xff0c;5d表示空五个光标的位置 3、 栈&#xff1a;先进后出&#xff0c;堆&#xff1a;先进先出 4、 &#xff08;1&#xff…

【HTML5】HTML5 语音合成

一、前言 前一段时间在项目中需要用到播报文字语音。找到了 HTML 5 有这样的功能。 现在有时间进行总结下。 二、SpeechSynthesis SpeechSynthesis 接口是语音服务的控制接口。它可以用于获取设备上关于可用的合成声音的信息&#xff0c; 开始、暂停语音&#xff0c;或者别…

位运算:Leetcode137.只出现一次的数字(2)

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3示例 2&#xff1a; 输入&…

《工具箱-SVN》SVN安装、备份、迁移教程

文章目录 一、服务器搭建SVN1.检查SVN是否存在2.安装SVN3.创建版本库4.创建版本库存放文件地址5.修改配置文件5.1 vim authz5.2 vim passwd5.3 vim svnserve.conf 6.启动并查看SVN7.SVN Checkout8.SVN Update9.SVN Commit 二、SVN-无法连接主机&#xff0c;目标计算机积极拒绝&…

案例 | 电源自动检测测试系统为某电子科技公司定制电源测试解决方案

一、测试背景 陕西某电子科技公司是一家专业生产设计军品电源、集成电路以及电子元器件的高新技术企业&#xff0c;公司虽有一套半自动ATE测试系统&#xff0c;但使用过程繁琐复杂且无法满足日益增长的测试需求&#xff0c;因此公司现需要一套更加优秀的全自动电源测试系统来应…

工具系列:PyCaret介绍_多分类代码示例

&#x1f44b; 工具系列&#xff1a;PyCaret介绍_多分类代码示例 PyCaret 介绍 PyCaret是一个开源的、低代码的Python机器学习库&#xff0c;可以自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具&#xff0c;可以大大加快实验周期并提高生产效率。 与其他开…

HDFS NFS Gateway(环境配置,超级详细!!)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f618;《CTF专栏》超级详细的解析&#xff0c;宝宝级教学让你从蹒跚学步到健步如飞&#x1f648; &#x1f60e;《大数据专栏》大数据从0到秃头&#x1f47d;&…

【论文阅读】FreeU: Free Lunch in Diffusion U-Net

FreeU: 无需训练直接提升扩散模型生成效果。 paper&#xff1a;https://arxiv.org/abs/2309.11497 code&#xff1a;GitHub - ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net 1. 介绍 贡献&#xff1a; •研究并揭示了U-Net架构在扩散模型中去噪的潜力&#xff0…

Redis单机、主从、哨兵、集群配置

单机配置启动 Redis安装 下载地址&#xff1a;Download | Redis 安装步骤&#xff1a; 1: 安装gcc编译器&#xff1a;yum install gcc 2: 将下载好的redis‐5.0.3.tar.gz文件放置在/usr/local文件夹下&#xff0c;并解压redis‐5.0.3.tar.gz文件 wget http://download.re…

react生命周期详解,代码示例(新生命周期,与旧生命周期对比)

旧生命周期&#xff1a;https://blog.csdn.net/kkkys_kkk/article/details/135130549?spm1001.2014.3001.5501 目录 React 生命周期中常见的坑 为什么要移除 “will” 相关生命周期方法呢&#xff1f; Fiber是什么 新生命周期图示 新增生命周期与功能变化 完整生命周期…

C语言操作符详解+运算符优先级表格

目录 前言 一、操作符是什么&#xff1f; 二、操作符的分类 三、算术操作符 四、逻辑操作符 五、比较操作符 六、位操作符 七、赋值操作符 八、其他操作符 九、运算符优先级表格 总结 前言 在编写程序时&#xff0c;最常用到的就是操作符&#xff0c;本文将详细的介绍…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(28)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(27) 上回书在探究i915_gem_object_lookup_rcu函数调用idr_find函数时所传递的参数的时候,由第1个实参&file->object_idr引出了对于它是在何时何处赋值的探索。 static inline struct drm_i915_…

RAG框架LlamaIndex核心——各种索引应用分析

目录 LLM私域数据训练问题 什么是LlamaIndex 提供的工具 如何使用 一些核心术语

Golang 的内存管理

文章目录 1.内存管理角色1.常见的内存分配方法线性分配器空闲链表分配器TCMalloc 2.Go 内存管理组件mspanmcache初始化替换微分配器 mcentralmheap 3.内存分配4.内存管理思想参考文献 1.内存管理角色 内存管理一般包含三个不同的组件&#xff0c;分别是用户程序&#xff08;Mu…

对比学习综述

1.简介 2.相关工作 2.1、Inst Disc 代理任务&#xff1a;个体判别。把每一个图片看作是一种类别&#xff0c;把每一个图片都区分开来。 正负样本选择&#xff1a;正样本是图片本身&#xff0c;负样本是数据集里的其他图片&#xff0c;该文章从memory bank中随机抽取4096个负…

【C语言】指针详解(三)

1.指针运算 指针的基本运算有三种&#xff0c;分别是:⭐指针-整数 ⭐指针-指针 ⭐指针的关系运算 1.1指针 - 整数 因为数组在内存中是连续存放的&#xff0c;只要知道第一个元素的地址&#xff0c;顺藤摸瓜就能找到后面的所有元素。 int arr[10]{1,2,3,4,5,6,7,8,9,10} #inc…

劈窗算法反演地表温度

目录 摘要操作步骤提取热红外单波段提取NDVI同步像元分辨率与个数劈窗算法地表温度反演制图 摘要 主要使用HJ-2&#xff08;环境减灾二号卫星&#xff09;的IRS传感器的两个热红外波段&#xff0c;以及红波段与近红波段计算得到的NDVI&#xff0c;使用劈窗算法&#xff0c;得到…

贪吃蛇(五)蛇撞墙

上节我们实现了蛇身向右移动的功能&#xff0c;原理就是增加一个节点&#xff0c;删除一个节点。 本节我们处理蛇撞墙重置的功能 实现原理 在移动函数中检查蛇头&#xff08;链表尾节点&#xff09;是否达到墙边的坐标&#xff0c;这里有四种撞墙的情况&#xff1a; 上墙&am…

排障启示录-终端无法接入网络

问题现象&#xff1a;终端连接无线提示无法接入 可能故障方向&#xff1a; 1、策略限制终端接入 2、接入过程不完整 3、存在反制 4、距离较远导致无法接入 信息收集&#xff1a; 全部终端无法接入&#xff1a; 从AP后台打印wifilog或者空口抓包&#xff0c;查看终端从接…