MySQL数据库(多表查询,存储过程,变量)级联删除
级联更新
多对多关系,引⼊中间表,添加外键约束
内连接
外连接
⼦查询
复制表
存储过程postgresql和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(user_id) REFERENCES users(id) ON UPDATE CASCADE;
-- 也可以同时加上
ALTER TABLE cong ADD FOREIGN KEY(zzid) REFERENCES zhu(zid) ON DELETE CASCADE ON UPDATE CASCADE;
power bi desktop-- 级联更新
CREATE TABLE zhu(
zid INT PRIMARY KEY AUTO_INCREMENT, -- 主键
zname VARCHAR(20)
);
mysql查看所有存储过程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 user(
id int primary key auto_increment,
username varchar(20)
);
-- 创建订单表
create table orders(
id int primary key auto_increment,
totalprice double,
user_id int
);
alter table orders add foreign key(user_id) references user(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.多表查询
内连接
外连接
⼦查询
笛卡尔积:
多张表⽆条件的联合查询.没有任何意思
select a.*,b.* from a,b;
5.内连接
下载jquery插件后怎么使用
-- 内连接:特点,不符合条件的数据,不会展⽰出来,⽐如下⾯的例⼦,赵六,就没有展⽰出来,因为赵六没有下过订单,所以赵六不展⽰。
-- 内连接有两种写法:
-- 1. 显⽰内连接
-- 格式1:显式的内连接
-- select a.*,b.* from a [inner] join b on ab的连接条件 inner 可以省略不写
SELECT user.*,orders.* FROM USER INNER JOIN orders ON user.`id`=orders.`user_id`
-- 2. 隐式内连接
-- 格式2:隐式的内连接
-- SELECT a.*,b.* FROM a,b WHERE a b的连接条件
-- 例⼦:
SELECT user.*,orders.* FROM USER,orders WHERE user.`id`=orders.`user_id`;
-- 查询所有⽤户的订单信息。
-- N张表查询,⾄少要有N-1个关联条件⽐如:两张表关联查询,⾄少要有⼀个关联条件。
SELECT user.*,orders.* FROM USER,orders WHERE user.`id`=orders.`user_id`;
-- 查出个别字段
SELECT user.id,user.`username`,orders.price FROM USER,orders WHERE user.`id`=orders.`user_id`;
-- 你可以可以给字段起别名
SELECT user.id,user.`username` AS ⽤户名,orders.price FROM USER,orders WHERE user.`id`=orders.`user_id`;
-- 有时表名⽐较长,你可以给表起别名
SELECT u.id,u.`username` AS ⽤户名,o.price FROM USER AS u,orders AS o WHERE u.`id`=o.`user_id`;
-
- -- 查询所有⽤户的订单信息,并且订单总价⼤于 300的
SELECT user.*,orders.* FROM USER,orders WHERE user.`id`=orders.`user_id` AND orders.`price`>300;
SELECT user.*,orders.* FROM USER INNER JOIN orders ON user.`id`=orders.`user_id` AND orders.`price`>1000;
6.外连接
ppt网站外连接:★
左外连接:★
select a.*,b.* from a left [outer] join b on 连接条件; outer 可以不写
意思:先展⽰join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展⽰出来,不符合以null值展⽰.
右外连接:
select a.*,b.* from b right [outer] join a on 连接条件; outer 可以不写
意思:先展⽰jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展⽰出来,不符合以null值展⽰.
-- 外连接:左外连接,右外连接
-- 查询所有⽤户的订单信息,要求所有⽤户信息展⽰出来,该⽤户如果没有订单信息,以null展⽰那这⾥就可以使⽤外连接来做。
-- 以 left 单词分左右两边,左边的表中的信息,会全部展⽰出来,在右边表中没有对应的以null展⽰。
SELECT user.*,orders.* FROM USER LEFT OUTER JOIN orders ON user.`id`=orders.`user_id`;
-- 查询所有订单所对应的⽤户信息,订单信息要全部展⽰出来,该订单没有对应的⽤户,以null展⽰
-- 以 RIGHT 这个单词分左右,右边的表中的数据会全部展⽰出来,在左边表中没有对应的数据,以null展⽰
SELECT orders.*,user.* FROM USER RIGHT OUTER JOIN orders ON user.`id`=orders.`user_id`;
-
- 左外连接,右外连接可以互换
-- 查询所有订单所对应的⽤户信息,订单信息要全部展⽰出来,该订单没有对应的⽤户,以null展⽰
-- 使⽤左外连接做
SELECT orders.*,user.* FROM orders LEFT OUTER JOIN USER ON user.`id`=orders.`user_id`;
-- 查询所有⽤户的订单信息,要求所有⽤户信息展⽰出来,该⽤户如果没有订单信息,以null展⽰那这⾥就可以使⽤外连接来做。
SELECT user.*,orders.* FROM orders RIGHT OUTER JOIN USER ON user.`id`=orders.`user_id`;
-- 表可以起别名,字段可以起别名 OUTER 可以省略不写
SELECT u.id,u.`username` AS ⽤户名,o.* FROM orders AS o RIGHT OUTER JOIN USER AS u ON u.`id`=o.`user_id` AND u.`username`='张三'; SELECT u.id,u.`username` AS ⽤户名,o.* FROM orders AS o RIGHT OUTER JOIN USER AS u ON u.`id`=o.`user_id` WHERE u.`username`='张三';
7.⼦查询
⼀个查询依赖另⼀个查询.
⼀个主查询的条件的值,来⾃于另外⼀条⼦查询的结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论