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的目的

在实际工作中效率非常重要,可视化软件可以大大提升工作效率
它可以充当很多数据库的客服端的软件

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;

 

posted @ 2021-09-08 17:04  微纯册  阅读(259)  评论(0编辑  收藏  举报