MySQL数据库(多表查询,存储过程,变量)

更新时间:2023-06-19 07:55:58 阅读: 评论:0

MySQL数据库(多表查询,存储过程,变量)级联删除
级联更新
多对多关系,引⼊中间表,添加外键约束
内连接
外连接
⼦查询
复制表汪蕊
存储过程
变量的介绍
1.级联删除
吉他维修删除⽤户时,把你关联的数据⼀并删掉。
短跑比赛CREATE TABLE zhu(
zid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键
zname VARCHAR(20)
);
CREATE TABLE cong(
zid INT PRIMARY KEY AUTO_INCREMENT,
zscore INT,
zzid INT -- 外键
-- ⽅式2:建表的时候就加上了外键约束
--  FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE
);
-
-  删除⽤户时,把你关联的数据⼀并删掉。
-- ON DELETE CASCADE 级联删除
ALTER TABLE cong ADD FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE;
2.级联更新
-- ON UPDATE CASCADE 级联更新
-- ON DELETE CASCADE 级联删除
ALTER TABLE cong ADD FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE;
-- ON UPDATE CASCADE 级联更新
ALTER TABLE orders ADD FOREIGN KEY(ur_id) REFERENCES urs(id) ON UPDATE CASCADE;
放马滩-- 也可以同时加上
ALTER TABLE cong ADD FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE ON UPDATE CASCADE;
-- 级联更新
CREATE TABLE zhu(
zid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键
zname VARCHAR(20)
);
CREATE TABLE cong(
zid INT PRIMARY KEY AUTO_INCREMENT,
zscore INT,
zzid INT, -- 外键
-- ⽅式2:建表的时候就加上了外键约束
FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE ON UPDATE CASCADE
);
-- 级联删除时,要注意下
3.多对多关系(引⼊中间表,添加外键约束)
引⼊⼀张中间表,存放两张表的主键,⼀般会将这两个字段设置为联合主键,这样就可以将多对多的关系拆分成两个⼀对多了为了保证数据的有效性和完整性
需要在中间表上添加两个外键约束即可.
研究性学习-- 创建⽤户表
create  table ur(
id int primary key auto_increment,
urname varchar(20)
);
-- 创建订单表
create  table orders(
id int primary key auto_increment,
totalprice double,
ur_id int
);
alter table orders add foreign key(ur_id) references ur(id);
-- 创建商品表
create table product(
id int primary key auto_increment,
name varchar(20),
price double
);
-- 创建中间表
create table orderitem(
oid int,
pid int
)
;
-- 添加外键约束
alter table orderitem add foreign key(oid) references orders(id); alter table orderitem add foreign key(pid) references product(id);
4.多表查询
内连接
外连接
⼦查询
笛卡尔积:
多张表⽆条件的联合查询.没有任何意思
lect a.*,b.* from a,b;
5.内连接
-- 内连接:特点,不符合条件的数据,不会展⽰出来,⽐如下⾯的例⼦,赵六,就没有展⽰出来,因为赵六没有下过订单,所以赵六不展⽰。
-- 内连接有两种写法:
-- 1. 显⽰内连接
必背古诗-- 格式1:显式的内连接
-- lect a.*,b.* from a [inner] join b on ab的连接条件  inner 可以省略不写
SELECT ur.*,orders.* FROM USER INNER JOIN orders ON ur.`id`=orders.`ur_id`
-- 2. 隐式内连接
-- 格式2:隐式的内连接
-- SELECT a.*,b.* FROM a,b WHERE a b的连接条件
-- 例⼦:金银花露水
SELECT ur.*,orders.* FROM USER,orders WHERE ur.`id`=orders.`ur_id`;
-- 查询所有⽤户的订单信息。
-- N张表查询,⾄少要有N-1个关联条件⽐如:两张表关联查询,⾄少要有⼀个关联条件。
SELECT ur.*,orders.* FROM USER,orders WHERE ur.`id`=orders.`ur_id`;
-- 查出个别字段
SELECT ur.id,ur.`urname`,orders.price FROM USER,orders WHERE ur.`id`=orders.`ur_id`;
-- 你可以可以给字段起别名
SELECT ur.id,ur.`urname` AS ⽤户名,orders.price FROM USER,orders WHERE ur.`id`=orders.`ur_id`;
-- 有时表名⽐较长,你可以给表起别名
SELECT u.id,u.`urname` AS ⽤户名,o.price FROM USER AS u,orders AS o WHERE u.`id`=o.`ur_id`;
海贼图片-
- -- 查询所有⽤户的订单信息,并且订单总价⼤于 300的
SELECT ur.*,orders.* FROM USER,orders WHERE ur.`id`=orders.`ur_id` AND orders.`price`>300;
SELECT ur.*,orders.* FROM USER INNER JOIN orders ON ur.`id`=orders.`ur_id` AND orders.`price`>1000;
6.外连接
外连接:★
左外连接:★
lect a.*,b.* from a left [outer] join b on 连接条件;  outer 可以不写
意思:先展⽰join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展⽰出来,不符合以null值展⽰.
右外连接:
lect a.*,b.* from b right [outer] join a on 连接条件;  outer 可以不写
意思:先展⽰jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展⽰出来,不符合以null值展⽰.
-- 外连接:左外连接,右外连接
-- 查询所有⽤户的订单信息,要求所有⽤户信息展⽰出来,该⽤户如果没有订单信息,以null展⽰那这⾥就可以使⽤外连接来做。
-- 以 left 单词分左右两边,左边的表中的信息,会全部展⽰出来,在右边表中没有对应的以null展⽰。
SELECT ur.*,orders.* FROM USER LEFT OUTER JOIN orders ON ur.`id`=orders.`ur_id`;
-- 查询所有订单所对应的⽤户信息,订单信息要全部展⽰出来,该订单没有对应的⽤户,以null展⽰
-- 以 RIGHT 这个单词分左右,右边的表中的数据会全部展⽰出来,在左边表中没有对应的数据,以null展⽰
SELECT orders.*,ur.* FROM USER RIGHT OUTER JOIN orders ON ur.`id`=orders.`ur_id`;
-
-  左外连接,右外连接可以互换
-- 查询所有订单所对应的⽤户信息,订单信息要全部展⽰出来,该订单没有对应的⽤户,以null展⽰
-- 使⽤左外连接做
SELECT orders.*,ur.* FROM orders LEFT OUTER JOIN USER ON ur.`id`=orders.`ur_id`;
-- 查询所有⽤户的订单信息,要求所有⽤户信息展⽰出来,该⽤户如果没有订单信息,以null展⽰那这⾥就可以使⽤外连接来做。
SELECT ur.*,orders.* FROM  orders  RIGHT OUTER JOIN USER ON ur.`id`=orders.`ur_id`;
-- 表可以起别名,字段可以起别名 OUTER 可以省略不写
SELECT u.id,u.`urname` AS ⽤户名,o.* FROM  orders AS o  RIGHT OUTER JOIN USER AS u ON u.`id`=o.`ur_id` AND u.`urname`='张三'; SELECT u.id,u.`urname` AS ⽤户名,o.* FROM  orders AS o  RIGHT OUTER JOIN USER AS u ON u.`id`=o.`ur_id` WHERE u.`urname`='张三';
7.⼦查询
⼀个查询依赖另⼀个查询.
⼀个主查询的条件的值,来⾃于另外⼀条⼦查询的结果。

本文发布于:2023-06-19 07:55:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/989483.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:订单   信息   查询   没有   出来   连接   删除
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图