zoukankan      html  css  js  c++  java
  • 我对数据库关系代数中减法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;



  • 相关阅读:
    VS停止调试,IIS Express也跟着关闭了
    会钓鱼的程序员
    彻底搞懂https原理
    Java小知识
    ORA-01000: 超出打开游标的最大数(java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误)
    虚拟机电脑重启后连接不上ORACLE
    电视直播源
    国内开源镜像站
    分享一波泰勒斯威夫特手机高清壁纸
    阿里云网盘内测申请
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053497.html
Copyright © 2011-2022 走看看