MySQL的关键字补充、多表查询和navicat
MySQL的关键字补充、多表查询和navicat
- 关键字补充
- 多表查询理论
- 多表查询联表
- 多表查询子查询
- 多表查询总结
- 可视化软件navicat
关键字补充
group_concat()方法
功能
获取除分组以外其他字段数据,可以拼接字段名(用于分组之后)
例题1:
# 把各部门的员工和性别输出 select post,group_concat(name,':',gender) from emp group by post;
例题2:
# 把各单位的员工输出
select post,group_concat(name) from emp group by post;
concat()方法
功能:
组合字符段和字符段或字符端与符号的组合(用于分组之前)
例题:
# 把部门的员工和性别单列输出 select concat(name,':',gender) from emp group by post;
concat_ws()方法
功能:
插入分隔符(用于分组之前)
例题:
select concat_ws('|',name,age,salary,gender) from emp where age>30;
as语法
功能:
多用于别名
例题1:
# 可以给查询出来的字段名起别名 select id as 'num',name as 'name' from emp;
例题2:
# 给表名起别名,将emp区别名为t1,将id等于五的信息输出
select * from emp as t1 where t1.id=5;
''' 总结: 表名/字段名 as 别名 '''
多表查询理论
功能:
结合多个表的数据,进行查询
实践前准备:
# 建表 create table depp( id int primary key auto_increment, name varchar(20) ); create table emp2( id int primary key auto_increment, name varchar(20), gender enum('male','female') not null default 'male', age int, dep_id int );
# 插入数据
insert into depp values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');
insert into emp2(name,gender,age,dep_id) values
('jason','male',18,200),
('egon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);
例题:
# 查询各员工姓名及对应的部门名称 # 在此使用笛卡尔积方法(不推荐) select emp2.name,depp.name from emp2,depp where emp2.dep_id=depp.id;
多表查询联表
联表理念
将多个表合并为一个表来使用
关键字:
inner join :
内连接 将两表中通过相应的数据连结起来,只显示有对应关系的。运用较广
例题:
# 将emp2中dep_id与depp中id相同的字段连结起来 select * from emp2 inner join depp on emp2.dep_id=depp.id;
left join:
左连接 以关键字左表为基础展示左表的数据和对应右边的数据,没有对应的以null填充
例题:
select * from emp2 right join depp on emp2.dep_id=depp.id;
right join:
右连结 以关键字右表为基础展示左表的数据和对应左边的数据,没有对应的以null填充
例题:
select * from emp2 right join depp on emp.dep_id=depp.id;
union:
整体连结 将两表中通过相应的数据连结起来,没有对应的以null填充
例题:
select * from emp2 left join depp on emp2.dep_id=depp.id union select * from emp2 right join depp on emp2.dep_id=depp.id;
多表查询子查询
思路:
分布操作
方法:
将表的查询结果当作一条sql语句使用
例题:查询部门是技术或者人力资源的员工信息
方法1:
select * from emp2 inner join depp on emp2.dep_id=depp.id where depp.name in ('技术','人力资源');
方法2:子查询
1.查询人力资源和技术id号
select name,id from depp where name in ('技术','人力资源');
2.再去员工表里面根据部门id号选出员工数据
select * from emp2 where dep_id in (
select id from depp where name in ('技术','人力资源')
);
多表查询总结:
''' 多表查询只有两种方法 1.联表操作 2.子查询 复杂的查询甚至需要两者的结合 '''
使用Navicat的目的
在实际工作中效率非常重要,可视化软件可以大大提升工作效率
它可以充当很多数据库的客服端的软件
Navicat的特点
优点:效率高
缺点:要钱
安装地址:
https://www.navicat.com.cn/products#navicat
破解方法
破解地址:https://defcon.cn/214.html
Navicat功能:
1.表关系可视 2.创建表 3.外键 4.查询SQL 5.SQL文件存取等等
小练习
查询平均年轻在25岁以上的部门名(使用两种方式都完成一下)
方法:子查询
# 确定25岁以上的部门id
select dep_id from emp where age>25;
# 确定部门
select name from depp where id in (
select dep_id from emp where age>25
);
方法:联表
select depp.name from emp left join depp on emp.dep_id=depp.id where age>25 group by name;