#----------------- 主外键  多对多关系---------------------

-- 老师表
-- NOW() = current_timestamp()时间戳函数 = CURRENT_TIMESTAMP常量
-- NOW()函数默认值必须在5.5+版本以上使用
-- 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);

-- 添加数据
insert into teachers(uname,age) value ("张老师",50);
INSERT INTO teachers(uname,age) VALUE ("李老师",40);
INSERT INTO teachers(uname,age) VALUE ("王老师",30);
select * from teachers;
-- 添加数据的第二种写法
insert into class(cname,grade) values
("火箭班","一年级"),
("平行班","二年级"),
("实验班","二年级");
select * from class;

-- 中间表的数据添加
-- 张老师带火箭班和实验班
insert into class_and_teacher(class_id,teacher_id) values
(1,1),
(3,1);
-- 李老师带平行班和实验班
insert into class_and_teacher(class_id,teacher_id) values
(2,2),
(3,2);
-- 王老师带火箭班平行班实验班
insert into class_and_teacher(class_id,teacher_id) values
(1,3),
(2,3),
(3,3);


select * from class_and_teacher;

-- 课堂练习
-- 查询出李老师带了哪些班 显示 老师姓名和班级名称年级名称
select t.uname,c.cname,c.grade  -- 要显示怎么字段
from class as c,class_and_teacher as cat,teachers as t -- 查询哪几张表
where cat.class_id = c.id -- 关联外键和主键
and   cat.teacher_id = t.id -- 关联外键和主键
and   t.uname = "李老师"; -- 查询条件


--  模糊查询 like
-- like 搭配 % 号使用 %(通配符)
INSERT INTO teachers(uname,age) VALUE ("李阳老师",28);
INSERT INTO teachers(uname,age) VALUE ("张少阳老师",68);
INSERT INTO teachers(uname,age) VALUE ("王阳斌老师",40);
-- 我想要知道我们学习有哪些姓李的老师?
-- % 通配符 = *
select * from teachers;
SELECT * FROM teachers where uname like "李%";
-- 我想知道我们学校有哪些老师名字中带阳的?
SELECT * FROM teachers WHERE uname LIKE "%阳%";


-- 排序
-- order by 字段 asc(正序)/desc(倒序)
-- 我想知道老师中 谁最后注册-最先注册倒序
SELECT * FROM teachers order by create_time desc;
-- 我们想知道老师中 年龄按由大到小排序
SELECT * FROM teachers order by age desc;
-- 我们想知道老师中(除了李老师) 年龄按由大到小排序
SELECT * FROM teachers where id != 2 order by age desc;
SELECT * FROM teachers where uname != "李老师" order by age desc;


-- 分页
-- limit a,b
-- a第几条开始 b显示几条
select * from teachers limit 0,3;
-- 第一页是0,3 每页显示3条 第二页这个数据应该为多少?
select * from teachers limit 3,3;
-- 公式
-- a = (页数 - 1)*条数






 

最后修改于 2022-12-13 19:21:47
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇