在UPDATE语句使用FROM子句:
Select * from studentInfo Update studentInfo set s sex=b。性别,s_address=b.家庭住址,s_id=b.学号 From studentinfo a join 学生信息 b on a.s_name=b.姓名 Where b.性别=‘女’ 插入数据更新。从其他表找出单列指定数据
DELETE语句:
删除操作:DELETE FROM [WHERE ] SELECT * FROM 学生信息1????????????????????
TOP关键字和Top表达式:
语法:
[ 返回记录,前几条 TOP(expression)[PERCENT] [WITH TIES] 最后一个值相等返回 ]
实操:
Select top 10 peercent * from 成绩信息 查询前十条记录,百分比查询记录 Declare @i int Set @i=20 Select top (6)* from 成绩信息 order by 分数 排序显示 Select top (6)with ties * from 成绩信息 order by 分数 排序显示 当数据相同时,会多出现几个 Update top(6)学生信息 set 民族=‘满足’ 修改 Select * from 学生信息 修改前六行数据
COMPUTE子句:
语法格式:
[ COMPUTE {{AVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM} (expression)}[,…n] [ BY expression [,….n] ]
实操:
Select * from 成绩信息 where 课程编程=2 ORDER BY 考试编号 排序(筛选数据) Compute sum(分数),AVG(分数),MIN(分数) 查询分数总 平均 最大 最小,
Where子句中使用运算符:
实操:
Select * from成绩信息 where 考试编号=‘0802’ AND 课程编号=1 Select * from成绩信息 where 考试编号=‘0802’ AND (分数 between 90 and 95) Select * from成绩信息 where 考试编号=‘0802’ AND (分数 % 5=0) In (85,90)查询规定值 not in () 指定之外的数据
第七章 连接
基本链接
多表查询,多表链接。
规则:SELECT子句列表中,每个目标列前都要加上基本表名称。FROM子句应该包裹所有使用的基表。WHERE子句应定义一个同等连接。
实操:
SELECT A.姓名,A。性别,A。出生日期,A。民族 FROM 学生信息 a,班级信息 B WHERE A.所属班级=B.班级班号
两个表的信息连接到共同的一个临时表中。以方便查看。这个属于一个表内的一个信息等于另一个表内的信息
内连接
格式:
SELECT select list FROM table1 INNER JOIN table2 [ON join conditions] [WHERE search_conditions] [ORDER BY order_expression]
实操:
SELECT A.班级名,A.班级人数, B.姓名 FROM 班级信息 A inner[A1] join 辅导员信息 B ON A.辅导员=B.辅导员编号 AND B.=’女’ [A2]
两个表的信息组件一个临时表,各自抽取一列信息,并一个表内的信息等于另一个表的信息。可以为后者添加条件限制。
左外连接:
外连接与内连接的区别:内连接消除另一个表的任何行不匹配的行。仅为,在外连接中参与连接的表有主从之分,以主表为主。
实操:
SELECT A.班级名,A.班级人数, B.姓名 FROM 班级信息 A LEFT outer [A3] join 辅导员信息 B
ON A.辅导员=B.辅导员编号 AND A.班级人数>20[A4] 会出现空值,不符合数据也返回 即使加上规则条件也一样
右外连接
SELECT A.班级名,A.班级人数, B.姓名
FROM 班级信,a RIGHT outer [A5] join 辅导员信息.b
ON A.辅导员=B.辅导员编号
作用基本相同,主从表互换。
全外连接
SELECT A.班级名,A.班级人数, B.姓名
FROM 班级信,b FULL outer [A6] join 辅导员信息.a
ON A.辅导员=B.辅导员编号
可以出来全部信息。不匹配的也会出现。
SELECT A.班级名,A.班级人数, B.姓名
FROM 班级信,a FULL outer [A7] join 辅导员信息.b
ON A.辅导员=B.辅导员编号
顺序排列,先出现匹配,在出现不匹配
交叉连接
不带WHERE子句。顺序连接1,2.a,b 会出现1a,1b,2a,2b
语法格式:
SELECT select_list FROM table1 CROSSJOIN table2 [WHERE search_conditions] [ORDER BY ORDER_expression]
实操:
SELECT A.班级名称,A.人数,B.姓名 FROM 班级信息 A CROSS JOIN[A8] 辅导员信息 B 符合情况全排列出现。 WHERE A.辅导员=B.辅导员编号 符合条件的留下,不在全排列。
自连接
SELECT A.班级名,A.班级人数,B.班级名 FROM 班级信息 A,班级信息 B AND A.班级班号<>b.班级班号(添加后,去重) WHERE A.班级人数=B.班级人数 AND A.班级名=‘艺术系2班’(只查询=后相符的班级) 人数相等班级出现,但是同一个班重复出现
联合查询
多个查询合并。使用UNION查询时,连接的连个结果集必须有相同数目的表达式,且数据内容尽量保持一致。
语法格式:
SELECT select_list FROM table_source [WHERE search_conditions] {union[all] SELECT select_list FROM table_source [WHERE search_conditions]} [ORDER BY order_expression]
实操:
SELECT A.成绩编号,A.分数,B.姓名 FROM 成绩信息 A.学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘2’ AND A. 考试编号=‘0801’ UNION 联合上下数据成一个表 SELECT SUM(分数),’合计’ FROM 成绩信息 A.学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘2’ AND A. 考试编号=‘0801’ UNION 可以继续联合(视频添加了一个平均) ORDER BY 分数 排序 使用子查询 包含在where之下。
实操:
SELECT A.成绩编号,A.分数,B.姓名 FROM 成绩信息 A.学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘2’ AND A. 考试编号=‘0801’ AND A.分数<( (可以使用in,用学号,班级编号,所属班级,) SELECT ABG(分数) FROM 成绩信息 A.学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘2’ AND A. 考试编号=‘0801’ )个性化需求 在多个数据中通过限制多个条件,精确查找其中所需数据 嵌套子查询
直接实操:
SELECT A.成绩编号,A.分数,B.姓名 FROM 成绩信息 A.学生信息 B WHERE A.学生编号=B.学号 AND A.课程编号=‘2’ AND A. 考试编号=‘0801’ AND B.学号 IN( SELECT 学号 FROM 班级信息 A.学生信息 B WHERE A.班级编号=B.所属班级 AND A.辅导员=( SELECT 辅导员编号 FROM 辅导员信息 WHERE 姓名=’王艳’ ) )多个查询,好比一个地址,每一次查询缩小一次范围,例如:中国河北省石家庄市,第一个查询中国,第二个查询河北省,第三个是石家庄,每一次所需要的范围不断的缩小。
Xml查询
查询具体信息。
CREATE TABLE STUDENT
CREATE TABLE STUDENT ( S_IF INT, S_data xml ) INSERT INTO STUDENT VALUES( 1, ‘<学生信息><姓名>刘倩</姓名><性别>女</性别><班级>计算机科学与技术1班</班级> <职位>班长</职位></学生信息>’ 前期准备 SELECT * FROM STUDENT Declare @data xml Set @data=(SELECT S_data FROM STUDENT where S_ID=1) SELECT @data.query(‘学生信息/姓名’_,@data.query(‘学生信息/’性别’) ,@data.query(‘学生信息/姓名’) ———————————————— 版权声明:本文为CSDN博主「李金轩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_37081112/article/details/100140858
FOR XML子句
可以将从表中检索出来的数据自动表示成XML格式。
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式 FROM 班级信息 A,辅导员信息 B WHERE A.辅导员= B.辅导员编号 FOR XML RAW (AUOT)
EXISTS关键字查询
判断子查询。
实操:
Select a.* from 成绩信息 a Where exists(select * from 考试安排 b where b.考试编号=a.考试编号 and b.考试编号=’0801’ 筛选一个, Declare @username varchar(20) Declare @pwd varchar(20) Set @username=’2005040102’ Set @pwd=’苏某某’ If exists(select * from 学生信息 where 学号=@username AND 姓名=@pwd) Print ‘登录成功’ Else Print’登录失败’
交查询INTERSECT
Select a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b Where a.学生编号=b.学号 and a.课程编号=2 and a.考试编号=’0801’ 分类查询 INTERSECT SELECT a.成绩编号,a.分数,A.姓名 FROM ( Select top 10 a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b Where a.学生编号=b.学号 and a.考试编号=‘0801’ order by a.分数 DESC )A 分类查询 组合查询 差查询EXCEPT
列必须固定和相同。语句与前几个基本相同。
Select a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b Where a.学生编号=b.学号 and a.课程编号=2 and a.考试编号=’0801’ 分类查询 EXCEPT INTERSECT SELECT a.成绩编号,a.分数,A.姓名 FROM ( Select top 10 a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b Where a.学生编号=b.学号 and a.考试编号=‘0801’ order by a.分数 DESC )A
第八章 函数
Transact-SQL概述
结构化查询语言(被定义的语言,被Microsoft公司对其实现)
这是SQL的增强版。在关系数据库管理系统中实现检索,操纵,和添加功能
分类:
T-SQL语言基本分为三类
数据定义语言
数据操纵语言DML
数据控制语言
其他常用类型
事务管理语言
流程控制语言
附加的语言元素
常量与变量
变量声明:
DECLADE(声明) {@名称[AS]数据类型 |@cursor_variable_nameCURSOR }[,…n] 局部变量赋值 SET@local_variable=expression SELECT@local_variable=expression[,...n] 运算符 +-*/%(取模)&(为与逻辑运算。同1为1,不同取0)|(位或逻辑运算同0为0,不同为1)^(位异或运算。相同为同,不同为1)。= <> < > !=
逻辑运算符:两组相对ALL和ANY AND 和OR not 去反值 in匹配等true。
赋值=。链接+。一元:+正,-负,~返回数字的逻辑非
表达式
变量和常量也是表达式。
DECLARE @STR NVARCHAR(50) SELECT @STR=’姓名:’+ 姓名+’性别:’+性别 FROM 学生信息 WHERE 学号=’2005050101’ SELECT @STR
注释
养成良好的开发习惯。为了同别人合作开发或转移工作时方便别人接受。不被执行的文本执行,注释方法1,(--)。2,(/*…*/)在SQL中使用。
IF…ELSE语句
流程控制语句。
语法格式:
IF Boolean_expression {sql_statement|statement_block} ELSE {sql_statement|statement_block}
实操:
Declare @num int ‘定义类型数字 Select @num=AVG(分数) ‘求分数平均值 From 成绩信息 ‘从成绩信息中提取数据 WHERE 考试编号=’0802’ AND 课程编号=’2’ ‘子查询规则 SELECT @num IF @num>80 ‘当平均分大于80时 BEGIN ‘开始 PRINT ‘老师教课非常成功。’ ‘打印出 ’&’ END ELSE PRINT ‘还需要继续努力。’ ‘打印出 ‘&’ IF…ELSE语句嵌套
实操:
DECLARE @NUM INT ‘声明变量 SELECT @num=AVG(分数) ‘求平均数 FROM 成绩信息 ‘从成绩信息提出数据 Where 课程编号=’2’ AND 考试编号=’0802’ ‘子查询规则 IF @NUM>=60 ‘如果大于等于60 BEGIN ‘开始 IF @NUM<70 ‘如果小于70 PRINT ‘成绩刚刚及格,还要继续努力’ ‘打印 ELSE IF @NUM<80 ‘如果小于80 PRINT ‘成绩中等’ ‘打印 ELSE IF @NUM<90 ‘如果小于90 PRINT ‘成绩良好’ ‘打印 ELSE PRINT ‘成绩优秀’ ‘或者-打印 END ‘结束 ELSE ‘或者小于60 PRINT’这个老师教学方法需要改进’ ‘打印
Case语句
语法格式:
CASE input_expression WHEN when_expression THEN result_expression […n] [ELSE else_result_expression] END
Case语句示例
实操:
SELECT * 员工姓名,所在职位,员工职称= ‘选中表中的列 case 所在职位 ‘判断职位 when ‘经理’ then ‘高级职称’ ‘在经理时,高级 when ‘主管’ then ‘中级职称’ when ‘职员’ then ‘初级职称’ else ‘其他职称’ ‘或者不是以上三者时 end FROM 员工信息 ‘从员工信息表中提取数据
While语句
语法格式:
WHILE Boolean_expression {sql_statement | statement_block} [BREAK] {sql_statement | statement_block} [CONTINUE] {sql_statement | statement_block}
实操:
DECLARE @i int,@num int ‘声明 SET @i=1 ‘赋值 Set @num=1 While @i<10 ‘在这段时间内 Begin @num=@num*@i @i=@i+1 End Print @num
While语句示例
实操:
可以从公司级别中挑选选中级别。并分等级。用While语句控制
While语句中使用其他语句
实操:
Declare @i int ‘定义变量i,j为整数 Declare @j int Set @i=3 ‘赋值 While @i<=100 ‘当i≤100 Begin ‘开始 Declare @bol int ‘定义bo1为整数 Set @bo1=1 ‘赋值 Set @j=2 While @j<=SQRT(@i) ‘当j≤平方根j时 Begin ‘开始 If @i%@j=0 ‘整除为0时 Begin ‘开始 Set @bo1=0 ‘所以不是素数 Break ‘跳出循环 End set@j=@j+1 ‘变量递增 end if @bo1=1 print @i ‘如果是1,则输出 set @i=@i+1 ‘外部循环 end
WAITFOR延迟语句
语法格式:
WAITFOR { DELAT time |TIME time }
实操:
Waitfor delay ’00:00:05’ ‘5秒后执行 Exec sp_help ‘存储过程 Waitfor time ’21:11:05’ ‘到点执行 Exec sp_help ‘存储过程 Select GETDATE