mysql高阶语句

目录

1.按关键字进行排序

2.区间判断查询 and/or(和/或 )

3、对结果进行分组

4、限制结果条目

5、设置别名 as

6、通配符

7、子查询

连接查询

内连接

左连接

右连接


对于MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等。

1.按关键字进行排序

使用ORDER BY语句来实现排序,排序可针对一个或多个字段。

ASC:升序,默认排序方式。

DESC:降序。

order by 语句用来实现排序的,ASC是按照升序排序,是默认的排序方式。

DESC 是按降序进行排列 ,当然order by前面可以使用 where字句查询结果进一步过滤。

语法:

按分数排序,默认不指定是升序排列
select id,name,score from class order by score;

降序
select id,name,score from class order by score desc;

还可以结合where进行条件过滤,查询学生信息先按兴趣id降序排列,相同分数的,id也按降序排列
select id,name,hobbid from class order by hobbid desc,id desc;

注:order by之后的第一个参数只有在出现相同值时,第二个字段才有意义,否则第二个字段无效。

2.区间判断查询 and/or(和/或 )

查询分数大于60并且小于等于90的数据
select * from class where score >60 and score <=90;

查询分数大于70或小于等于90的数据
select * from class where score >70 or score <=90;

查询不重复的爱好
select distinct hobbid from class;

3、对结果进行分组

查询sql结果 对结果 进行分组GROUP BY来实现 group by通常都是结合聚合函数一起使用。

按hobbid相同的分组,计算相同分数的学生个数
select count(name),hobbid from class group by hobbid

显示数据总数量
select count(*) number from class;

4、限制结果条目

查询所有信息显示前4行记录
select * from class limit 3;

按id的大小倒序排列显示第4行往后显示3行内容
select * from class order by id desc limit 3,3;

5、设置别名 as

mysql查询的时候,表和字段做一个别名,原因主要是表和列的字段比较长。

as还可以在创建表的时候插入其他表的数据,也可以克隆表,但没有主键及约束。

列别名设置
select name as 姓名,score as 成绩 from class;    

创建t1表,将class表的查询记录全部插入t1表
create table www as select name,score from class;

 

6、通配符

%:表示零或多个字符。

查询名字是l开头的记录
select id,name from class where name like 'l%';

查询名字中间有i的记录
select id,name from class where name like '%i%';

7、子查询

子查询就是内查询或者嵌套查询,是指在一个查询语句里面还嵌套另一个查询的语句。

语法:

in 将主表和子表进行关联/连接,用来判断某个值是否在给定结果集中。

in 通常结合子查询来进行使用

not in 取反

exists 判断 如果是否为空 ,如果不为空,则返回 true,否则反之 false。

以www表中的名字查询class表
select id,name,score from class where name in (select name from www);

id大于4的分数变为87
update class set score=87 where id in (select id from eee where id>4);

连接查询

MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接。

内连接

两张或多张表中同时符合某种条件的数据记录的组合。

select * from test1 inner join test2 on a_name=b_name;

内连查询:通过inner join 的方式将两张表指定的相同字段的记录行输出出来。

左连接

左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。

select * from test1 left join test2 on a_name=b_name;

左连接中左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为 NULL。

右连接

右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配。

select * from test1 right join test2 on a_name=b_name;

在右连接的查询结果集中,除了符合匹配规则的行外,还包括右表中有但是左表中不匹配的行,这些记录在左表中以 NULL 补足。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值