左左,右右
左左中的第一个左表示,当我使用左连接时
左左中的第二个左表示,会显示左边表所有的数据
--交叉连接,产生笛卡尔积,是一种错误的结果,没有实际意义,漏了where中的关联条件就会产生这种错误
select s.*
from students s ,classes c
-- 内连接,标准写法
select s.*
from students s
inner join classes c
on s.class=c.id
等价于下面的写法,下面的写法常用
select s.*
from students s ,classes c
where s.class=c.id
--左连接
select s.*
from students s left join classes c
on s.class=c.id
--上面的左连接造价于下面的右连接
select s.*
from classes c right join students s
on s.class=c.id
---查询每个班级的最高成绩,最低成绩
select c.id, c.name,max(s.score) as 最高成绩,min(s.score) as 最低成绩
from students s,classes c
where s.class=c.id
group by c.id,c.name -- group by 后跟上select语句中的非聚合函数列 ,c.id, c.name就是非聚合函数列
having c.name='2004'
order by c.id desc
--注意写的顺序
哪组有序
where
group by
having
order by
--查询所有未分班的学生
select * from students where class is null
--查询所有已分班的学生
select * from students where class is not null
null是空值,可以理解为未经任何处理
''经过处理的
' '经过处理的
select null-5 只要是null参与运算的表达式结果都是null
select 1*0.1*10/10
基本语法
select 列名1,列名2 from 表名
insert into 表名(列名1,列名2) values (值1,值2)
update 表名 set 列名1=值1,列名2=值2 where 列名3=值3
delete from 表名 where 列名3=值3
嵌套子查询
-- 子查询出现在where语句中,注意in 跟=的区别 in表示范围,=表示某一个具体的值
select * from students
where class = (select id from classes where name='2004')
select * from students
where class in (select id from classes )
-- 子查询还可以出现在from语句中 ,子查询查询出来的数据作为一个临时表参与查询
-- 子查询还可以出现在select语句中
备份还原数据库
1、备份
a、生成脚本
b、分离数据库
c、复制文件
d、选中要备份的数据库,右键-任务-备份--指定生成的文件名,通常是以.bak为后缀名
e、自动备份
1、在服务里面启动sqlserver代理服务(agent)
2、在代理服务里面的作业文件夹,右键--新建作业
3、在弹出的窗口里面--general--给作业起名
4、步骤:新建步骤--把代码考进来,注意修改数据库名称、备份文件的路径
5、计划:设置执行时间,可以每天、每周、每月
在作业活动监视器里面可以马上执行这个作业,查看效果