sqlserver 基础增删改查
答案如下:
–1
create database school
use school
create table student(
Sno char(6) primary key,–学号
Sname varchar(8) ,–姓名
Ssex char(2),–性别
Sage smallint ,–年龄
Sdept varchar(15))–系科
create table Course(
Cno char(4) primary key,–课程号
Cname varchar(20),–课程名
Cpno char(4), --先修课
Ccredit tinyint --学分
)
create table sc(
Sno char(6),
Cno char(4),
Grade decimal(12,2),
primary key(Sno,Cno)
)
–2
insert into student values(‘4001’,‘赵茵’,‘男’,‘20’,‘SX’)
insert into student values(‘4002’,‘杨华’,‘女’,‘21’,‘JSJ’)
–3
delete --delete只是删除记录,不会删除整个表格,而drop table名 会删除整个表
from student
–4
drop table student
–5
alter table student add --在已有表里添加新的属性(add关键字)
sbirthdate datetime
–6
delete
from student
where Ssex='男’and Sdept=‘JSJ’
–7
delete
from Course
where Cname=‘数据库原理’
–8
update student --更新数据
set Sdept=‘JSJ’
where Sno=‘0001’
–9
update student
set Sage+=1,Ssex=‘女’
where Sname=‘陈小明’
–10、修改李文庆的1001课程的成绩为93分。
update sc --多个表之间的关联的更新
set Grade=93
where sc.Cno=‘1001’ and sc.Sno in(
select Sno
from student
where Sname=‘李文庆’
)
–11、把“数据库原理”课的成绩减去1分。
update sc
set Grade-=1
where sc.Cno in(
select Cno
from Course
where Cname=‘数据库原理’
)
–Select 查询语句
–一、单表
–1、查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。
select sno,Sname,sage
from student
where Ssex=‘女’ and Sage between 19 and 21 --默认从大到小ASC 降序用ORDER BY dec,order by还可以加列名,来按列排序
–2、查询姓名中第2个字为“明”字的学生学号、性别。
select sno,Ssex
from student
where Sname like '明%‘–like 为模糊查询,’ '是单个字符的代替符,‘%’是任意字符的通配符
–3、查询 1001课程没有成绩的学生学号、课程号。
select Sno,Cno
from sc
where Cno='1001’and Grade=null
–4、查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列。
select sno,Sname --不用分组就不用group by
from student
Where (Sdept=‘JSJ’ or Sdept=‘SX’ or Sdept=‘WL’) and Sage>25
Order by sdept
----5、查询 student 表中的学生共分布在那几个系中。(distinct)(
–distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。
–注意事项
–distinct 【查询字段】,必须放在要查询字段的开头,即放在第一个参数;
–只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
–DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
–不能与all同时使用,默认情况下,查询时返回的就是所有的结果
select COUNT(distinct Sdept)
from student
–6、查询0001号学生1001,1002课程的成绩。
select grade
from sc
where sno='0001’and cno in (1001,1002)
–二、统计
–1、查询姓名中有“明”字的学生人数。
select COUNT(Cname)–*的效率远低于具体指定某一列的效率
from Course
where Cname like ‘%明%’
–2、计算‘JSJ’系的平均年龄及最大年龄。
select AVG(Sage),Max(Sage)–聚合函数不能用在where后面能放在having里,与sql的执行顺序有关,但可以放在select后面,这时两者都能用
from student
–where Sage=‘JSJ’
group by Sage
having Sage=‘JSJ’
–3、查询学生中姓名为张明、赵英的人数。
select COUNT(Sname)
from student
Where Sname ='张明’or Sname =‘赵英’
–group by Sname
–having Sname ='张明’or Sname =‘赵英’
–4、计算每一门课的总分、平均分,最高分、最低分,按平均分由高到低排列
select SUM(grade),avg(grade),max(grade),MIN(grade)
from sc --快速注释ctrl+k.c 快速解除注释ctrl+k.u
group by Grade
在数据库school中有student , sc, course 表,每张表的含义及列的属性如下:
Student:学生表
Course:课程表
SC:学生选课表
1、写出使用Create Table 语句创建表student , sc, course 的SQL语句。
Create table student
2、在student表中插入信息
3、删除student表中的全部记录
4、在数据库school中删除关系student
5、在student表添加属性sbirthdate ,类型datetime
6、删除所有JSJ 系的男生。
7、删除“数据库原理”课的选课纪录。
8、修改0001 学生的系科为JSJ
9、把陈小明的年龄加1岁,性别改为女。
10、修改李文庆的1001课程的成绩为93分。
11、把“数据库原理”课的成绩减去1分。
Select 查询语句
一、单表
1、查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。
2、查询姓名中第2个字为“明”字的学生学号、性别。
3、查询 1001课程没有成绩的学生学号、课程号。
4、查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列。
5、查询 student 表中的学生共分布在那几个系中。(distinct)
6、查询0001号学生1001,1002课程的成绩。
二、统计
1、查询姓名中有“明”字的学生人数。
2、计算‘JSJ’系的平均年龄及最大年龄。
3、查询学生中姓名为张明、赵英的人数。
4、计算每一门课的总分、平均分,最高分、最低分,按平均分由高到低排列