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 学生信息

回顾

posted @ 2022-10-18 17:32  驼七  阅读(37)  评论(0编辑  收藏  举报