欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql高级查询语句

程序员文章站 2024-03-21 18:07:04
...

mysql高级查询

1.分组查询
分组查询是指使用group by字句对查询信息进行分组。
格式:

SELECT 字段1,字段2FROM 表名 GROUP BY分组字段 HAVING 分组条件;

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
having与where的区别:
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用聚合函数(统计函数)
where后面不可以使聚合函数。
mysql高级查询语句
2.多表操作
实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。

3.外键约束
键特点:
从表外键的值是对主表主键的引用。
从表外键类型,必须与主表主键类型一致。

声明外键约束

语法:
alter table 从表 add [constraint 外键名称] foreign key 从表名(从表外键字段名) references 主表
名(主表的主键);
[外键名称]用于删除外键约束的,一般建议“_fk”结尾
alter table 从表 drop foreign key 外键名称

使用外键目的:
保证数据完整性

4.一对多和多对多关系
mysql高级查询语句
mysql高级查询语句
5.多表查询
交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]
语法: select * from A,B;
mysql高级查询语句
内连接查询(使用的关键字 inner join – inner可以省略)
隐式内连接: select * from A,B where 条件;
显示内连接: select * from A inner join B on 条件;

外连接查询(使用的关键字 outer join – outer可以省略)
左外连接:left outer join
select * from A left outer join B on 条件;
右外连接:right outer join
select * from A right outer join B on 条件;

注意:左外连接,左表中的记录都会显示,不管有没有对应的右表内容。

隐式内连接:会保证左右两边的记录对象的id相同才会显示。

6.子查询
一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。 语法: select …查询字段 … from … 表… where … 查询条件

#3 子查询, 查询“化妆品”分类上架商品详情
#隐式内连接
SELECT p.*
FROM products p , category c
WHERE p.cid=c.cid AND c.cname = '化妆品';
#子查询
##作为查询条件
SELECT *
FROM products p
WHERE p.cid =
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品'
);
##作为另一张表
SELECT *
FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c
WHERE p.cid = c.cid;