外键的增删改查练习

--关于主外键的练习

--添加和删除主键与外键语法
--删除外键 语法:alter table 表名 drop constraint 外键约束名 

--添加外键 语法:alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名) 

--删除主键 语法:alter table 表名 drop constraint 主键约束名 

--增加主键 语法:alter 表名 add constraint 主键约束名 primary key(列名)
--删除主键
alter table sc drop constraint pk_sc
--删除外键
alter table sc drop constraint fk_student
alter table sc drop constraint fk_course

--创建学生表
create table student(

Id int identity(1,1) Primary key,
name varchar(12),
age Int,
sex char(1),
class varchar(6)
);

insert into student values(‘p0001‘,‘王军‘,21,1,‘c101‘); -- (‘p0001‘,‘王军’,20,1,‘c101‘);
insert into student values(‘p0002‘,‘张宇‘,21,1,‘c102‘);  --(‘p0002‘,‘张宇’,21,1,‘cl01‘);
insert into student values(‘p0003‘,‘刘飞‘,22,1,‘c103‘);
INSERT INTO student VALUES(‘p0004‘,‘赵燕‘,18,0,‘c103‘);
INSERT INTO student VALUES(‘p0005‘,‘曾婷‘,19,0,‘c103‘);
INSERT INTO student VALUES(‘p0006‘,‘周慧‘,21,0,‘c104‘);
INSERT INTO student VALUES(‘p0007‘,‘小红‘,23,0,‘c104‘);
INSERT INTO student VALUES(‘p0008‘,‘杨晓‘,18,0,‘c104‘);
INSERT INTO student VALUES(‘p0009‘,‘李杰‘,20,1,‘c105‘);
INSERT INTO student VALUES(‘p0010‘,‘张良‘,22,1,‘c105‘);

--创建课程表
create table course(
id int identity(1,1) Primary key,  --identity(1,1) 从1开始,每次自增1
sname varchar(12) ,
credit numeric(2,1), --数字类型,总长度2  = 整数长度+小数长度。保留1位小数。
teacher varchar(12)
);

insert into course values(‘c001‘,‘Java‘,3.5,‘李老师‘);
insert into course values(‘c002‘,‘高等数学‘,5.0,‘赵老师‘);
insert into course values(‘c003‘,‘JavaScript‘,3.5,‘王老师‘);
INSERT INTO course VALUES(‘C004‘,‘离散数学‘,3.5,‘卜老师‘);
INSERT INTO course VALUES(‘C005‘,‘数据库‘,3.5,‘廖老师‘);
INSERT INTO course VALUES(‘C006‘,‘操作系统‘,3.5,‘张老师‘);

--创建选修表
--选修表就是关系表或中间表,提供了学生表到课程表的映射关系
create Table sc(
sid varchar(10) not null,
cid varchar(10) not null
);

alter table sc Add constraint pk_sc Primary key(sid,cid); --添加主键组
alter table sc add constraint fk_student Foreign key(sid) references student(id); --添加外键约束
alter table sc add constraint fk_course Foreign key(cid) references course(id);--添加外键约束

insert into sc values(‘p0001‘,‘c001‘);
insert into sc values(‘p0001‘,‘c002‘);
insert into sc values(‘p0001‘,‘c003‘);
insert into sc values(‘p0002‘,‘c001‘);
insert into sc values(‘p0002‘,‘c004‘);
INSERT INTO sc VALUES(‘p0003‘,‘c002‘);
INSERT INTO sc VALUES(‘p0003‘,‘c005‘);
INSERT INTO sc VALUES(‘p0004‘,‘C003‘);
INSERT INTO sc VALUES(‘p0005‘,‘C001‘);
INSERT INTO sc VALUES(‘p0006‘,‘C004‘);
INSERT INTO sc VALUES(‘p0007‘,‘C002‘);
INSERT INTO sc VALUES(‘p0008‘,‘C003‘);
INSERT INTO sc VALUES(‘p0009‘,‘C001‘);
INSERT INTO sc VALUES(‘p0009‘,‘C005‘);

--查询没有选课的学生信息和无学生选的课程信息

select *from student where student.id not in(select sid from sc);
select *from course where course.id not in (select cid from sc);

SELECT student.* FROM student LEFT JOIN sc ON student.id=sc.sid LEFT JOIN course ON course.id = sc.cid WHERE course.sname IS NULL;
SELECT course.* FROM course LEFT JOIN sc ON course.id=sc.cid LEFT JOIN student ON student.id = sc.sid WHERE student.sname IS NULL;
--删除表
drop table student;
drop table course;
drop table sc;

--以上练习材料来自互联网
时间: 01-06

外键的增删改查练习的相关文章

linq的创建 和 数据的增删改查

1.linq创建之前,一定要在sql做好数据表的主外键关系. 2.linq文件是以.dbml结尾,一般一个数据库的名字就是一个linq的名字 3,以实例来演示增删改查 数据库的名字为linq,里面有两个表Users(UserName,Password,Sex,NickName,Birthday,Nation)和Nation(NationCode,NationName) (1)创建名为linq的linq. 创建完之后啥也不用改,如果需要在重新封装类和数据扩展,那就想以前重新建立Users和User

ASP.NET Web API基于OData的增删改查,以及处理实体间关系

本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public string Category { get; set; } [ForeignKey("Sup

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

SSH学习四 Hibernate多对一的关系 + 增删改查

多对一关系实现起来不难,只需要在"多"的一方声明外键,声明外键在类的映射文件实现. 下面以老师学生为例,老师是1,学生是多 有一个有趣的地方,在Student类里面,没有声明teacherid这个属性,但是只要在配置文件声明了外键,那么就算类里面没有外键,配置文件的property也没有teacherid 下面是几个关键文件: 1.Student类(包含Student的增删改查) package com.learn.po; import org.hibernate.Session; i

LinQ的增删改查

LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据. 高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名. 1.LinQ创建 Linq文件是dbml结尾,一个数据库对应一个Linq文件主外键 (1)首先表格要有主外键关系 (2)添加新项 LinQ to SQL类 ,起名为数据库名字 (3)服务器资源

MYSQL的常用命令和增删改查语句和数据类型

连接命令:<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a> -h[主机地址] -u[用户名] -p[用户密码] 创建<a href="http://lib.csdn.net/base/my

linq的简单增删改查

Linq高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名数据库数据访问,能大大减少代码量.(反正最后结果就是不用写ado.Net那一套增删改查,有一套封装好的方法直接点就行了)(1)Linq创建添加LINQ to SQL类,类名需与要连接的数据库名一样 Linq文件是dbml结尾,一个数据库对应一个Linq文件,比如送你要连接data0720这个数据库,linq的名字也取data0720(2)数据库连接打开服务器资源管理器,点击下图黄圈内按钮,连接到数

MYSQL所有的增删改查等等语句,作为程序员的你,够用了

MYSQL的常用命令和增删改查语句和数据类型 连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码]   创建数据库:create database [库名]   显示所有数据库: show databases;   打开数据库:use [库名]   当前选择的库状态:SELECT DATABASE();   创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......);   显示数据表字段:describe 表名; 

hibernate关联对象的增删改查------增

本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了非常多了,一对多,多对一,单向,双向... 事实上咱们能够简单的说就是A与B,有关系. 至于他们究竟是一对多,多对一,暂且不论. 咱们要讨论的是,假设我存储A,那么数据库里是否会有B;假设我删除A,那么与之相关的B是否也会删除;假设我更新了A,那么B是否会被更新;假设我查询出A,那么B是否也会被查询出来. 首先,咱们看一对多,多对一双向的样例.