2017.10.20笔记:多表数据操作

一.创建表

1.学员表

ID学号姓名身份证号所属班级
1111张三123J96
2222李四456J93
3333王五236J93
-- 创建学员表
DROP TABLE IF EXISTS t_student;
CREATE TABLE t_student(
    id              INT PRIMARY KEY AUTO_INCREMENT,
    code            VARCHAR(255),
    name            VARCHAR(255),
    id_card_number  VARCHAR(255),
    clazz_id        VARCHAR(255),
    CONSTRAINT fk_student_clazz FOREIGN KEY (clazz_id) REFERENCES t_clazz(id)
);

2.班级表

ID名称
1JAVA96班
2JAVA93班
-- 创建班级表
DROP TABLE IF EXISTS t_clazz;
CREATE TABLE t_clazz(
    id      INT PRIMARY KEY AUTO_INCREMENT,
    name    VARCHAR(255)
);

3.课程表

ID课程名称
1HTML
2CSS
3JavaScript
DROP TABLE IF EXISTS t_course;
CREATE TABLE t_course(
    id      INT PRIMARY KEY AUTO_INCREMENT,
    name    VARCHAR(255)
);

4.学员账号表

ID学员ID账号密码
1s1zhangsan123456
2s2lisi123456
3s3wangwu123456
-- 创建学员账号表
DROP TABLE IF EXISTS t_account;
CREATE TABLE t_account(
    id              INT PRIMARY KEY AUTO_INCREMENT,
    student_id      INT UNIQUE,
    userName        VARCHAR(255),
    password        VARCHAR(255),
    CONSTRAINT fk_account_student FOREIGN KEY (student_id) REFERENCES t_student(id)
)

5.学员课程关系表

ID学员ID课程ID
1s11
2s12
3s13
4s21
5s22
-- 创建学员课程关系表
DROP TABLE IF EXISTS t_student_course;
CREATE TABLE t_student_course(
    id              INT PRIMARY KEY AUTO_INCREMENT,
    student_id      INT,
    course_id       INT,
    CONSTRAINT fk_middle_student FOREIGN KEY (student_id) REFERENCES t_student(id),
    CONSTRAINT fk_middle_course FOREIGN KEY (course_id) REFERENCES t_course(id)
);

二.表关联查询

1.自然连接查询
使用 WHERE 条件将两个表之间进行关联查询

-- 查询学员的学号、姓名、所在班级名称
SELECT s.clazz_id,s.code,s.`name`,c.id,c.`name`
FROM student as s, clazz as c
WHERE S.clazz_id = C.id

2.内连接查询

-- 内连接查询
SELECT s.`code`, s.`name`, c.`name` FROM student s 
INNER JOIN clazz c ON s.clazz_id = c.id

3.左外连接查询
以左表为主表,左表中的数据都会被显示出来,关联的右表中,如果存在符合条件的数据,那么会被关联出并显示,如果没有,则会显示 NULL。

-- 左外连接
SELECT s.`code`, s.`name`, c.`name` FROM student s 
LEFT JOIN clazz c ON s.clazz_id = c.id

4.综合查询

-- 查询学员选课信息,要求显示出班级、账号、课程等基础信息
SELECT 
cl.name as '班级名称',
s.`code` as '学号',
s.`name` as '姓名', 
a.username as '账号',
a.password as '账号密码',
c.`name` as '课程名称'
FROM student_course sc
LEFT JOIN student s ON sc.student_id = s.id
LEFT JOIN course c on sc.course_id = c.id
LEFT JOIN clazz cl on s.clazz_id = cl.id
LEFT JOIN account a on a.student_id = s.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值