mysql常用命令(4)高级查询

2018-02-08  本文已影响0人  Yossef

嵌套子查询:

查询工资比张学友高的人的信息:

select * from wages where uwages>(select uwages from wages where name="张学友");

查询工资高于50000的人的信息  用嵌套来示范 in是包含 not in 是不包含:

select * from wages where uwages in (select uwages from wages where uwages>50000);

查询因为加班得到奖金的人:

select * from wages where name in (select name from bonus where breason="加班");

any:满足查询出来的数据任何一个即可

all: 必须满足所有

查询奖金比奖金表里“某一”人奖金低的信息:

用any:

select * from wages where name in (select name from bonus where howmuch from bonus));

用聚合函数 max 最大值:

select * from wages where name in (select name from bonus where howmuch<(select max(howmuch) from bonus));    //推荐用这个

查询奖金比所有加班人员的奖金都少的人员的个人工资信息:

select * from wages where name in(select name from bonus where howmuch from bonus where breason="加班"));

内连接:

查询员工表与奖金表姓名相对应的信息:

select * from wages join bonus on wages.name=bonus.name;

内链接会查出两个表共有的数据

外连接:

左外连接:

查询员工表所有信息以及奖金表与员工表姓名相对应的信息:

select * from wages left join bonus on wages.name=bonus.name;

这时候左边的表会显示所有信息 右边的表根据左边的来 左边比他多 他就会显示几行null 左边比他少 他就会少显示几行

右外连接:

查询奖金表所有信息 员工表与奖金表姓名相同的信息:

select * from wages right join bonus on bonus.name=wages.name;

这时候会根据右边的表来查询 右边的表数据全部显示出来 左边依着右边来

交叉连接:

交叉联接也叫非限制联接,它将两个表不加任何约束的组合起来。在数学上,就是两个表的笛卡尔积。交叉联接后得到的行数是两个被联接表的行数的乘积。

查询员工表和奖金的数据 并且每一个条数据相比:

select * from wages cross join bonus;

上一篇下一篇

猜你喜欢

热点阅读