MySQL 查询
Posted 小小菜_v
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 查询相关的知识,希望对你有一定的参考价值。
mysql 查询(三)
连接查询
语法
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
内连接查询:
查询的结果为两个表匹配到的数据
例1:使用内连接查询软件表与类型表
select * from softwares inner join types on softwares.type_id = types.id;
例4:查询软件姓名及类型名称
select s.name,t.name from softwares as s inner join types as t on s.type_id =t.id;
右连接查询:
查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
例3:使用右连接查询软件表与类型表
select * from softwares as s right join types as t on s.type_id = t.id;
左连接查询:
查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
例2:使用左连接查询班级表与学生表
此处使用了as为表起别名,目的是编写简单
select * from softwares as s left join types as t on s.type_id = t.id;
自关联
表自己与自己进行连接
创建areas表的语句如下:
create table areas(
aid int primary key,
atitle varchar(20),
pid int
);
例:查询省的名称为“山西省”的所有城市
select city.* from areas as city
inner join areas as province on city.pid=province.aid
where province.atitle='山西省';
子查询
子查询分类
标量子查询: 子查询返回的结果是一个数据(一行一列)
列子查询: 返回的结果是一列(一列多行)
行子查询: 返回的结果是一行(一行多列)
标量子查询
查询大于平均id的软件
select * from softwares where id > (select avg(id) from softwares);
列级子查询
找出软件表中所有的类型名
select name from types where id in (select type_id from softwares);
行级子查询
需求: 查找软件表id最大,type_id最大的软件
行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from softwares where (id,type_id) = (select max(id),max(type_id) from softwares);
子查询中特定关键字使用
in 范围
格式: 主查询 where 条件 in (列子查询)
总结
SELECT select_expr [,select_expr,...] [
FROM tb_name
[WHERE 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]
完整的select语句
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
执行顺序为:
from 表名
where ....
group by ...
select distinct *
having ...
order by ...
limit start,count
以上是关于MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章