外键的作用?
保证数据的完整性,保证数据的安全操作.
-- 设置外键 : 建立真正的 多对一的关系;
-- 给从表设置外键,关联主表的主键#格式: alter table 从表 add constraint `外键名称_fk` foreign key 从表(外键) references 主表(主键);
ALTER TABLE emp ADD CONSTRAINT `emp_dept_fk` FOREIGN KEY emp(did) REFERENCES dept(did);1.笛卡尔积(查询两张表中的所有数据)
#需求1:查询分类表和商品表的所有信息.
SELECT * FROM category , products;#使用条件过滤脏数据 (使用从表的外键 = 主表的主键)
SELECT * FROM category , products WHERE cid = category_id; 2.内连接查询
显式内连接 / 隐式内连接
结论:内连接执行多表查询的效果: 取两个表的交集内容,条件是两个表都符合的结果会被查出来.
显式内连接:
格式: select 字段 from 表A inner join 表B on 条件;
隐式内连接:
格式: select 字段 from 表A , 表B where 条件#需求: 使用显式内连接查询 分类表和商品表的所有信息.
SELECT * FROM category INNER JOIN products ON cid=category_id;#需求2: 建议起别名
SELECT * FROM category c INNER JOIN products p ON c.cid=p.category_id; #需求3:使用隐式内连接查询两个表的数据
# 格式: select 字段 from 表A , 表B where 条件
SELECT * FROM category c , products p WHERE c.cid = p.category_id;3.外连接
左外连接 / 右外连接
结论:
左外连接: 以左表为基准,会查出来左表所有的数据,以及关联的和右表的交集部分的数据.
右外连接: 以右表为基准,会查出来右表的所有数据,以及关联的和左表的交集部分的数据.
左外连接的格式:
select 字段 from 表1 left join 表2 on 条件.
右外连接的格式:
select 字段 from 表1 right join 表2 on 条件.
#需求1:使用左外连接查询商品和分类信息 (商品表示左表)
SELECT * FROM products p LEFT JOIN category c ON p.category_id = c.cid; #为了让效果明显: 删除 product商品表中的香奈儿的 category_id null 和 内连接做对比.
/*
右外连接的格式:
select 字段 from 表1 right join 表2 on 条件.
*/
#需求2:使用右外连接查询商品和分类信息
# 这时以右边的category表为基准(它的数据都必须存在) 关联 product表进行查询
SELECT * FROM products p RIGHT JOIN category c ON p.category_id = c.cid;
#需求3:把右外连接的结果,使用左外连接实现
SELECT * FROM category c LEFT JOIN products p ON p.category_id = c.cid; 4.子查询:
查询语句中嵌套查询语句. 子查询
子查询:如果查到的结果是一个一行一列的,可以让该查询结果作为一个条件
子查询: 如果查询到的结果是一个多行1列的,可以让他作为一张表来使用. 作为条件.
子查询: 如果查询的结果是一个多行多列的,可以让该结果作为一张表. 对该表进行查询
子查询:不推荐使用; 因为查询效率太低.# 需求: 1 子查询, 查询“化妆品”分类上架商品详情
#1.如果不用子查询
SELECT * FROM products p , category c WHERE p.category_id=c.cid AND c.cname='化妆品' AND flag=1;#2.将上面的语句修改为子查询
# 如果查询的结果是一个一行一列的,让该结果作为一个条件.#查询分类id , 分类名称为化妆品
SELECT cid FROM category WHERE cname='化妆品';#使用子查询修改sql
SELECT * FROM products p , category c
WHERE p.category_id=c.cid
AND c.cid = (SELECT cid FROM category WHERE cname='化妆品')
AND flag = 1; #让查询的结果作为一张表
#查询“化妆品”和“家电”两个分类上架商品详情
SELECT * FROM products p,category c
WHERE p.category_id = c.cid
AND (c.cname='化妆品' OR c.cname='家电');#使用子查询来修改代码
#1.先查询分类表,查询分类为化妆品或家电cid的结果集
SELECT cid FROM category WHERE cname = '化妆品' OR cname='家电';#2.上面两个表查询的结构在,cid = c001 ,c003里面选
SELECT * FROM products p ,category c
WHERE p.category_id = c.cid
AND flag = 1
AND c.cid IN (SELECT cid FROM category WHERE cname = '化妆品' OR cname='家电')#3.如果查询的结果是一个多行多列的.
SELECT * FROM category WHERE cname = '化妆品' OR cname='家电';#查询的时候 products category
SELECT * FROM products p , (SELECT * FROM category WHERE cname = '化妆品' OR cname='家电') c
WHERE p.category_id = c.cid AND flag=1;
mysql建立外键关联 mysql外键关联查询
转载文章标签 mysql建立外键关联 java基础 java数据库开发 mysql数据库开发 mysql表查询 文章分类 MySQL 数据库
-
SQL Server 执行计划3--关联查询
SQL Server执行计划,多表关联查询
Nested Loops Merge Join Hash Match -
java工具类 判断服务是否正常存活
小白自己的心路历程1.服务器java项目运行环境2.mysql数据库连接3.https配置我的服务器已经注册了域名。首先在完成服务器购买和服务器指定端口开放后,进行一系列端口配置。小白建议使用oneinstack等一键配置的工具。打开以下网址选择自己所需要的程序服务https://oneinstack.com/auto/再复制所得的结果,再打开远程连接服务器,粘贴即可使用。安装完成后,oneins
java工具类 判断服务是否正常存活 服务器配置 服务器nginx证书配置 oneinstack配置使用 nginx