一、多表查询的分类
### --- 内连接查询
~~~ 内连接的特点:
~~~ 通过指定的条件去匹配两张表中的数据, 匹配上就显示,匹配不上就不显示
~~~ 比如通过: 从表的外键 = 主表的主键 方式去匹配
### --- 隐式内连接
~~~ from子句 后面直接写 多个表名 使用where指定连接条件的 这种连接方式是 隐式内连接.
~~~ 使用where条件过滤无用的数据
~~~ 语法格式
SELECT 字段名 FROM 左表, 右表 WHERE 连接条件;
### --- 查询所有商品信息和对应的分类信息
~~~ # 隐式内连接
SELECT * FROM products,category WHERE category_id = cid;
### --- 查询商品表的商品名称 和 价格,以及商品的分类信息
### --- 可以通过给表起别名的方式, 方便我们的查询(有提示)
SELECT
p.`pname`,
p.`price`,
c.`cname`
FROM products p , category c WHERE p.`category_id` = c.`cid`;
~~~ # 查询 格力空调是属于哪一分类下的商品
SELECT p.`pname`,c.`cname` FROM products p , category c
WHERE p.`category_id` = c.`cid` AND p.`pid` = 'p002';
### --- 显示内连接
~~~ 使用 inner join ...on 这种方式, 就是显式内连接
~~~ 语法格式
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件
-- inner 可以省略
~~~ # 查询所有商品信息和对应的分类信息
~~~ # 显式内连接查询
SELECT * FROM products p INNER JOIN category c ON p.category_id = c.cid;
~~~ # 查询鞋服分类下,价格大于500的商品名称和价格
~~~ # 查询鞋服分类下,价格大于500的商品名称和价格
-- 我们需要确定的几件事
-- 1.查询几张表 products & category
-- 2.表的连接条件 从表.外键 = 主表的主键
-- 3.查询的条件 cname = '鞋服' and price > 500
-- 4.要查询的字段 pname price
SELECT
p.pname,
p.price
FROM products p INNER JOIN category c ON p.category_id = c.cid
WHERE p.price > 500 AND cname = '鞋服';
二、sql语句
### --- sql语句
-- 多表查询 交叉连接查询 的查询结果会产生 笛卡尔积 是不能够使用的.
SELECT * FROM products ,category;
/*
1.内连接查询
2.外连接查询
*/
/*
内连接查询
特点 通过指定的条件 去匹配俩张表中的内容, 匹配不上的就不显示
隐式内连接
语法格式: select 字段名... from 左表,右表 where 连接条件
显式内连接
语法格式: select 字段名... from 左表 [inner] join 右表 on 连接条件
inner 可以省略
*/
-- 1.查询所有商品信息和对应的分类信息
-- 隐式内连接
SELECT * FROM products , category WHERE category_id = cid;
-- 2.查询商品表的商品名称 和 价格,以及商品的分类信息
-- 多表查询中 可以使用给表起别名的方式 简化查询
SELECT
p.`pname`,
p.`price`,
c.`cname`
FROM products p,category c WHERE p.`category_id` = c.`cid`;
-- 查询 格力空调是属于哪一分类下的商品
SELECT
p.`pname`,
c.`cname`
FROM products p, category c WHERE p.`category_id` = c.`cid` AND p.`pid` = 'p002';
-- 1.查询所有商品信息和对应的分类信息
-- 显式内连接
SELECT
*
FROM products p
INNER JOIN category c ON p.`category_id` = c.`cid`;
-- 2.查询鞋服分类下,价格大于500的商品名称和价格
/*
查询之前要确定几件事情
1.查询几张表 products & category
2.表的连接条件 p.`category_id` = c.`cid`; 从表.外键 = 主表.主键
3.查询所用到的字段 商品名称 价格
4.查询的条件 分类 = 鞋服, 价格 > 500
*/
SELECT
p.`pname`,
p.`price`
FROM products p
INNER JOIN category c ON p.`category_id` = c.`cid`
WHERE p.`price` > 500 AND c.`cname` = '鞋服';