MySQL的基础命令二

查询限定

select *from rzdata;

这里指定了一个完全限定的列名,同样,我们也可以完全限定表名

select * from ruozedata.rzdata;

前提是user表在ruozedata数据库中存在
总结:列名前用表名限定,表名前用数据库名来限定

按条件查询 where语句

根据范围查询
< 、>、<=、>=、!=
小于、大于、小于等于、大于等于、不等于
例如

select * from ruozedata.rzdata where age<20;

若要大于某些数值的最大值,用all;大于最小值,用any

where e.sal+ifnull(comm,0) > all(select sal+ifnull(comm,0) from emp;
where e.sal+ifnull(comm,0) > any(select sal+ifnull(comm,0) from emp

根据名称查询
! 表示 非

select * from ruozedata.rzdata where name='djh';

按范围查询

where (e.sal+ifnull(e.comm,0)) between s.losal and s.hisal

多重条件同时筛选查询
and 表示 且;or 表示 或

select * from ruozedata.rzdata where age<20 and name='djh';

多重条件依次筛选查询

select * from emp order by sal desc,hiredate asc;

用逗号隔开,表示先后顺序
select * from emp order by sal desc,hiredate asc;
根据关键字模糊查询
% 表示模糊查询; _ 表示一个字符;

select * from ruozedata.rzdata where name like '%o%';
select * from ruozedata.rzdata where name like 'o%';
select * from ruozedata.rzdata where name like '%o';
select * from ruozedata.rzdata where name like '__o%';
select * from ruozedata.rzdata where name not like '__o%';

查询多项内容

 select * from emp where (deptno=10 and job='manager') or (deptno=20 and job='salesman');

每个括号代表一项内容的条件,内容之间用or

合并查询 union join

create table a(id int,aname varchar(200),age int);
create table b(id int,bname varchar(200),address varchar(200));
insert into a values(1,'jy',45);
insert into a values(2,'ju',30);
insert into a values(3,'ji',65);

insert into b values(1,'jy','bj');
insert into b values(2,'ju','sh');
insert into b values(5,'jk','ty');

建立a表,项目为:id、名称、年龄
建立b表,项目为:id、名称、地址
查询ab表所有的用户 union

(重复)  select id,aname from a union select all id,bname from b;
(不重复)select id,aname from a union select d,bname from b;

查询ab表重复的用户join
例:左连接,以左边的表为主体,右边的表只显示与左表重复的项目,不重复的用null表示

左连接select a.*,b.* from a left join b on a.id=b.id;
右连接select a.*,b.* from a right join b on a.id=b.id;
内连接select a.*,b.* from a inner join b on a.id=b.id;

若要排除null,可以在左连接中加入

where bname is not null

排除右表中为null的数据,结果与内连接相同
与之相反,想要查看为null的数据,加上

where bname is null

如果查询某些数据需要用到多个表格,则使用join函数

聚合函数

求数值之和 sum( )

select sun(age) from rzdata;

求数值的平均数

select avg(age) from rzdata;

注意:null+任意数值=null
如果有null,则用ifnull(xxx,0)来解决

select * from emp where (sal+ifnull(comm,0))>1500;

求行数之和 count( )
0 也可以表示第一列的项目名称

select count(id) from rzdata;

count ( distinct ) 去重
当项目id有重复时,要查寻项目个数

select count(distinct id) from rzdata;

求各个名称(group by)的年龄和

select name,sum(age) from rzdata group by name;

group by的用法:group by name 将数据按照name字段分组,然后再进行操作
当group by 与聚合函数配合使用时,功能为分组后计算
当group by 与having配合使用时,功能为分组后过滤
当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容。
select xxx,yyy,sum(age) from rzdata group by xxx,yyy
group by后边要加什么,在select后也要加上什么
子查询
先进行括号内的

select name,sum(age) from rzdata where age>20 group by name;

select t.name,sum(t.age) from 
(
select*from rzdata where age>20
) as t
group by t.name;

对结果再进行筛选
求各个名称的年龄和 大于25的项目

select name,sum(age) from rzdata group by name having sum(age)>25;

select *from
(
select name,sum(age) as sumage from rzdata group by name
)as t
where t.sumage>25;

排序

从大到小排列 desc 倒序

select * from a order by age desc;

从小到大排列 asc 顺序 默认为顺序

select * from a order by age asc;

排序后只查两条数据

select * from a order by age desc limit 2;

语法顺序

  select * from rzdata
    (查看rzdata中的内容)
  where age>20
    (筛选年龄大于20的)
  group by name having xxx
    (将姓名分类,从来进行以上筛选,如果对筛选结果还有后续操作,用having语法)
  order by age
    (按照年龄大小从小到大排序)
  limit xxx;
    (限制查询行数)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值