1.数据库的建立
2.带有if判断语句的表的建立,若表存在则删除重建
3.查看表所有的约束
4.添加和删除约束
5.表的查询:模糊插叙like等...
create database SchoolDB;
use SchoolDB
go
-- 学生信息表
if OBJECT_ID(N'StuInfo',N'U') is not null -- 如果该表已经存在,则现删除再建立
drop table StuInfo
create table StuInfo(
StuID int primary key, -- 学号
StuName nvarchar(10), -- 姓名
StuCity nvarchar(50), -- 所在城市
StuAge int, -- 年龄
MajorID int -- 专业编号
);
-- 专业信息表
if OBJECT_ID(N'MajorInfo',N'U') is not null -- 如果该表已经存在,则先删除该表,再重新建立该表
drop table MajorInfo
create table MajorInfo(
MajorID int primary key not null,-- 专业编号
MajorName nvarchar(30) -- 专业名称
);
-- 课程表
if OBJECT_ID(N'CourseInfo',N'U') is not null -- 如果该表已经存在,则先删除再建立
drop table CourseInfo
create table CourseInfo(
CourseID int not null, -- 课程编号
CourseName nvarchar(20) -- 课程名称
);
-- 选课表
if OBJECT_ID(N'SelCourse',N'U') is not null
drop table SelCourse
create table SelCourse(
StuID int not null, -- 学生学号
CourseID int not null, -- 课程编号
Score float -- 课程分数
);
-- 查看所有约束
select *from sysobjects where parent_obj in(select id from sysobjects where name='SelCourse');
-- 添加主键约束
alter table CourseInfo add constraint PK_CourseInfo primary key(CourseID);
alter table SelCourse add constraint PK_SelCourse primary key(StuID,CourseID);
-- 添加外键约束
alter table StuInfo add constraint FK_StuInfo_MajorInfo foreign key (MajorID) references MajorInfo;
alter table SelCourse add constraint FK_CourseInfo foreign key(CourseID) references CourseInfo;
alter table SelCourse add constraint FK_SelCourse_StuInfo foreign key(StuID) references StuInfo;
-- 删除主键
alter table SelCourse drop constraint PK_SelCourse;
-- 添加数据
-- 向StuInfo添加数据
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1001,'Hello','江西南昌',21,20001); -- 哲学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1002,'Amli','巴基斯坦',22,20006); -- 物理学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1003,'War','阿欧斯',21,20005); -- 数学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1004,'Warys','阿修罗',24,20004); -- 化学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1005,'Piesf','北京',14,20003); -- 文学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1006,'Fusnas','上海',34,20002); -- 音乐
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1007,'Mlks','南昌',12,20002); -- 音乐
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1008,'Pols','海南',36,20000); -- 天文学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1009,'oosa','龙南',26,20001); -- 哲学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1010,'ddawa','长沙',25,20004); -- 化学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1011,'Dwad','常熟',24,20005); -- 数学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1012,'Osjsa','美国',23,20006); -- 物理学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1013,'Posangdas','纽约',28,20004); -- 化学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1014,'Yhndsg','休斯敦',21,20001); -- 哲学
insert into StuInfo(StuID,StuName,StuCity,StuAge,MajorID)values(1015,'Cgajjd','印度',55,20003); -- 文学
-- 查询
select*from StuInfo;
-- 插入专业表
insert into MajorInfo(MajorID,MajorName)values(20001,'哲学');
insert into MajorInfo(MajorID,MajorName)values(20002,'音乐艺术');
insert into MajorInfo(MajorID,MajorName)values(20003,'文学');
insert into MajorInfo(MajorID,MajorName)values(20004,'化学');
insert into MajorInfo(MajorID,MajorName)values(20005,'数学');
insert into MajorInfo(MajorID,MajorName)values(20006,'物理学');
insert into MajorInfo(MajorID,MajorName)values(20007,'核物理学');
insert into MajorInfo(MajorID,MajorName)values(20009,'计算机科学');
insert into MajorInfo(MajorID,MajorName)values(20000,'天文学');
-- 查询
select *from MajorInfo;
-- 插入课程表
insert into CourseInfo(CourseID,CourseName) values(101,'大学英语');
insert into CourseInfo(CourseID,CourseName) values(102,'信号与系统');
insert into CourseInfo(CourseID,CourseName) values(103,'高等数学');
insert into CourseInfo(CourseID,CourseName) values(104,'数字电路基础');
insert into CourseInfo(CourseID,CourseName) values(105,'电机学');
-- 查询
select *from CourseInfo;
-- 插入选课表
insert into SelCourse(StuID,CourseID,Score) values(1001,101,89.5);
insert into SelCourse(StuID,CourseID,Score) values(1002,102,99.5);
insert into SelCourse(StuID,CourseID,Score) values(1003,103,87.9);
insert into SelCourse(StuID,CourseID,Score) values(1004,104,76.7);
insert into SelCourse(StuID,CourseID,Score) values(1005,105,99.2);
insert into SelCourse(StuID,CourseID,Score) values(1006,101,68.7);
insert into SelCourse(StuID,CourseID,Score) values(1007,102,54.6);
insert into SelCourse(StuID,CourseID,Score) values(1008,103,12.3);
insert into SelCourse(StuID,CourseID,Score) values(1009,104,90);
insert into SelCourse(StuID,CourseID,Score) values(10010,105,100);
insert into SelCourse(StuID,CourseID,Score) values(10011,101,90.2);
insert into SelCourse(StuID,CourseID,Score) values(10012,102,98.2);
insert into SelCourse(StuID,CourseID,Score) values(10013,103,66.5);
insert into SelCourse(StuID,CourseID,Score) values(10014,104,77.8);
insert into SelCourse(StuID,CourseID,Score) values(10015,105,89.2);
insert into SelCourse(StuID,CourseID,Score) values(1001,101,89.4);
insert into SelCourse(StuID,CourseID,Score) values(1002,102,89.5);
insert into SelCourse(StuID,CourseID,Score) values(1003,103,99.3);
insert into SelCourse(StuID,CourseID,Score) values(1004,104,92);
insert into SelCourse(StuID,CourseID,Score) values(1005,105,93);
--查询
select *from SelCourse;
select *from CourseInfo;
select *from MajorInfo;
select *from StuInfo;
-- 二、查询操作
--1.基本查询
--从表中查询某些列的值,这是最基本的查询语句
--语法:select 列名1,列名2,列名3,...... from 表名
select *from CourseInfo;
update CourseInfo set CourseName='计算机网络' where CourseID='101';
select StuID,StuCity,StuName from StuInfo;
update StuInfo set StuCity='台湾' where StuID=1004;
--2.where条件
--作用:按照一定的条件查询数据
--语法:
/*
select 列名1,列名2...
from 表名
where 列名 运算符 值
运算符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
between 在某个范围内
like 相似,搜索某种模式
*/
select *from StuInfo;
-- 例如:查询年龄小于22岁的学生所有信息
select *from StuInfo where StuAge between 0 and 21;
select *from StuInfo where StuAge<22;
select *from StuInfo where StuAge<=21;
--3.between
select *from StuInfo;
-- 从学生中查询年龄在20-30岁之间的人的学号,姓名和专业信息
select StuID '学号',StuName '姓名',MajorID '专业',StuAge '年龄'
from StuInfo
where StuAge between 20 and 30;
--4.like
-- 作用:模糊查询。like关键字与通配符一起使用
-- 通配符 描述
-- % 替代一个或多个字符
-- _ 替代一个字符
--[charlist] 字符列中的任何单一字符
--[^charlist] 不在字符列中的任何单一字符
-- 1) 查询姓名为P开头为的学生信息
select *from StuInfo where StuName like 'P%';
-- 2) 查询姓名最后一个字母为D的同学
select *from StuInfo where StuName like '%d';
-- 3) 查询姓名带有字母a的同学
select *from StuInfo where StuName like '%a%';
-- 4) 查询姓名为4个字母的同学,并且开头为A
select *from StuInfo where StuName like '____';
select *from StuInfo where StuName like 'A___';
-- 5) 查询姓名开头为P或W的同学
select *from StuInfo where StuName like '[PW]%';
-- 6) 查询姓名开头字母不为P和W的学生信息
select *from StuInfo where StuName like '[^PW]%';
-- 5、and
-- and在where子语句把两个或者多个条件结合起来,表示和的意思,多个条件可以同时执行
-- 查询年龄大于18岁,并且开头字母为d的同学
select *from StuInfo where StuAge>18 and StuName like 'd%';
--6、or
-- or在where语句中可以把两个或者多个条件结合起来
-- 查询姓名开头为'A','W'或'P'的学生信息
select *from StuInfo where StuName like 'A%' or StuName like 'W%' or StuName like 'P%';
--7、not
-- 否定 ,取反的意思。
-- 查新姓名开头字母不为'A'的同学的信息
select *from StuInfo where StuName not like 'A%';
-- 8、order by
-- 排序,对需要查询后的结果集进行排序
-- 标志 含义 说明
-- ASC 升序 默认值 ascend
-- DESC 倒序 descend
-- 查询学生信息的表的学号,姓名,年龄,并且分别按年龄升序,降序排序
select StuID,StuName,StuAge from StuInfo order by StuAge DESC;
select StuID,StuName,StuAge from StuInfo order by StuAge ASC;
-- 9、as (Alias)
-- 为指定列名称和表名指定别名
-- 作用:将查询的列,或者指定需要的名字,如果表名太长,就可以用别名简称
-- 1)将结果列改为需要的名称
Select StuID as '学号',StuName as '姓名'
from StuInfo;
-- 2) 用表名的别名,直接标志列的来源
select S.StuID,S.StuName, S.StuCity,S.MajorID,M.MajorName
from StuInfo as S
left join
MajorInfo as M
on S.MajorID=M.MajorID;
-- 3) 在合计函数中,结统计记录的条数
select COUNT(StuID) as '学生人数' from StuInfo;
-- 10、distinct
-- 含义不同
-- 作用查询是忽略重复的值
-- 语法: select distinct 列名 from 表名
-- 查询学生所在的城市名称,排除重复
select distinct StuCity from StuInfo;
-- 查询成绩分布情况
select *from SelCourse;
select distinct(Score) '分数', count(StuID) as '人数'
from SelCourse
group by Score;
-- 11、max、min
-- max函数返回一列中的最大值,NULL值不包括在计算当中
-- min函数返回一列中的最小值,NULL值不包含在计算当中
-- 备注:max和min也可以用于文本列,以获得按字母顺序的最高值和最低值
-- 1) 查询学生中的最高分数
select MAX(Score) '最高分数', MIN(Score) '最低分数'
from SelCourse;
-- 12、sum
-- 求和
-- 求平均分
select SUM(Score)'总分',COUNT(StuID)'总人数' , SUM(Score)/COUNT(StuID) '平均分'
from SelCourse;
-- 13、avg average
-- 返回列的平均值
select SUM(Score)'总分',COUNT(Score)'人数',AVG(Score) '平均分'
from SelCourse;