p38 dml
1.查询 select 列名
2.从哪里 from 表名
3.查询
use stu --查询学生姓名 select 姓名 from 学生信息 --查询3列 select 学号,班级,姓名 from 学生信息 --查询所有 select * from 学生信息
P39
4.distinct 去重行
select distinct 列名 from 表名
select distinct 籍贯 from 学生信息
5.top 规定返回的数目
select distinct top 8 籍贯 from 学生信息
select distinct top 8 *
from 学生信息
P40
6.别名查询
6.1写法1
select 学号 'sno',班级编号 'bjbh',姓名 'name' from 学生信息
6.2 写法2
select 'sno'=学号,'name'=姓名 from 学生信息
6.3写法3
select 学号 as 'sno',班级编号 as 'bjbh',姓名 as 'name' from 学生信息
7.计算列
select 学号 ,课程编号 ,'调整前的成绩'=成绩,'调整后的成绩'=成绩-10 from 学生信息
P42
8.选择查询
8.1 比较搜索条件
8.1.1 查询籍贯是北京的学生有哪些
select * from 学生信息 where '籍贯='beijing'
8.1.2 查询成绩及格的学生的情况
--1.确定表 --2.确定查询哪些列 --3.限制条件 select * from 成绩表 where 成绩>60
8.1.3 逻辑运算符 and or
查询籍贯是北京,性别是男
select 学号,编辑编号,姓名,性别,籍贯 from 学生信息 where 籍贯='beijing' and 性别='男'
P44
8.2 范围搜索条件
8.2.1 查询成绩在70-90之间的学生
select * from 成绩表 where 成绩 between 70 and 90
select * from 成绩表 where 成绩 between 80 and 90
select * from 成绩表 where 成绩 not between 70 and 90
8.3 列表搜索条件 IN
8.3.1查询籍贯为北京和深圳的同学
use stu select 学号,班级编号,姓名,性别,籍贯 from 学生信息 where 籍贯 in('beijing','shenzhen')
结果:
8.4搜索条件中的字符匹配符 % - [] [^]
8.4.1 like
查询出姓王的同学
select *
from student
where 姓名 like '王%'
下划线 代表 一个字符
select * from student where 姓名 like '王_'
名字中包含大或者小的
select * from student where sanme like '_[大小]%'
查询出除了 大 小 字符的数据
select * from student where sanme like '_[^大小]%'
P47
9.涉及空值的查询
列名 is null 判断取值为空
列名 is not null 判断取值不为空
select * from sc where gread is null
10. 聚合函数
一列值计算,返回单个值
SUM AVG MAX MIN COUNT(*) COUNT([DISTINCT]<列名>)
select 聚合函数 from 表明
10.1求成绩的总和
select SUM(grade) as '总成绩' from sc
10.2 平均值
select AVG(grade) as '最高成绩' from sc
10.3 统计学生总人数
select COUNT(*) as '总人数' from student
10.4查询有成绩的学生的总人数
select COUNT(distinct sno) from student
11.数据分组 group by
11.1 查询每个年级 的总人数和班级数量
--更改数据类型 alter table 班级信息 alter column 人数 int --查询、统计 select 年级,sum(人数) as '总人数', count(班级编号) as '班级数量' from 班级信息 group by 年级
11.2 查询每门课的最高分,最低分
select 课程编号,max(成绩) as '最高分', min(成绩) as '最低分' frmo 成绩表 group by 课程编号
11.3 having :与gtoup by 一起使用
12. order by 排序
12.1 默认升序(asc) 降序(desc)
12.2 查询成绩表 升序 降序
--升序 select * from 成绩表 order by 成绩 --降序 select * from 成绩表 order by 成绩 desc
13.where 使用的条件
14.查询语句 顺序不能改变
P52
15.表连接
15.1 内部连接
15.1.1
15.1.2 多表查询
-- 查询学生学号,姓名,性别,以及所在班级的名称和年级 select 学生信息.学号, 学生信息.性别, 学生信息.姓名,班级信息.班级名称,班级信息.年级 from 学生信息, 班级信息 where 学生信息.班级编号=班级信息.学生编号
--写法2 select 学生信息.学号, 性别,姓名, 班级信息.班级名称,年级 from 学生信息 inner join 班级信息 where 学生信息.班级编号=班级信息.学生编号
案例二:查询学生学号,姓名,性别,以及所在班级的名称和年级,并且籍贯为bejing,班级以pu开头
select 学生信息.学号, 学生信息.性别, 学生信息.姓名,班级信息.班级名称,班级信息.年级 from 学生信息, 班级信息 where 学生信息.班级编号=班级信息.学生编号 and 籍贯='beijing', and 班级名称 like 'pu%'
--使用别名查询 select S.学号, S.性别, S.姓名,C.班级名称,C.年级 from 学生信息 as S, 班级信息 as C where S.班级编号=C.学生编号 and S.籍贯='beijing', and C.班级名称 like 'pu%'
15.1.3 等值连接 非等值连接
15.2 外部连接
先写的是左表,后写的是右表
15.2.1左外连接:对左表不加限制
案例1: 查询所有学生的学号,姓名,课程编号,成绩
select 学生信息.学号,姓名,成绩表.课程编号,成绩 from 学生信息 left outer join 成绩表 on 学生信息.学号=成绩表.学号
15.2.2 右外连接 对右边的表不加限制 right outer join
案例:
select 学生信息.学号,姓名,成绩表.课程编号,成绩 from 学生信息 right outer join 成绩表 on 学生信息.学号=成绩表.学号
15.2.3 完全连接 full outer join
案例:
16.子查询
表示where子句的条件;嵌套在 select intsert update delete语句中;select用括号括起来
16.1嵌套子查询
案例:查询计算机系的学生选择了哪些课程
1.查询计算机系的学生选修了哪些课程
select sno from student where sddept='计算机系'
2. 选修了哪些课程
select * from sc where sno in( select sno from student where sddept='计算机系' )
where语句后的条件要什么,子查询就查什么
案例2:
--查询修了‘c02’课程 --且高于此课程的平均成绩的学生的学号和成绩 select sno,grade from sc where cno='c02' and grade > ( select AVG(grade) from sc where cno='c02' )
案例:查询选修了“高等数学”课程的学生的学号和成绩
1.确定表
course cname
sc sno cno
2.看表关联,建立关联
course--cno sc--cno
3.开始嵌套
select sno,grade from sc where cno in ( select cno from count where cname='高等数学' )
(P59)16.2 相关子查询=单值子查询
结果只能返回一个值
案例:查询 ff 在同一个班级的学生信息
1.先查出ff在那个班级
select 班级编号 from 学生信息 where 姓名='ff'
2.再去班级查所有学生信息
select s.学号,姓名,性别,c.班级名称,年级 from 学生信息 as s,班级信息 as c where s.班级编号=c.班级编号 and s.班级编号 in( select 班级编号 from 学生信息 where 姓名='ff' )
(P60)17.查询基础上创建新表
select ... into
select 选择列表 into 新表名 from表明
--根据学生信息表创建新表 select * into 学生信息2 from 学生信息
(P61)18.插入数据
18.1使用 insert 和value 插入行
案例 student 插入学生信息
use student insert into student(sno,sname,ssex,sage,sdept) values('9512111','祖宏','男',23,'计算机系')
--值和列名一一对应,插入多个 use student insert into student values('9512112','祖宏'努,'女',13,'数学系'),('9512111','祖宏','男',23,'计算机系')
值名和列名不对应的话,需要写列名 student(sno,sname,ssex,sage,sdept)
18.2使用insert和select插入
18.2.1 查询出来的数据批量添加到新表中
--1.新建成绩表2 --2.将 stu 数据库中的 成绩表中的 成绩大于70并且课程编号是1003的数据插入到 成绩表2中 create table 新成绩表 ( 学号 varchar(50), 课程编号 varchar(50), 成绩 int ) insert into 新成绩表 select * from 成绩表 where 成绩>70 and 课程编号='1003'
19.修改数据 update
update 表名 set 列名=表达式
--stu 成绩均设置为90 update 成绩表 set 成绩=90 --stu 成绩都加5 update 成绩表 set 成绩=成绩+5
19.1带where的update
条件:成绩95,课程编号1002-1003
移动到学号是3的里面
update 成绩表 set 学号='3' where 成绩='95' and 课程编号 between '1002' and '1003'
19.2更新多列
update 成绩表 set 课程编号='我是1003‘,成绩=92 where 课程编号='1003'
案例3:计算机系的全体学生成绩加5
--用子查询的方法 update sc set grade=grade+5 where sno in ( select sno from student where sdept='计算机系' ) --多表连接查询 update sc set grade=grade+5 from sc join student on sc.sno=student.sno where sdept='计算机系'
20.删除 deldete
delete from 表名 where 选择条件
案例:删除成绩大于90分的记录
delete from 成绩表2 where 成绩>90
案例:删除表中所有信息
delete * from 新学生信息表2
案例:删除固定行
--删除20% delete top(20) percent from 学生信息 --删除前5行 delete top(5) from 学生信息
回顾