增 insert into
-- 添加单条数据
-- insert into 学生表 values('40','邹扬光','男','2003-5-8','信息工程',19875189221);
-- 添加多条数据
--INSERT INTO 学生表 (学号,姓名,性别,所在系) VALUES
--('小乔大王1','小乔大王','女','宇宙社会学'),
--('小乔大王2','小乔大王','女','宇宙社会学'),
--('小乔大王3','小乔大王','女','宇宙社会学')
--查询结果添加
--insert into 学生选课表 select * from sc选课
改
--update 表名
--set 列名=值
--from 多表的情况 (可选)
--where 条件表达式(可选)
--update 学生选课表
--set 学生选课表.成绩=学生选课表.成绩+学生选课表.成绩*(课程表.学分/100.0)
--from 学生表,课程表
--where 学生表.所在系='现代交通' and 学生选课表.学号=学生表.学号 and 学生选课表.成绩<90 and 学生选课表.成绩 is not null and 学生选课表.课程号=课程表.课程号;
--删除 表数据
--delete 表名
--from 多表的情况(可选)
--where 条件表达(可选)
--delete 学生选课表
--where 成绩 is null
--delete 学生选课表
--from 学生表
--where 成绩 is null and 学生选课表.学号=学生表.学号 and 所在系='信息工程'
--查看数据
--SELECT 列名
--FROM 表名
--WHERE 条件表达式
--GROUP BY 分组列名
--HAVING 筛选 条件表达式
--ORDER BY 排序规则
--SELECT * FROM 学生表 WHERE 学生表.姓名 in ( '邹扬光','小乔大王');
--select DATEADD(YEAR,1,'2023-11-15') DATEADD(要改变时间单位,要修改多少(负数减少,正数添加),要修改的时间) DATEADD 增加 减少时间
--SELECT GETDATE();当前时间
--SELECT YEAR(GETDATE())当前时间的年份
--SELECT 学生表.出生日期 FROM 学生表 WHERE 出生日期 is not null;--出生日期 不是空的
--SELECT datediff(YEAR,GETDATE(),'2026') --datediff 计数日期间隔函数 datediff(日期和时间单位,开始日期和时间,结束日期和时间)
--SELECT lower(课程表.课程号)as'课程表' from 课程表 -- lower 小写
--SELECT upper(课程表.课程号)as'课程表' from 课程表 -- upper 大写
--SELECT len(课程表.课程号)as'课程表' from 课程表 -- len 长度
--SELECT distinct 学生选课表.学号 FROM 学生选课表 --distinct 去重
--SELECT 查询的数据 FROM 表名 别名 LEFT JOIN 表名 别名 ON 条件 --JOIN 链接 LEFT JOIN左链接 左边为主表
--SELECT * FROM 学生表 WHERE 学生表.所在系='信息工程' and 学生表.出生日期 between '1990-1-1' and '1999-12-31';--between 范围
--SELECT * FROM 学生选课表 WHERE not 学生选课表.成绩 = 90; --not 不
;--LIKE 字符匹配 %任意字符 _单个字符 [] 或
--SELECT * FROM 学生表 WHERE 学生表.姓名 like '小%'
--SELECT * FROM 学生表 WHERE 学生表.姓名 like '李_'
--select * from 学生表 WHERE 所在系 = '信息工程' AND 学生表.姓名 LIKE '[李张王]%' AND YEAR(GETDATE())-YEAR(出生日期) >= 18;
-- ORDER BY 排序 默认 升序
-- ASC 升序
-- DESC 降序
-- SELECT * FROM 表名称 ORDER BY 列名称 ASC
-- SELECT * FROM 表名称 ORDER BY 列名称 DESC
-- ORDER BY 多重排序
-- SELECT * FROM 表名称 ORDER BY 列名称 ASC,列名称 DESC
-- COUNT 统计数量
-- SELECT COUNT(*) AS '人数' FROM 学生表;
-- AVG 平均
-- MAX 最大
-- MIN 最小
-- SUM 和
-- Top 排在前面的数据 PERCENT百分比
-- SELECT top 5 * FROM 学生表;--前5条
-- SELECT TOP 10 PERCENT * FROM 学生选课表 ORDER BY 学生选课表.成绩 DESC;--前 10 % 条 PERCENT %
--联合查询
-- SELECT * FROM 学生表 WHERE 所在系 = '信息工程' AND 学生表.出生日期=(SELECT MIN(学生表.出生日期) FROM 学生表 WHERE 所在系 = '信息工程');
-- GROUP BY 对数据进行分组
-- HAVING 过滤
-- SELECT 学号, COUNT(*) AS 选课门数 FROM 学生选课表 WHERE 学生选课表.成绩 IS NOT NULL GROUP BY 学生选课表.学号 HAVING COUNT(*) >4;
-- 多表查询
--SELECT 查询的数据 FROM 表名 别名 LEFT JOIN 表名 别名 ON 条件
--SELECT 学生表.姓名,学生选课表.*,课程表.课程名
--FROM 学生选课表,学生表,课程表
--WHERE 学生选课表.学号=学生表.学号 AND 学生选课表.课程号=课程表.课程号
--嵌套查询
--查询各门课程的最高分的学生综合信息(学号,姓名,课程名,最高分,所在系)
--select 学生表.学号,姓名,课程名,最高分,所在系
--from 学生表,学生选课表,
--(select 课程表.课程号,课程名,max(成绩) '最高分'
--from 学生选课表,课程表
--where 课程表.课程号=学生选课表.课程号
--group by 课程表.课程号,课程名) T
--where 学生表.学号=学生选课表.学号 and 学生选课表.课程号 = T.课程号 and 学生选课表.成绩 = T.最高分
--ORDER BY 课程名
--查询姓氏出现次数最多的学生信息
--(分析:该题属于按照姓氏查找学生信息,需要进行字符串截取。
--先根据姓氏进行分组,统计每个姓氏的次数,然后提取出次数的最大值,
--再次找出该次数所对应的姓氏,最后根据姓氏找出符合该条件的学生)
--SELECT * from 学生表 where left(学生表.姓名,1) in (
--SELECT left(学生表.姓名,1) FROM 学生表 group by left(学生表.姓名,1) having count(*)=(
--SELECT top 1 count(*) FROM 学生表 group by left(学生表.姓名,1) ORDER BY count(*) desc));
--切片
--SELECT left(学生表.姓名,1) FROM 学生表;
-- into 备份 表
--SELECT * into s FROM 学生表
--SELECT * into c FROM 课程表
--SELECT * into sc FROM 学生选课表
--集合操作
--(12345)(23896)
--union 并 (12345689)
--EXCEPT 差 (145)
--INTERSECT 交(23)
--、查询信息工程系的学生以及成年的学生信息(学号,姓名)
--select * from 学生表
--where 学生表.出生日期 is not null and datediff(YEAR,学生表.出生日期,GETDATE())>=18
--union
--select * from 学生表 where 学生表.所在系='信息工程';
--恢复
--delete 学生选课表
--select * from 学生选课表
--insert into 学生选课表 select * from sc选课
--insert into 学生选课表 select * from sc选课 where 成绩 is null
--insert into 学生选课表
--select * from 学生表,学生选课表
--where 成绩 is null and 学生选课表.学号=学生表.学号 and 所在系='信息工程'