mysql基础四

MySQL多表查询
导入 2 张 数据库 表
在这里插入图片描述
在这里插入图片描述
查询姓名中包含 “小 ” 的所有的 用户
select * from hzuser where name like ‘%小%’;
排序
排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序,如果存在where子句那么order by必须放到where语句的后面
按照薪水由小到大排序(系统默认由小到大)
select * from hzuser order by usersal;
取得job为 “格格”的用户,按照薪水由小到大排序(系统默认由小到大)
select * from hzuser where job=‘格格’ order by usersal;
如果包含where语句order by必须放到where后面,如果没有where语句order by放到表的后面
select * from hzuser order by where job=‘格格’ order by usersal;
按照多个字段排序,如:首先按照job排序,再按照usersal排序
select * from hzuser order by job,usersal;
手动指定排序顺序
手动指定按照薪水由小到大排序
select * from hzuser order by usersal asc; //记忆口诀 , a 最小 就是 从小到大。 desc 就是 大到小
多个字段排序
按照job和薪水 由大到小排序
select * from hzuser order by job desc, usersal desc;
如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序
分组查询
分组查询主要涉及到两个子句,分别是:group by和having
group by
取得每个工作岗位的工资合计,要求显示岗位名称和工资合计
select job, sum(usersal) from hzuser group by job;
如果使用了order by,order by必须放到group by后面 排序时候注意
select job, sum(usersal) from hzuser group by job order by sum(usersal) ;
having
如果想对分组数据再进行过滤需要使用having子句 (没 group by 就没having )
取得每个岗位的平均工资大于2000
select job, avg(usersal) from hzuser group by job having avg(usersal) >2000;
分组函数的执行顺序:
根据条件查询数据
分组
采用having过滤,取得正确的数据
一个完整的select语句格式如下
select 字段 from 表名 where ……. group by ………having …….(就是为了过滤分组后的数据而存在的—不可以单独的出现) order by ……… 重点

以上语句的执行顺序
1.首先执行where语句过滤原始数据
2.执行group by进行分组
3.执行having对分组数据进行操作
4.执行select选出数据
5.执行order by排序
多表连接
连接查询:也可以叫跨表查询,需要关联多个表进行查询
多表连接的几种方式:

  1. join on 可以做到表的连接和查询条件分离,特别是多个表进行连接的时候
    示例:显示 工资 大于2000的 用户 信息,并显示所属的 阶级 名称
    select hz.hname, hz.usersal, j.jname from hzuser hz join jieji j on hz.jiejinum=j.jiejinum where hz.usersal>2000;
  2. 右连接:right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录;
    select hz.hname, hz.usersal, j.jname from hzuser hz right join jieji j on hz.jiejinum=j.jiejinum;
  3. 左连接:left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 ; 用在 商城网站
  4. inner join(等值连接) 只返回两个表中联结字段相等的行;
    from中的子链接
    在from语句中使用子查询,可以将该子查询看做一张表
    查询 用户 信息,查询哪些人是 领导,要求显示出其会员编号和会员姓名
    首先取得领导的编号,去除重复的
    select distinct name, manager from hzuser where manager is not null;
    方法一:
    select hz.hzusernum, hz.name from hzuser hz, (select distinct name, manager from hzuser where manager is not null) m where hz.hzusernum=m.manager;
    方法二:
    select hz.hzusernum, hz.name from hzuser hz join (select distinct name, manager from hzuser where manager is not null) m on hz.hzusernum=m.manager;
    union可以合并集合(相加)
    1、查询job包含 ‘格格’ 和包含 '备胎’的员工
    select * from hzuser where job in(‘格格’, ‘备胎’);
    2、采用union来合并
    select * from hzuser where job=‘格格’
    union
    select * from hzuser where job=‘备胎’
    limit的使用
    MySql提供了limit ,主要用于提取前几条或者中间某几行数据
    select * from table limit m,n
    其中m是指记录开始的index,从0开始,表示第一条记录
    n是指从第m+1条开始,取n条。
    select * from tablename limit 2,4
    即取出第3条至第6条,4条记录
    m 从第几条开始-- 从0开始
    n 条数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值