九:SQL之DQL数据查询语言多表操作
前言:
一:数据准备
员工表emp 和部门表 dept
注意:我在录入员工表的时候,特意添加了两条没有部门的员工,他们的部门id对应为null;
1 --分别创建部门和员工表,并实现一对多关系 2 DROP TABLE dept; 3 CREATE TABLE `dept`( 4 `d_id` INT(5) PRIMARY KEY AUTO_INCREMENT COMMENT '这是部门id主键自增长', 5 `d_name` VARCHAR(30) NOT NULL UNIQUE COMMENT '这是部门名称唯一非空' 6 ); 7 8 CREATE TABLE `emp`( 9 `e_id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '这是员工表的主键自增长', 10 `e_uname` VARCHAR(10) NOT NULL UNIQUE COMMENT '这是登录名', 11 `e_name` VARCHAR(20) NOT NULL COMMENT '这是真实姓名', 12 `e_pwd` VARCHAR(20) DEFAULT '123456' COMMENT '这是密码默认为123456', 13 `e_d_id` INT(5), 14 CONSTRAINT `emp_fk` FOREIGN KEY (`e_d_id`) REFERENCES dept (`d_id`) 15 ); 16 17 --准备数据 18 --先给dept录入测试数据 19 INSERT INTO dept VALUES(NULL,'财务部'),(NULL,'技术部'),(NULL,'营销部'),(NULL,'采购部'),(NULL,'市场部'); 20 INSERT INTO dept VALUES(NULL,'行政部'),(NULL,'后勤部'),(NULL,'总经办'),(NULL,'人事部'),(NULL,'策划部'); 21 --给emp录入测试数据 22 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('lqd','刘强东',20); 23 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('mht','马化腾',17); 24 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('my','马云',8); 25 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('lyf','刘亦菲',16); 26 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('wjl','王健林',9); 27 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zzt','章泽天',17); 28 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('ldh','刘德华',10); 29 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('dl','丁磊',16); 30 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zhy','周鸿祎',18); 31 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zzy','章子怡',9); 32 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('abm','奥巴马',19); 33 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zjl','周杰伦',7); 34 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zcy','张朝阳',16); 35 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zj','周洁',19); 36 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('syp','苏有朋',20); 37 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('fxg','冯小刚',20); 38 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('wsc','王思聪',10); 39 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('hxn','韩晓诺',19); 40 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('zy','曾洋',7); 41 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('hh','韩寒',6); 42 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('mbp','姆巴佩',17); 43 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('gjm','郭敬明',7); 44 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('wsc','王宝强',10); 45 INSERT INTO emp (e_uname,e_name,e_d_id)VALUES('xjy','许家印',6); 46 INSERT INTO emp (e_uname,e_name)VALUES('wyf','吴亦凡'); 47 INSERT INTO emp (e_uname,e_name)VALUES('zly','赵丽颖');
二:多表查询
2.1:取别名
当同时查询两个表时,每次写表名和字段名比较麻烦,可以给表娶一个别名 det AS d 字段 d_name就可以表示成d.d_name
给字段其别名有助于显示的更加清楚
2.1参考代码:
1 mysql> select * from emp AS e; 2 +------+---------+--------+--------+--------+ 3 | e_id | e_uname | e_name | e_pwd | e_d_id | 4 +------+---------+--------+--------+--------+ 5 | 1 | lqd | 刘强东 | 123456 | 20 | 6 | 2 | mht | 马化腾 | 123456 | 17 | 7 | 3 | my | 马云 | 123456 | 8 | 8 | 4 | lyf | 刘亦菲 | 123456 | 16 | 9 | 5 | wjl | 王健林 | 123456 | 9 | 10 | 6 | zzt | 章泽天 | 123456 | 17 | 11 | 7 | ldh | 刘德华 | 123456 | 10 | 12 | 8 | dl | 丁磊 | 123456 | 16 | 13 | 9 | zhy | 周鸿祎 | 123456 | 18 | 14 | 10 | zzy | 章子怡 | 123456 | 9 | 15 | 11 | abm | 奥巴马 | 123456 | 19 | 16 | 12 | zjl | 周杰伦 | 123456 | 7 | 17 | 13 | zcy | 张朝阳 | 123456 | 16 | 18 | 14 | zj | 周洁 | 123456 | 19 | 19 | 15 | syp | 苏有朋 | 123456 | 20 | 20 | 16 | fxg | 冯小刚 | 123456 | 20 | 21 | 17 | wsc | 王思聪 | 123456 | 10 | 22 | 18 | hxn | 韩晓诺 | 123456 | 19 | 23 | 19 | zy | 曾洋 | 123456 | 7 | 24 | 20 | hh | 韩寒 | 123456 | 6 | 25 | 21 | mbp | 姆巴佩 | 123456 | 17 | 26 | 22 | gjm | 郭敬明 | 123456 | 7 | 27 | 24 | xjy | 许家印 | 123456 | 6 | 28 +------+---------+--------+--------+--------+ 29 23 rows in set (0.00 sec) 30 31 mysql> select * from dept; 32 +------+--------+ 33 | d_id | d_name | 34 +------+--------+ 35 | 19 | 人事部 | 36 | 17 | 后勤部 | 37 | 10 | 市场部 | 38 | 18 | 总经办 | 39 | 7 | 技术部 | 40 | 20 | 策划部 | 41 | 8 | 营销部 | 42 | 16 | 行政部 | 43 | 6 | 财务部 | 44 | 9 | 采购部 | 45 +------+--------+ 46 10 rows in set (0.00 sec) 47 48 mysql> select d_name as '部门名称' from dept; 49 +----------+ 50 | 部门名称 | 51 +----------+ 52 | 人事部 | 53 | 后勤部 | 54 | 市场部 | 55 | 总经办 | 56 | 技术部 | 57 | 策划部 | 58 | 营销部 | 59 | 行政部 | 60 | 财务部 | 61 | 采购部 | 62 +----------+ 63 10 rows in set (0.00 sec) 64 65 mysql> SELECT e.e_uname,e.e_pwd FROM emp e; 66 +---------+--------+ 67 | e_uname | e_pwd | 68 +---------+--------+ 69 | lqd | 123456 | 70 | mht | 123456 | 71 | my | 123456 | 72 | lyf | 123456 | 73 | wjl | 123456 | 74 | zzt | 123456 | 75 | ldh | 123456 | 76 | dl | 123456 | 77 | zhy | 123456 | 78 | zzy | 123456 | 79 | abm | 123456 | 80 | zjl | 123456 | 81 | zcy | 123456 | 82 | zj | 123456 | 83 | syp | 123456 | 84 | fxg | 123456 | 85 | wsc | 123456 | 86 | hxn | 123456 | 87 | zy | 123456 | 88 | hh | 123456 | 89 | mbp | 123456 | 90 | gjm | 123456 | 91 | xjy | 123456 | 92 +---------+--------+ 93 23 rows in set (0.00 sec)