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 fk_约束名 FOREIGN KEY(外键列) REFERENCES 主键表(主键列);
ALTER TABLE grade ADD CONSTRAINT fk_users_grade FOREIGN KEY(user_id) REFERENCES users(id);


-- 添加数据 
-- VALUES 可以同时添加多条数据
insert into users(uname,upass,phone) valueS
("张三","123321",13512332132),
("李四","626621",13216332132),
("王五","221321",13743322132);




insert into grade(english,grade_time,user_id) values
(59.5,"2022-12-09",1),
(80,"2022-12-08",2),
(90,"2022-12-07",2),
(70,"2022-12-09",3),
(60.5,"2022-12-07",3);


-- 成绩表 7个数据
-- 用户表 6个人
-- 多表联合查询 42个数据

-- 查询成绩时同时查询到是哪个人 把姓名得到
-- 如果不跟条件 那数据库会不知道成绩是谁的,就会把每一条成绩给每一个人。
-- 如果字段重复需要添加表名 否则可省略
-- 多表联合查询
select uname,english,grade_time -- 所有字段
from grade,users  -- 查询的表
where user_id = users.id -- 第一个条件必须是外键和主键进行关联
and english > 60 
and grade_time = "2022-12-07";

-- NOW() 当前时间
insert into grade(english,grade_time,user_id) value (100.0,now(),1);


-- 查询数据
SELECT * FROM users;
SELECT * FROM grade;

-- 删除用户
delete from users where id = 2;

-- 1、先把成绩删除了 是可以删除
-- 2、删除依赖

-- 删除成绩
delete from grade where user_id = 2;


-- 主外键约束
-- 在添加数据时约束外键表
-- 在删除数据时约束主键表


-- 课堂练习时间
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-09 09:35:10
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇