-- 用户表
CREATE TABLE users(
	id      INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT 'id',
	uname   VARCHAR(20) NOT NULL DEFAULT '默认用户' COMMENT '昵称', 
	upass   VARCHAR(30) NOT NULL COMMENT '密码',
	phone   BIGINT(11)  NOT NULL COMMENT '电话号码',
	qq      INT(10) COMMENT 'qq号码',
	id_card CHAR(18) COMMENT '身份证号',
	sex     INT(1) NOT NULL DEFAULT 0 COMMENT '0代表女 1代表男'
);
-- 成绩表
CREATE TABLE grade(
	id INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT 'id', -- 主键
	english DOUBLE(4,1) COMMENT '分数',
	grade_time DATE COMMENT '考试时间',
	user_id INT(11) COMMENT '用来放用户表的主键' -- 外键
);


-- 主外键约束 防止垃圾数据的产生
-- ALTER TABLE 外键表 ADD CONSTRAINT 约束名称 FOREIGN KEY(外键列) REFERENCES 主键表(主键列);
ALTER TABLE grade ADD CONSTRAINT fk_users_grade FOREIGN KEY(user_id) REFERENCES users(id);

-- 添加用户
INSERT INTO users(uname,upass,phone) VALUEs
("张三","1123321",13916134321),
("李四","123321",13914234321),
("王五","1123321",13916134321);

-- 添加成绩
-- 有约束过后 会在主键表里面看主键存不存在 存在才添加数据。
INSERT INTO grade(english,grade_time,user_id) VALUEs
(60.0,"2022-10-22",1),
(60.0,"2022-10-22",2),
(80.0,"2022-10-21",2),
(70.0,"2022-10-21",3);




-- 查询成绩时把这个人的信息一起查询了
-- 复杂查询(多表联查)
-- 不加条件(3*3=9个数据) 会把 每个成绩和每个用户组合起来
-- 如果字段有重复需要加上表名,否则可省略
select grade.id,uname,english,grade_time -- 查询的字段 id 姓名 成绩 考试时间
from users,grade  -- 要查询的表
where user_id = users.id -- 条件
-- 看70分以下的人有哪些(包括70分)
and english <= 70 
-- 22号的数据
and grade_time = "2022-10-22";

-- Where后面加添加条件  AND后面补充条件  条件越多查询越精准。


-- 查询语句
SELECT * FROM users;
SELECT * FROM grade;

-- 删除语句
delete from users where id = 2;
-- 主外键约束
-- 在添加数据时约束外键表
-- 在删除数据时约束主键表
delete from grade where user_id = 2;



-- 什么时候添加约束?
-- dev环境   开发环境   可以不加约束(不规范)
-- test环境  测试环境   添加约束
-- prod环境  生产环境   添加约束


-- 练习时间
INSERT INTO users(uname,upass,phone,qq) VALUES
("张三","123456",13914231523,123512),
("李四","141242",13914231523,123512),
("王五","612312",13914231523,123512);
INSERT INTO grade(english,grade_time,user_id) VALUES
(92.5,"2022-12-04",1),
(20.5,"2022-12-04",2),
(95.5,"2022-12-04",2),
(93.5,"2022-12-03",1),
(80.5,"2022-12-03",3),
(59.5,"2022-12-03",3);
SELECT * FROM users;
SELECT * FROM grade;


-- 练习1
-- 查询考试小于60分的有哪些人 显示姓名和成绩
-- AS 别名(昵称)
-- grade.user_id  =  g.user_id
SELECT u.uname,g.english FROM users AS u,grade AS g 
WHERE u.id = g.user_id
AND g.english < 60;

-- 练习2
-- 查询在 12月4日考试的有哪些人  显示id和姓名
SELECT u.id,u.uname FROM users AS u,grade AS g 
WHERE u.id = g.user_id
AND g.grade_time = "2022-12-04";

-- 练习3
-- 查询 考试成绩在60分以上 80分以下(包含80)有哪些人  显示姓名和成绩
SELECT u.uname,g.english FROM users AS u,grade AS g 
WHERE u.id = g.user_id
AND g.english > 60 
AND g.english <= 80;












 

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