SQL Sever入门
SQL Sever入门一、建库建表1. 创建数据库如果需要创建数据库可能会出现数据库名字重名的现象我们可以使用如下代码查询数据库名是否存在存在则删除此数据库。删除有风险请注意if exist(select *from sys.databases where name Mydatabase) drop database Mydatabase2. 创建数据库create database Mydatabase on--数据文件 ( name Mydatabase,--逻辑名称 filename D:\Database\Mydatabase.mdf, --存放路径以及逻辑名称 size 8MB,--文件初始大小 filegrowth 10% --增长率也可以使用MB ) log on--日志文件 ( name Mydatabase_log,--逻辑名称 filename D:\Database\Mydatabase_log.ldf, --存放路径以及逻辑名称 size 8MB,--文件初始大小 filegrowth 10% )还可以使用以下方法创建数据库create database Mydatabase --数据文件和日志文件的信息全部采用默认值3. 建表在建表之前我们需要指定对应的数据库同时不允许存在同名的数据库所以需要进行判断然后删除原先的表仅限学习阶段。use Mydatabase --指定我们要建表的数据库 if exits(select * from sys.objects where name MySchool and type U) drop table Department(1) 创建语法create table 表名 ( 字段名1 数据类型(长度), 字段名2 数据类型(长度) ) --示例 create table Department ( DepartmentID int primary key identity(1,1), --创建部门编号int代表整型primary key代表主键identity(1,1)代表从1开始以1为步长自动增长 DepartmentName varchar(50) not null, --创建部门名称varchar(50)表示长度为50的字符串not null表示不能为空 DepartmentRemark text --创建部门的表述text表示长文本 )(2) 常用字符串类型。char定长例如char(5)无论存储的数据是否达到了5个字节都要占用5个字节的空间。 varchar可变长度例如varchar(5)表示最多占用5个字节。限长8000也可以使用varchar(max)表示最大长度。 text长文本最大长度为2^31-1个字符 nchar,nvarchar,ntext前缀为n表示Unicode数据类型的字符区别于varchar(100)可以存储100个英文字符或者50个中文汉字nvarchar(100)可以存储100个英文字符或者100个中文汉字。(3) 创建表create table [Rank] ( RankID int primary key identity(1,1) RankName varchar(50) not null, RankRemark text ) --创建职级表其中rank为关键字用于对结果集中的行进行排名遇到相同值时排名会跳跃所以我们添加[]表示自定义名字 create table Teacher ( TeacherID int primary key identity(1,1), DepartmentID int references Department(DepartmentID) not null,--references代表外键引用 RankID int references [Rank](RankID) not null, TeacherName varchar(50) not null, TeacherSex varchar(2) default(男) check(TeacherSex 男 or TeacherSex 女) not null --default代表默认字段,check可以规定字段值的约束条件 TeacherBirth datetime not null, TeacherSalary decimal(12,2) check(TeacherSalary 1000 and TeacherSalary50000) not null, TeacherPhone varchar(20) unique not null,--unique表示唯一约束,不能重复 TeacherAddress varchar(100), TeacherAddTime smalldatetime default(getdate()) --datetime和smalldatetime都可以表示时间类型getdate()用于获取系统当前的时间 )--创建老师信息表4. 修改表结构(1) 在表中添加列--语法 alter table 表名 add 列名 数据类型 --示例为教师添加邮箱 alter table Teacher add TeacherMail varchar(100)(2) 在表中删除列--语法 alter table 表名 drop column 列名 --示例删除邮箱 alter table Teacher drop column TeacherMail(3) 改变表中列的数据类型--语法 alter table 表名 alter column 列名 数据类型 --示例 改变邮箱列的数据类型为nvarchar(100) alter table Teacher alter column TeacherMail nvarchar(100)5. 添加删除约束(1) 添加约束--添加主键约束 alter table 表名 add constraint 约束名称 primary key(列名) --添加check约束 alter table 表名 add constraint 约束名称 check(约束表达式) --添加unique约束 alter table 表名 add constraint 约束名称 unique(列名) --添加default约束 alter table 表名 add constraint 约束名称 default 默认值 列名 --添加外键约束 alter table 表名 add constraint 约束名称 foreign key(列名) references 关联表名(关联列表名)(2) 删除约束if exists(select * from sysobjects where name约束名) alter table 表名 drop constraint 约束名; go二、插入数据1. 向部门表中插入数据--标准语法 insert into Department(DepartmentName,DepartmentRamark) values(教育部,......) insert into Department(DepartmentName,DepartmentRamark) values(纪律部,......) --简写语法省略字段名称 insert into Department values(卫生部,学校主管卫生工作的部门) --该写法在给字段赋值时必须保证顺序和数据表结构中字段顺序完全一致 --一次插入多行数据 insert into Department(DepartmentName,DepartmentRemark) select 教育部,负责学生教育工作 union select 纪律部,负责管理学生纪律 union select 宿管部,负责学生住宿管理2. 向职级表插入数据insert into [Rank](RankName,RankRemark) values(初级,能够完成基本工作) insert into [Rank](RankName,RankRemark) values(中级,可以担任管理人员) insert into [Rank](RankName,RankRemark) values(高级,这是领导)3.向教师表插入数据INSERT INTO Teacher (DepartmentID, RankID, TeacherName, TeacherSex, TeacherBirth, TeacherSalary, TeacherPhone, TeacherAddress) VALUES -- 斗破苍穹3人 (1, 1, 萧炎, 男, 1995-06-06, 3800.00, 13800000001, 浙江省乌坦城萧家旧宅), (1, 2, 药老, 男, 1989-11-23, 6500.00, 13800000002, 浙江省乌坦城郊外山洞), (1, 3, 海波东, 男, 1983-03-11, 12000.00, 13800000003, 加玛帝国米特尔家族总部), -- 斗罗大陆4人 (1, 1, 唐三, 男, 1995-11-28, 3600.00, 13800000004, 四川省唐门旧址), (1, 1, 小舞, 女, 1996-03-21, 3700.00, 13800000005, 四川省星斗大森林边缘), (1, 2, 玉小刚, 男, 1988-05-17, 6400.00, 13800000006, 四川省蓝电霸王龙家族), (1, 3, 比比东, 女, 1984-02-27, 12500.00, 13800000007, 四川省武魂殿总部), -- 凡人修仙传3人 (1, 1, 韩立, 男, 1996-07-14, 3900.00, 13800000008, 山东省青牛镇韩家村), (1, 2, 南宫婉, 女, 1990-12-15, 6300.00, 13800000009, 掩月宗大殿), (1, 3, 令狐老祖, 男, 1982-09-08, 12800.00, 13800000010, 黄枫谷后山禁地), -- 纪律部DepartmentID 2—— 10人 -- 斗破苍穹3人 (2, 1, 萧薰儿, 女, 1996-07-15, 3800.00, 13800000011, 浙江省乌坦城萧家后院), (2, 2, 云韵, 女, 1989-12-08, 6600.00, 13800000012, 云南省加玛帝国云岚宗), (2, 3, 美杜莎女王, 女, 1984-05-18, 13500.00, 13800000013, 塔戈尔大沙漠蛇人族神殿), -- 斗罗大陆4人 (2, 1, 戴沐白, 男, 1994-07-09, 3500.00, 13800000014, 天津市星罗帝国旧址), (2, 1, 宁荣荣, 女, 1997-12-05, 3800.00, 13800000015, 浙江省宁波市七宝琉璃宗), (2, 2, 柳二龙, 女, 1990-03-09, 6200.00, 13800000016, 四川省黄金铁三角驻地), (2, 3, 千仞雪, 女, 1985-07-16, 11800.00, 13800000017, 四川省天使神殿), -- 凡人修仙传3人 (2, 1, 墨彩环, 女, 1996-04-22, 3700.00, 13800000018, 越国七玄门旧址), (2, 2, 元瑶, 女, 1990-08-09, 6400.00, 13800000019, 乱星海妙音门), (2, 3, 向之礼, 男, 1983-11-03, 13000.00, 13800000020, 天南修仙界传送阵), -- 宿管部DepartmentID 3—— 10人 -- 斗破苍穹4人 (3, 1, 纳兰嫣然, 女, 1995-10-20, 3700.00, 13800000021, 云南省加玛帝国纳兰家), (3, 1, 小医仙, 女, 1996-02-14, 3600.00, 13800000022, 魔兽山脉山谷小屋), (3, 2, 萧战, 男, 1989-03-17, 6100.00, 13800000023, 浙江省乌坦城萧家大厅), (3, 3, 魂天帝, 男, 1982-12-25, 14500.00, 13800000024, 中州魂殿总部), -- 斗罗大陆3人 (3, 1, 奥斯卡, 男, 1996-10-31, 3650.00, 13800000025, 四川省史莱克学院), (3, 2, 弗兰德, 男, 1987-09-21, 6200.00, 13800000026, 四川省史莱克学院院长室), (3, 3, 唐晨, 男, 1982-09-28, 13200.00, 13800000027, 四川省昊天宗旧址), -- 凡人修仙传3人 (3, 1, 厉飞雨, 男, 1995-05-08, 3800.00, 13800000028, 越国七玄门演武场), (3, 2, 紫灵, 女, 1990-10-11, 6300.00, 13800000029, 乱星海星宫), (3, 3, 大衍神君, 男, 1982-06-19, 13800.00, 13800000030, 大晋国天机阁旧址);4. 查询数据是否插入成功select * from Department select * from [Rank] select * from Teacher三、修改和删除数据1. 修改数据示例--涨工资为每个老师500元工资 update Teacher set TeacherSalary TeacherSalary 500 --指定修改将教师工号为8的工资1000元 update Teacher set TeacherSalary TeacherSalary 1000 where TeacherID 8 --将教育部部门编号已知1所有教师工资低于1万的全部调成一万 update Teacher set TeacherSalary TeacherSalary 10000 where DepartmentID 1 adn TeacherSalary 10000 --将药老地址改为浙江省乌坦城萧家旧宅 update Teacher set TeacherAddress 浙江省乌坦城萧家旧宅 where TeacherName药老 --将韩立工资改为以前的两倍并修改其地址为天道盟落云宗青竹峰 update Teacher set TeacherAddress 天道盟落云宗青竹峰 where TeacherName 韩立2. 删除数据示例--删除教师表中所有数据 delect from Teacher --删除宿管部已知编号为3中工资大于15000的所有老师 delect form Teacher where DepartmentID 3 and TeacherSalary 150003. droptruncatedelete的区别drop table删除表对象其中表数据表结构表对象都进行了删除delete 和 truncate table删除表数据但是表对象以及表结构仍然存在delete和truncate table具体区别delete 1、可以删除表所有数据也可以根据条件删除数据 2、如有自动编号泽删除后继续编号例如delete删除表所有数据之后之前数据的编号是123那么之后新增的数据编号从4开始 truncate 1、只能清空整个表数据不能根据条件删除数据 2、如果有自动编号清空表数据后重新编号例如truncate删除表所有数据之后之前数据的编号是123那么之后新增的数据编号仍然从1开始四、基础查询1. 查询所有行所有列--查询所有部门 select * from Department --查询所有职级 select * from [Rank] --查询所有教师信息 select * from Teacher2. 指定列查询select TeacherName,TeacherSex,TeacherSalary,TeacherPhone from Teacher3. 指定列查询并自定义中文列名select TeacherName 姓名,TeacherSex 性别,TeacherSalary 工资,TeacherPhone 电话 from Teacher4. 查询学校老师所在的地点不需要重复数据select distinct TeacherAddress from Teacher --关键字 distinct 用于返回唯一不同的值去重5. 假设工资涨10%查询原始工资和调整后的工资显示姓名性别月薪和加薪后的月薪select TeacherName 姓名,TeacherSex 性别,TeacherSalary 月薪,TeacherSalary*1.1 加薪后月薪 from Teacher五、条件查询1. SQL中常用的运算符运算符作用用于比较是否相等以及赋值用于比较是否不相等用于比较是否不相等用于比较是否大于用于比较是否小于用于比较是否大于等于用于比较是否小于等于is null用于判断是否为空is not null用于判断是否不为空in用于判断是否在其中like模糊查询between…and…比较是否在两者之间and逻辑与两个条件同时成立则表达式成立or逻辑或两个条件有一个成立则表达式成立not逻辑非前面成立则后面不成立前面不成立则后面成立2. 查询示例--(1)根据指定列姓名性别工资电话查询性别为女的教师信息并自定义中文列名 select TeacherName 姓名,TeacherSex 性别,TeacherSalary 工资,TeacherPhone 电话 from Teacher where TeacherSex 女 --(2)查询月薪大于等于10000的教师信息 select * from Teacher where TeacherSalary 10000 --(3)查询月薪大于等于10000的女教师信息 select * from Teacher where TeacherSalary 10000 and TeacherSex 女 --(4)查询出生年月在1990-1-1之后并且月薪大于等于10000的女教师信息 select * from Teacher where TeacherBirth1990-1-1 and TeacherSalary 女 --(5)查询工资大于15000的教师或者工资大于8000的女教师信息 select * from Teacher where TeacherSalary 15000 or(TeacherSalary8000 and TeacherSex女) --(6)查询月薪在10000到20000之间的教师信息 select * from Teacher where TeacherSalary 10000 and TeacherSalary 20000 select * from Teacher where TeacherSalary between 10000 and 20000 --(7)查询出地址在落云宗或者掩月宗大殿的教师信息 select * from Teacher where TeacherAddress掩月宗大殿 or TeacherAddress天道盟落云宗青竹峰 select * from Teacher where TeacherAddress in(掩月宗大殿,天道盟落云宗青竹峰) --(8)查询所有教师信息并按工资降序排列 --order by 排序asc 正序desc 倒序 select * from Teacher order by TeacherSalary desc --(9)显示所有教师信息按照名字长度进行倒叙排序 select * from Teacher order by len(TeacherName) desc --(10)查询工资最高的10个人的信息 select top 10 * from Teacher order by TeacherSalary desc --(11)查询工资前百分之十的教师信息 select top 10 percent * from Teacher order by TeacherSalary desc --(12)查询没填地址的教师信息 select * from Teacher where TeacherAddress is null --(13)查询地址已经填写的教师信息 select * from Teacher where TeacherAddress is not null --(14)查询所有90后教师信息 select * from Teacher where TeacherBirth 1990-1-1 and TeacherBirth 1999-12-31 select * from Teacher where TeacherBirth between 1990-1-1 and 1999-12-31 select * from Teacher where year(TeacherBirth) 1990 and year(TeacherBirth) 1999 --(15)查询年龄在30-40 之间并且工资在15000-30000 之间的教师信息 select * from Teacher where (year(getdate())-year(TeacherBirth) 30 and year(getdate())-year(TeacherBirth) 40) and (TeacherSalary 15000 and TeacherSalary 30000) select * from Teacher where (year(getdate())-year(TeacherBirth) between 30 and 40) and TeacherSalary between 15000 and 30000 --(16)查询工资比萧炎高的人 select * from Teacher where TeacherSalary(select TeacherSalary from Teacher where TeacherName萧炎) --(17)查询出星座是天蝎座的人的信息10月24日至11月22日 select * from Teacher where (month(TeacherBirth) 10 and DAY(TeacherBirth) 24) or (month(TeacherBirth) 11 and DAY(TeacherBirth) 22) --(18)查询和萧炎地址一样的人 select * from Teacher where TeacherAddress (select TeacherAddress from Teacher where TeacherName 萧炎) --(19)查询出生生肖为羊的人 select * from Teacher where year(TeacherBirth)%1211 --(20)查询所有教师的信息添加一列显示生肖 select TeacherName 姓名,TeacherSex 性别,TeacherSalary 工资,TeacherPhone 电话,TeacherBirth 生日, case when year(TeacherBirth) % 12 4 then 鼠 when year(TeacherBirth) % 12 5 then 牛 when year(TeacherBirth) % 12 6 then 虎 when year(TeacherBirth) % 12 7 then 兔 when year(TeacherBirth) % 12 8 then 龙 when year(TeacherBirth) % 12 9 then 蛇 when year(TeacherBirth) % 12 10 then 马 when year(TeacherBirth) % 12 11 then 羊 when year(TeacherBirth) % 12 0 then 猴 when year(TeacherBirth) % 12 1 then 鸡 when year(TeacherBirth) % 12 2 then 狗 when year(TeacherBirth) % 12 3 then 猪 ELSE end 生肖 from Teacher六、模糊查询模糊查询使用like关键字和通配符结合实现常见通配符如下通配符作用%代表匹配0个字符、1个字符或多个字符。_代表匹配有且只有1个字符。[]代表匹配范围内[^]代表匹配不在范围内--(1)查询姓唐的教师信息 select * from Teacher Where TeacherName like唐% --(2)查询名字中含有宫的教师信息 select * from Teacher where TeacherName like %宫% --(3)查询名字中含有宫或者荣的教师信息 select * from Teacher where TeacherName like %荣% or TeacherName like %宫% --4查询姓唐名字是两个字的人 select * from Teacher where TeacherName like 唐_ select * from Teacher where SUBSTRING(TeacherName,1,1)唐 and LEN(TeacherName)2 --(5)查询最后一个字是儿名字共有三个字的人的信息 select * from Teacher where TeacherName like__儿 select * from Teacher where SUBSTRING(TeacherName,3,1) 儿and len(TeacherName)3 --(6)查询出电话是以138开头的教师信息 select * from Teacher where TeacherPhone like138% --(7)查询电话是138开头第四位可能是5可能是9最后一位是2的人的信息 select * from Teacher where TeacherPhone like 138[5,9]%2 --(8)查询电话是138开头第四位是3-8之间最后一个不是1和2的人的信息 select * from Teacher where TeacherPhone like 138[3,4,5,6,7,8]%[^1,2] select * from Teacher where TeacherPhone like 138[3-8]%[^1-2]七、聚合函数SQL SERVER中聚合函数主要有count求数量 max求最大值 min求最小值 sum求总和 avg求平均值1. 聚合函数举例应用1求教师总人数select COUNT(*) 数量 from Teacher2求最大值求最高工资select MAX(TeacherSalary) 最高工资 from Teacher3求最小时求最小工资select MIN(TeacherSalary) 最低工资 from Teacher4求和求所有教师的工资总和select SUM(TeacherSalary) 工资总和 from Teacher5求平均值求所有教师的平均工资--方案一 select AVG(TeacherSalary) 平均工资 from Teacher --方案二精确到2位小数 select ROUND(AVG(TeacherSalary),2) 平均工资 from Teacher --方案三精确到2位小数 select Convert(decimal(12,2),AVG(TeacherSalary)) 平均工资 from TeacherROUND函数用法round(num,len,[type]) 其中: num表示需要处理的数字len表示需要保留的长度type处理类型(0是默认值代表四舍五入非0代表直接截取) select ROUND(123.45454,3) --123.45500 select ROUND(123.45454,3,1) --123.454006求数量最大值最小值总和平均值在一行显示select COUNT(*) 数量,MAX(TeacherSalary) 最高工资,MIN(TeacherSalary) 最低工资,SUM(TeacherSalary) 工资总和,AVG(TeacherSalary) 平均工资 from Teacher7查询出四川省的教师人数总工资最高工资最低工资和平均工资select 四川省 地区,COUNT(*) 数量,MAX(TeacherSalary) 最高工资,MIN(TeacherSalary) 最低工资 ,SUM(TeacherSalary) 工资总和,AVG(TeacherSalary) 平均工资 from Teacher WHERE TeacherAddress like 四川省%8求出工资比平均工资高的人员信息select * from Teacher where TeacherSalary (select AVG(TeacherSalary) 平均工资 from Teacher)9求数量年龄最大值年龄最小值年龄总和年龄平均值在一行显示--方案一 select COUNT(*) 数量, MAX(year(getdate())-year(TeacherBirth)) 最高年龄, MIN(year(getdate())-year(TeacherBirth)) 最低年龄, SUM(year(getdate())-year(TeacherBirth)) 年龄总和, AVG(year(getdate())-year(TeacherBirth)) 平均年龄 from Teacher --方案二 select COUNT(*) 数量, MAX(DATEDIFF(year, TeacherBirth, getDate())) 最高年龄, MIN(DATEDIFF(year, TeacherBirth, getDate())) 最低年龄, SUM(DATEDIFF(year, TeacherBirth, getDate())) 年龄总和, AVG(DATEDIFF(year, TeacherBirth, getDate())) 平均年龄 from Teacher10计算出月薪在10000 以上的男性教师的最大年龄最小年龄和平均年龄--方案一 select 男 性别,COUNT(*) 数量, MAX(year(getdate())-year(TeacherBirth)) 最高年龄, MIN(year(getdate())-year(TeacherBirth)) 最低年龄, SUM(year(getdate())-year(TeacherBirth)) 年龄总和, AVG(year(getdate())-year(TeacherBirth)) 平均年龄 from Teacher where TeacherSex 男 and TeacherSalary 10000 --方案二 select 男 性别,COUNT(*) 数量, MAX(DATEDIFF(year, TeacherBirth, getDate())) 最高年龄, MIN(DATEDIFF(year, TeacherBirth, getDate())) 最低年龄, SUM(DATEDIFF(year, TeacherBirth, getDate())) 年龄总和, AVG(DATEDIFF(year, TeacherBirth, getDate())) 平均年龄 from Teacher where TeacherSex 男 and TeacherSalary 1000011统计出所在地在“四川省地区或浙江省地区”的所有女教师数量以及最大年龄最小年龄和平均年龄--方案一 select 四川省地区或浙江省地区 地区,女 性别,COUNT(*) 数量, MAX(year(getdate())-year(TeacherBirth)) 最高年龄, MIN(year(getdate())-year(TeacherBirth)) 最低年龄, SUM(year(getdate())-year(TeacherBirth)) 年龄总和, AVG(year(getdate())-year(TeacherBirth)) 平均年龄 from Teacher where TeacherSex 女 and (TeacherAddress LIKE 四川省% OR TeacherAddress LIKE 浙江省%) --方案二 select 四川省地区或浙江省地区 地区,女 性别,COUNT(*) 数量, MAX(DATEDIFF(year, TeacherBirth, getDate())) 最高年龄, MIN(DATEDIFF(year, TeacherBirth, getDate())) 最低年龄, SUM(DATEDIFF(year, TeacherBirth, getDate())) 年龄总和, AVG(DATEDIFF(year, TeacherBirth, getDate())) 平均年龄 from Teacher where TeacherSex 女 and (TeacherAddress LIKE 四川省% OR TeacherAddress LIKE 浙江省%)12求出年龄比平均年龄高的人员信息--方案一 select * from Teacher where year(getdate())-year(TeacherBirth) (select AVG(year(getdate())-year(TeacherBirth)) from Teacher) --方案二 select * from Teacher where DATEDIFF(year, TeacherBirth, getDate()) (select AVG(DATEDIFF(year, TeacherBirth, getDate())) from Teacher)2.SQL中常用时间处理函数GETDATE() 返回当前的日期和时间DATEPART() 返回日期/时间的单独部分DATEADD() 返回日期中添加或减去指定的时间间隔DATEDIFF() 返回两个日期直接的时间DATENAME() 返回指定日期的指定日期部分的整数CONVERT() 返回不同格式的时间示例select DATEDIFF(day, 2019-08-20, getDate()); --获取指定时间单位的差值 SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟可为 YEAR,MONTH,DAY,HOUR select DATENAME(month, getDate()); --当前月份 select DATENAME(WEEKDAY, getDate()); --当前星期几 select DATEPART(month, getDate()); --当前月份 select DAY(getDate()); --返回当前日期天数 select MONTH(getDate()); --返回当前日期月数 select YEAR(getDate()); --返回当前日期年数 SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330时间格式控制字符串名称日期单位缩写年yearyyyy 或yy季度quarterqq,q月monthmm,m一年中第几天dayofyeardy,y日daydd,d一年中第几周weekwk,ww星期weekdaydw小时Hourhh分钟minutemi,n秒secondss,s毫秒millisecondms八、分组查询--1根据教师所在地区分组统计教师数量教师工资总和平均工资最高工资和最低工资 select left(TeacherAddress,3) 地区,count(*) 人数,sum(TeacherSalary) 工资总和,avg(TeacherSalary) 平均工资,max(TeacherSalary) 最高工资,min(TeacherSalary) 最低工资 from Teacher group by left(TeacherAddress,3) --2根据教师所在地区分组统计教师人数教师工资总和平均工资最高工资和最低工资1985 年及以后出身的教师不参与统计。 select left(TeacherAddress,3) 地区,count(*) 人数,sum(TeacherSalary) 工资总和,avg(TeacherSalary) 平均工资,max(TeacherSalary) 最高工资,min(TeacherSalary) 最低工资 from Teacher where year(TeacherBirth)1985 group by left(TeacherAddress,3) --3根据教师所在地区分组统计教师人数教师工资总和平均工资最高工资和最低工资要求筛选出教师人数至少在2人及以上的记录并且1985年及以后出身的教师不参与统计。 select left(TeacherAddress,3) 地区,count(*) 人数,sum(TeacherSalary) 工资总和,avg(TeacherSalary) 平均工资,max(TeacherSalary) 最高工资,min(TeacherSalary) 最低工资 from Teacher where year(TeacherBirth)1985 group by left(TeacherAddress,3) having COUNT(*) 2九、多表查询1. 笛卡尔乘积select * from Teacher,Department该查询会将Teacher表中所有数据和Department表中的所有数据进行一次排列组合然后形成新的记录。例如Teacher中有30条记录department中有3条则会形成90条记录2. 简单多表查询该查询方式不会查询不符合主外键关系的数据查询教师信息同时显示部门名称select * from Teacher,Department where Teacher.DepartmentIDDepartment.DepartmentID查询教师信息同时显示职级名称select * from Teacher,Rank where Teacher.RankIDRank.RankID查询教师信息同时显示部门名称和职位名称select * from Teacher,Department,Rank where Teacher.DepartmentIDDepartment.DepartmentID and Teacher.RankIDRank.RankID3. 内连接该查询方式不会查询不符合主外键关系的数据查询教师信息同时显示部门名称select * from Teacher inner join Department on Teacher.DepartmentId Department.DepartmentId查询教师信息同时显示职级名称select * from Teacher inner join Rank on Teacher.RankId Rank.RankId查询教师信息同时显示部门名称职位名称select * from Teacher inner join Department on Teacher.DepartmentId Department.DepartmentId inner join Rank on Teacher.RankId Rank.RankId4. 外连接外连接分为三类左外连接以左表为主显示全部数据主外键关系找不到数据的地方用null取代--查询教师信息同时显示部门名称 select * from Teacher left join Department on Teacher.DepartmentID Department.DepartmentID --查询教师信息同时显示职级名称 select * from Teacher left join Rank on Teacher.RankID Rank.RankID --查询教师信息同时显示部门名称职位名称 select * from Teacher left join Department on Teacher.DepartmentID Department.DepartmentID left join Rank on Teacher.RankID Rank.RankID右外连接以右表为主显示全部数据主外键关系找不到数据的地方用null取代—A left join B B right join A--查询教师信息同时显示部门名称 SELECT * FROM Teacher RIGHT JOIN Department ON Teacher.DepartmentID Department.DepartmentID; --查询教师信息同时显示职级名称 SELECT * FROM Teacher RIGHT JOIN Rank ON Teacher.RankID Rank.RankID; --查询教师信息同时显示部门名称职位名称 SELECT Teacher.*, Department.DepartmentName, Rank.RankName FROM Rank RIGHT JOIN ( Teacher RIGHT JOIN Department ON Teacher.DepartmentID Department.DepartmentID ) ON Teacher.RankID Rank.RankID;全连接它会返回左右两张表的所有记录匹配上的行两边的数据都显示左表有但右表没有的右表字段显示 NULL右表有但左表没有的左表字段显示 NULL--查询教师信息同时显示部门名称 SELECT * FROM Teacher FULL JOIN Department ON Teacher.DepartmentID Department.DepartmentID; --查询教师信息同时显示职级名称 SELECT * FROM Teacher FULL JOIN Rank ON Teacher.RankID Rank.RankID; --查询教师信息同时显示部门名称职位名称 SELECT Teacher.*, Department.DepartmentName, Rank.RankName FROM Teacher FULL JOIN Department ON Teacher.DepartmentID Department.DepartmentID FULL JOIN Rank ON Teacher.RankID Rank.RankID;5. 多表查询示例--1查询出浙江地区所有的员工信息要求显示部门名称以及员工的详细资料 select TeacherName 姓名,Teacher.DepartmentId 部门编号 ,DepartmentName 部门名称, TeacherSex 性别,TeacherBirth 生日, TeacherSalary 月薪,TeacherPhone 电话,TeacherAddress 地区 from Teacher left join DEPARTMENT on Department.DepartmentId Teacher.DepartmentId where TeacherAddress like 浙江% --2查询出浙江地区所有的员工信息要求显示部门名称职级名称以及员工的详细资料 select TeacherName 姓名,DepartmentName 部门名称,RankName 职位名称, TeacherSex 性别,TeacherBirth 生日, TeacherSalary 月薪,TeacherPhone 电话,TeacherAddress 地区 from Teacher left join DEPARTMENT on Department.DepartmentId Teacher.DepartmentId left join [Rank] on [Rank].RankId Teacher.RankId where TeacherAddress like 浙江% --3根据部门分组统计员工人数员工工资总和平均工资最高工资和最低工资。 --提示在进行分组统计查询的时候添加二表联合查询。 select DepartmentName 部门名称,COUNT(*) 人数,SUM(TeacherSalary) 工资总和, AVG(TeacherSalary) 平均工资,MAX(TeacherSalary) 最高工资,MIN(TeacherSalary) 最低工资 from Teacher left join DEPARTMENT on Department.DepartmentId Teacher.DepartmentId group by Department.DepartmentId,DepartmentName --4根据部门分组统计员工人数员工工资总和平均工资最高工资和最低工资平均工资在10000 以下的不参与统计并且根据平均工资降序排列。 select DepartmentName 部门名称,COUNT(*) 人数,SUM(TeacherSalary) 工资总和, AVG(TeacherSalary) 平均工资,MAX(TeacherSalary) 最高工资,MIN(TeacherSalary) 最低工资 from Teacher left join DEPARTMENT on Department.DepartmentId Teacher.DepartmentId group by Department.DepartmentId,DepartmentName having AVG(TeacherSalary) 10000 order by AVG(TeacherSalary) desc --5根据部门名称然后根据职位名称分组统计员工人数员工工资总和平均工资最高工资和最低工资 select DepartmentName 部门名称,RANKNAME 职级名称,COUNT(*) 人数,SUM(TeacherSalary) 工资总和, AVG(TeacherSalary) 平均工资,MAX(TeacherSalary) 最高工资,MIN(TeacherSalary) 最低工资 from Teacher LEFT JOIN DEPARTMENT on Department.DepartmentId Teacher.DepartmentId LEFT JOIN [Rank] on [Rank].RANKID Teacher.RANKID group by Department.DepartmentId,DepartmentName,[Rank].RANKID,RANKNAME6. 自连接自己连接自己示例 create table Dept ( DeptId int primary key, --部门编号 DeptName varchar(50) not null, --部门名称 ParentId int not null, --上级部门编号 ) insert into Dept(DeptId,DeptName,ParentId) values(1,软件部,0) insert into Dept(DeptId,DeptName,ParentId) values(2,硬件部,0) insert into Dept(DeptId,DeptName,ParentId) values(3,软件研发部,1) insert into Dept(DeptId,DeptName,ParentId) values(4,软件测试部,1) insert into Dept(DeptId,DeptName,ParentId) values(5,软件实施部,1) insert into Dept(DeptId,DeptName,ParentId) values(6,硬件研发部,2) insert into Dept(DeptId,DeptName,ParentId) values(7,硬件测试部,2) insert into Dept(DeptId,DeptName,ParentId) values(8,硬件实施部,2) 如果要查询出所有部门信息并且查询出自己的上级部门查询结果如下 --部门编号 部门名称 上级部门 -- 3 软件研发部 软件部 -- 4 软件测试部 软件部 -- 5 软件实施部 软件部 -- 6 硬件研发部 硬件部 -- 7 硬件测试部 硬件部 -- 8 硬件实施部 硬件部 select A.DeptId 部门编号,A.DeptName 部门名称,B.DeptName 上级名称 from Dept A inner join Dept B on A.ParentId B.DeptId

相关新闻

AI Agent工程化实战:从概念到产品的四大关键环节解析

AI Agent工程化实战:从概念到产品的四大关键环节解析

1. 从概念到产品:为什么AI Agent工程化是道坎?最近几年,AI Agent这个概念火得不行,几乎每个技术大会、每篇行业报告里都能看到它的身影。大家聊得热火朝天,从单智能体到多智能体协作,从自主规划到工具调用&…

2026/8/9 4:38:06 阅读更多 →
Appshot:基于截图自动生成可运行桌面应用的工具实践指南

Appshot:基于截图自动生成可运行桌面应用的工具实践指南

这次我们来看一个能直接把截图变成可运行应用的项目——Appshot。它的核心思路很直接:你截一张现有软件的界面图,它就能自动生成一个功能类似、可以独立运行的桌面应用。这听起来有点像“界面逆向工程”,但实际原理更偏向于通过视觉识别和代码…

2026/8/9 4:38:06 阅读更多 →
IP内容策划方法论:从编辑思维到叙事系统的升级

IP内容策划方法论:从编辑思维到叙事系统的升级

1. 从编辑到IP内容策划的思维跃迁十年前刚入行时,我理解的编辑工作就是改改错别字、调调段落格式。直到参与第一个IP孵化项目惨败后,才意识到传统编辑思维在内容产业升级中的致命短板。那次我们团队耗时三个月打磨的历史人物传记,在各大平台总…

2026/8/9 4:38:06 阅读更多 →

最新新闻

未来理财规划:从零开始构建财务自由之路

未来理财规划:从零开始构建财务自由之路

1. 为什么我们需要"未来的你理财"?上周五晚上11点,我盯着手机银行里那个触目惊心的数字发呆——工作5年,存款还不到3万。那一刻我突然意识到:如果继续这样稀里糊涂地花钱,10年后的我可能还在为房租发愁。这就…

2026/8/9 19:39:01 阅读更多 →
Charlatano核心功能揭秘:动态后坐力控制与人性化瞄准路径技术

Charlatano核心功能揭秘:动态后坐力控制与人性化瞄准路径技术

Charlatano核心功能揭秘:动态后坐力控制与人性化瞄准路径技术 【免费下载链接】Charlatano Proves JVM cheats are viable on native games, and demonstrates the longevity against anti-cheat signature detection systems 项目地址: https://gitcode.com/gh_m…

2026/8/9 19:39:01 阅读更多 →
健身应用开发终极指南:如何用1324个多语言练习数据集快速构建健身API

健身应用开发终极指南:如何用1324个多语言练习数据集快速构建健身API

健身应用开发终极指南:如何用1324个多语言练习数据集快速构建健身API 【免费下载链接】exercises-dataset 1,324-exercise fitness dataset — animation GIFs, 180180 thumbnails, muscle-group & equipment data, and step-by-step instructions in 6 languag…

2026/8/9 19:39:01 阅读更多 →
SwarmForge大师班:高级用户的专业技巧与窍门

SwarmForge大师班:高级用户的专业技巧与窍门

SwarmForge大师班:高级用户的专业技巧与窍门 【免费下载链接】swarm-forge A simple tool for coordinating several AI agents. 项目地址: https://gitcode.com/GitHub_Trending/sw/swarm-forge SwarmForge是一款强大的AI代理协调系统,能够促进在…

2026/8/9 19:39:01 阅读更多 →
AutoRemesher:从拓扑困境到创意自由的3D网格优化革命

AutoRemesher:从拓扑困境到创意自由的3D网格优化革命

AutoRemesher:从拓扑困境到创意自由的3D网格优化革命 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher 在3D建模的创作旅程中,拓扑优化往往是那个令人望而生畏的技术…

2026/8/9 19:39:00 阅读更多 →
mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南

mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南

mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南 【免费下载链接】DeepSeek-V4-Pro-Qwen3.5-9B-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit mlx-community/DeepSeek-V…

2026/8/9 19:38:00 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →