我对数据库关系代数中减法sql实现的思考:mysql脚本
一、创建数据库,创建表结构
CREATE DATABASE Test_sub DEFAULT CHARACTER SET utf8;
USE Test_sub;
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 学号 id
NAME VARCHAR(10) -- 姓名 name
);
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT, -- 课程号 id
NAME VARCHAR(10) -- 课程名 name
);
CREATE TABLE sc(
student_id INT,
course_id INT,
PRIMARY KEY(student_id, course_id),
CONSTRAINT student_fk FOREIGN KEY(student_id) REFERENCES student(id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT course_fk FOREIGN KEY(course_id) REFERENCES course(id) ON UPDATE CASCADE ON DELETE CASCADE
);
二、插入数据
INSERT INTO student(NAME) VALUES
('aaa'), ('bbb'), ('ccc'), ('ddd');
INSERT INTO course(NAME) VALUES
('课程_1'), ('课程_2'), ('课程_3'), ('课程_4');
INSERT INTO sc VALUES
(1, 1), (1, 2), (1, 3), (1, 4),
(2, 1), (2, 2), (2, 3),
(3, 1), (3, 2),
(4, 1);
三、操作
查询学生ddd未选的课程:使用左外连接,并查询为空的
SELECT course.name
-- select *
FROM
course LEFT JOIN
(
SELECT *
FROM sc
WHERE sc.student_id =
(
SELECT id
FROM student
WHERE NAME = 'ddd'
-- limit 0,1
)
) AS sc_1
ON course.id = sc_1.course_id
WHERE sc_1.student_id IS NULL;
补:课本案例,实现左外、右外:
1.创建表结构:
CREATE TABLE R(
A CHAR(2),
B CHAR(2),
C CHAR(2)
);
CREATE TABLE S(
B CHAR(2),
E CHAR(2)
);
2.插入值:
INSERT INTO R VALUES
('a1', 'b1', '5'),
('a1', 'b2', '6'),
('a2', 'b3', '8'),
('a2', 'b4', '12');
INSERT INTO S VALUES
('b1', '3'),
('b2', '7'),
('b3', '10'),
('b3', '2'),
('b5', '2');
3.测试左外:
SELECT *
FROM r
LEFT JOIN s ON r.b = s.b;
4.测试右外:
SELECT *
FROM r
RIGHT JOIN s ON r.b = s.b;
我对数据库关系代数中减法sql实现的思考:mysql脚本的更多相关文章
- IDEA 中Spark SQL通过JDBC连接mysql数据库
一.IDEA装驱动: 1.下载一个MySQL的JDBC驱动:mysql-connector-java-5.1.44.tar.gz2.在idea Open Moudle Settings 在 Moudl ...
- 有两个数据库A和B,数据库A中有表a,如何把表a映射到数据库B中,sql 2005
select * into B.dbo.a from A.dbo.a 就把表同步过去如果只同步表结构select * into B.dbo.a from A.dbo.a where 1<> ...
- 关于Mac系统中my sql 和navicat for mysql 的连接问题。
我这个完完全全的技术小小白,经过数个小时的网搜,navicat for mysql和mysql终于可以可以正常连接了,好开森啊!,我把我遇到的问题,以及解决方法记录下来,希望也可以对遇到同样问题的能够 ...
- mysql 把文件中的sql语句导入到mysql中
mysql -uroot -proot -Dcollege</home/wwwroot/default/data/xlxxb_2014-10-16.txt;
- MySQL注释中的sql也可能执行
MySql支持三种注释形式:# 和–属于单行注释,注释范围为该行的结尾:/* */注释属于多行注释,此外该种注释还可以实现行内注释.具体的使用情况如下图中所示(四种使用情形): 除此之外,/* */这 ...
- Oracle中动态SQL详解(EXECUTE IMMEDIATE)
Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类: ...
- 通过SQL Server 2008 访问MySQL(转)
在公司中经常会遇到部署多种数据库环境的情况,对于开发人员来说经常在不同数据库之间转换确实有些繁琐,本篇将介绍从SQL Server 操作MySQL 数据库的方法. 数据库测试环境 1. SQL Ser ...
- SQL Azure (14) 将云端SQL Azure中的数据库备份到本地SQL Server
<Windows Azure Platform 系列文章目录> 注意: 1.只有SQL Server 2012 CU4及以上版本才支持本章内容 2.当你的数据库文件很大时,建议优化以下内容 ...
- 在Oracle中使用sql获取数据库名称
在Oracle中使用sql获取当前数据库名称 select name from v$database;
随机推荐
- 【Mysql】InnoDB 引擎中的数据页结构
InnoDB 是 mysql 的默认引擎,也是我们最常用的,所以基于 InnoDB,学习页结构.而学习页结构,是为了更好的学习索引. 一.页的简介 页是 InnoDB 管理存储空间的基本单位,一个页的 ...
- 禁用ipv6的两种方法
1 通过系统配置文件/etc/sysctl.conf 在sysctl.conf文件中添加行 # 禁用整个系统所有接口的IPv6 net.ipv6.conf.all.disable_ipv6 = 1 # ...
- 怎么实现系统调用wait和exit
例程 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/wai ...
- 微信小程序云开发-云函数-调用初始云函数获取openid
一.调用初始云函数获取openid的两种方法 1.传统的success和fail 2.ES6的.then和.catch 3.编译结果 说明:初始云函数,是指刚创建完成的云函数.默认系统写的代码.
- vue3如何编写挂载DOM的插件
vue3 跟 vue2 相比,多了一个 app 的概念,vue3 项目的创建也变成了 // main.jsimport { createApp } from 'vue' import App from ...
- 13Java进阶——IO、线程
1 字节缓冲流 BufferInputStream 将创建一个内部的缓冲区数组,内部缓冲区数组将根据需要从包含的输入流中重新填充,一次可以读取多个字节 BufferOutputStream 该类实现缓 ...
- 数据分析学习1-----matplotlib
安装:Anaconda 详细见:https://blog.csdn.net/lwplwf/article/details/79162470 使用^ThinkPad-E560:~# spyder 命令 ...
- C++第三十八篇 -- 研究一下Windows驱动开发(二)--WDM式驱动的加载
基于Windows驱动开发技术详解这本书 一.简单的INF文件剖析 INF文件是一个文本文件,由若干个节(Section)组成.每个节的名称用一个方括号指示,紧接着方括号后面的就是节内容.每一行就是一 ...
- JDK1.7HashMap死锁
JDK1.7HashMap多线程问题 Java技术交流群:737698533 在看之前可以先看看JDK1.7的Hashmap的源码 HashMap在多线程情况下是不安全的,一个是数据的准确性问题,一个 ...
- java获取日出日落时间
import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...