-- 标准答案 
-- 老师表
-- 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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇