### 第一套 ```sql #1 插入记录 /* 主键自增字段:DEFAULT 设置成空值:NULL */ INSERT INTO t_employee() VALUES('e0013', '刘红', '女', 22, '实习生', 'd0002', NULL); #2.修改表结构 /* 修改表中字段的数据类型 ALTER TABLE 表名 MODIFY 字段名 数据类型 [约束]; */ ALTER TABLE t_employee MODIFY sex ENUM('男', '女'); #3 创建外键 /* 学生表(学号、姓名、班级编号) 班级表(班级编号、班级名称) 外键表:学生表 主键表:班级表 ALTER TABLE 学生表 ADD CONSTRAINT fk_st FOREIGN KEY(班级编号) REFERENCES 班级表(班级编号); FOREIGN KEY(字段) 外键表中的字段 REFERENCES 表名(字段) 字段是表中的主键 */ ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(字段名) REFERENCES 表名(主键字段名); ALTER TABLE t_employee ADD CONSTRAINT fK_did FOREIGN KEY(did) REFERENCES t_department(did); #4 排序、分页查询 tj11 /* 基础查询 SELECT 字段 FROM 表 ORDER BY 需要排序的字段 ASC/DESC(升序/降序) LIMIT 起始位置,个数; */ #查询出员工的所有信息 SELECT * FROM t_employee; #在基础查询之上对年龄进行降序排序 SELECT * FROM t_employee ORDER BY age DESC; #在排序的基础之上,进行分页 SELECT * FROM t_employee ORDER BY age DESC LIMIT 5, 8;#第0个代表第一个 第六个使用的位置是5 #5条件查询 tj12 /* SELECT 字段 FROM 表 WHERE 条件; */ SELECT * FROM t_salary WHERE money >= 5000 AND money <= 8000; #6 tj13 分组查询 SELECT eid, MAX(money) FROM t_salary GROUP BY eid; #7 tj14 多表联查+条件过滤 SELECT d.dname, e.ename FROM t_employee e, t_department d WHERE e.did = d.did AND e.position = '经理'; #8 CREATE VIEW v_hrm AS SELECT d.dname, e.ename, s.money, s.stime FROM t_employee e, t_department d, t_salary s WHERE e.did = d.did AND e.eid = s.eid ORDER BY s.stime DESC; #9 触发器 DELIMITER $$ DROP TRIGGER IF EXISTS tri_updateGroup; CREATE TRIGGER tri_updateGroup BEFORE UPDATE ON t_employee FOR EACH ROW BEGIN IF NEW.age != OLD.age THEN IF NEW.age<30 THEN SET NEW.groups = '青年'; ELSEIF NEW.age<50 THEN SET NEW.groups = '中年'; ELSE SET NEW.groups = '老年'; END IF; END IF; END $$ DELIMITER ; #10 存储过程 DELIMITER $$ #改变代码结束符 DROP PROCEDURE IF EXISTS pro_GetTopSalary;#创建存储过程之前先删除 #设置存储过程名,传入传出参数名和数据类型 CREATE PROCEDURE pro_GetTopSalary(IN in_did CHAR(10), OUT out_ename VARCHAR(30)) BEGIN #连接查询+排序+分页 SELECT e.ename INTO out_ename FROM t_employee e, t_salary s WHERE e.eid = s.eid AND e.did = in_did ORDER BY s.money DESC LIMIT 1; END $$ DELIMITER ; #调用存储过程 传入用户变量接收传出数据并使用打印出来 CALL pro_GetTopSalary('d0001', @result); SELECT @result; ``` ### 第二套