mysql常用命令(4)高级查询
嵌套子查询:
查询工资比张学友高的人的信息:
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;