-- 标准答案
-- 老师表
-- timestamp 时间戳
-- 这个默认值为 CURRENT_TIMESTAMP 当前系统时间
CREATE TABLE teachers(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(40) NOT NULL COMMENT '老师名',
age INT(3) NOT NULL COMMENT '年龄',
sex INT(1) NOT NULL DEFAULT 0 COMMENT '性别',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
);
-- 班级表
CREATE TABLE class(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(40) NOT NULL COMMENT '班级',
grade VARCHAR(20) NOT NULL COMMENT '年级'
);
-- 老师和班级的中间表
-- 中间表就会出现两个外键字段
CREATE TABLE class_and_teacher(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
class_id INT(11) NOT NULL COMMENT '班级表的主键id',
teacher_id INT(11) NOT NULL COMMENT '老师表的主键id'
);
-- 主外键约束写几个?
-- ALTER TABLE 外键表 ADD CONSTRAINT 外键名(自己定义) FOREIGN KEY(外键字段) REFERENCES 主键表(主键字段);
ALTER TABLE class_and_teacher ADD CONSTRAINT fk_cat_class FOREIGN KEY(class_id) REFERENCES class(id);
ALTER TABLE class_and_teacher ADD CONSTRAINT fk_cat_teachaer FOREIGN KEY(teacher_id) REFERENCES teachers(id);
-- 添加数据
/**
1、张老师带火箭班和实验班
2、李老师带平行班和实验班
3、王老师带火箭班平行班实验班
*/
-- 分别使用value和values添加
-- 老师表1 -- 班级表2 -- 中间表3
SELECT * FROM teachers;
SELECT * FROM class;
SELECT * FROM class_and_teacher;
INSERT INTO teachers(uname,age) VALUES
("张老师",26),
("李老师",66),
("王老师",19);
INSERT INTO class(cname,grade) VALUE("火箭班","二年级");
INSERT INTO class(cname,grade) VALUE("平行班","二年级");
INSERT INTO class(cname,grade) VALUE("试验班","三年级");
INSERT INTO class_and_teacher(class_id,teacher_id) VALUES
(1,1),
(1,3),
(2,2),
(2,3),
(3,1),
(3,2),
(3,3);
-- 多表联合查询 查出张老师带了哪些班 显示老师名字 班级名称 和年级
SELECT t.uname,c.cname,c.grade #显示的字段
FROM class AS c,teachers AS t,class_and_teacher AS cat #查询的表
WHERE cat.class_id = c.id -- 因为是多对多关系需要写两个主外键关联
AND cat.teacher_id = t.id
AND t.uname = "张老师";
-- 特殊的查询方式
INSERT INTO teachers(uname,age) VALUES
("张强老师",26),
("李斌老师",66),
("王宝强老师",19);
-- LIKE 模糊查询 搭配%使用
-- 查询所有姓王的老师
-- % 通配符
SELECT * FROM teachers WHERE uname LIKE "王%";
-- 查询姓名中带有强字的老师
SELECT * FROM teachers WHERE uname LIKE "%强%";
-- 排序
-- ORDER BY 字段 DESC(倒序)/ASC(升序)
-- 查询所有老师并按照年龄大小排序
SELECT * FROM teachers ORDER BY age DESC;
-- 分页
-- LIMIT a,b
-- a 是当前页数(其实条数)
-- b 每页显示多少条
-- a = (a - 1) * b;
-- 对老师进行分页展示,每页展示10条
SELECT * FROM teachers LIMIT 20,10;
-- 没有新内容了 剩下时间吧多对多关系理解清楚。
最后修改于 2022-12-16 09:50:44
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

