数据库关联查询
一、数据库关联查询:
㈠数据库条件查询
消除重复行(对原数据不影响,只对数据集起作用)
SELECT DISTINCT 字段 FROM TBname;
·
条件查询:
查询表内容
SELECT * FROM TBname WHERE 字段;
比较运算符
>、<、=、>=、<=、<>不等于(推荐)、!=不等于(不推荐)
逻辑运算
and
or
not
模糊查询
SELECT * FROM TBname WHERE 字段 LIKE “%字段%”;
%匹配0到多个字符
_占位,一个下划线代表一个字符的占位
多结果查询:
多查询:17岁和20岁的,千万别理解为17到20岁的
查询为空
不为空
排序
SELECT * FROM TBname ORDER BY 字段;
多条件排序,第一个条件为主排序条件
排倒序
筛选和排序连用(先筛选再排序,节省内存)
子查询
子查询是一种嵌套查询,将一个查询用小括号包裹起来,然后作为下一个查询的结果,子查询必须有别名。
·
聚合查询:
一种查询(SQL 语句),它通过包含一个聚合函数(如 Sum 或 Avg )来汇总来自多个行的信息。
更多详情已编辑文章:聚合查询
·
⑴才查询相关数据条数
相同数据不影响条数的统计(总共多少条就是多少条)
如果数据为空(空不占位,总行数-1)
select count(*) from TBname;
select count(name) as num from TBname;
select count(id) as idnum,count(name) as namenum from TBname;
⑵、求最大值、最小值、求合
max()
min()
sum()
avg()
㈡数据库关系搭建
数据库关系:针对多表之间的练习。
一对一:
两个表的每条数据之间,存在唯一映射关系。
举个例子:
用户登录表 用户
手机号 姓名
验证码 身份证号
头像
邮箱
手机号
·
一对多:
将两个表分为一个一表,一个多表,一表当中数据可以对应多表中的多条数据;多表中的多条数据只能对应一表中的一条数据。
举个例子:
父亲(一表) 儿子(多表)
张三 张1
张2
id p_id
id p_id
这两张表通过 parent 的 id 和 child 的 p_id 来关联。
查询老张的所有儿子:
select * from child where p_id = (select id from parent where name=‘老张’);
查询李3的父亲:
select * from parent where id = (select p_id from child where name=‘李三’);
多对多:
一个表当中数据可以对应另一个表当中的多条数据,反之亦然。
专业 课程
关系
python的所有课程
父子id关系
在商品类型当中会涉及到子类型
举个例子:
服装
男装
中山装
高级中山装
这里我们需要用到parent_id
主外键:
主键(primary key):全称叫做“主键约束”,可以是一列或者多列组合,其值可以唯一标识这条数据。
所以主键唯一性,不可以为空。
主键有int类型(往往是逐个递增)
有char、 varchar类型(趋势递增:只要保证后一个数比前一个数大就行,中间可以有间隔)雪花算法生成趋势递增字符串
创建主键
创建表的时候创建主键
(主键如果不设置自增长且不输入特定数字,默认为0,会报错)
CREATE TABLE food(id INT PRIMARY KEY,name CHAR(32));
创建主键,并且自增长
CREATE TABLE food(id INT PRIMARY KEY AUTO_INCREMENT,name CHAR(32));
添加主键
在已经存在的表当中添加主键
alter:设置
table:表
TBname:表名
add:添加
primary key:主键
字段
注意:增加主键,是给已有的表增加,不是多出主键项
·
先设置主键,再设置自增长
·
ALTER TABLE food ADD PRIMARY KEY (id);
先设置主键,再设置自增长
·
alter table TBname modify id int primary key;
添加实际上是将一个已经存在的字段修改为主键
删除主键
ALTER TABLE food DROP PRIMARY KEY ;
删除主键只是删除了主键类型,并没有删除字段
删除主键,NULL不会改变
当删除自增主键时,不能直接删除主键,要先干掉自增长,再删除主键。
alter table TBname modify id int;
先设置类型(从自增长改为int)
alter table TBname drop primary key;
·
直接添加主键自增长
ALTER TABLE food ADD PRIMARY KEY AUTO_INCREMENT (id); 由于版本 问题,当前命令不会报错,但是无法将主键设置自增长。导致添加的 数据主键为0
正确语法:ALTER TABLE food MODIFY id INT AUTO_INCREMENT PRIMARY KEY;
alter table TBname modify id int auto_increment primary key;
外键:
外键(foreign key):全程叫作“外键约束”,主要用来约束一对多关系,保证数据的准确性和完整性。
一对多关系中,多表用外键来关联一表中的主键字段。
create table parent(id int primary key auto_increment,name char(32));
create table child(id int auto_increment primary key,name char(32),p_id int,foreign key(p_id) references parent(id));
1、一表必须先创建出来,最好有主键。
2、创建多表,必须先有外键字段,再设置外键。
3、外键字段的数据必须是一表对应字段的数据。
如果已有表,再添加外键
alter table 多表 add foreign key (关联字段) references 一表 (字段);
查看主外键
show create table 表名\G;
注意:
外键约束只对InnoDB存储引擎有效。
外键约束可以由 CREATE TABLE 或者 ALTER TABLE 语句来创建。
简单外键约束定义 foreign key (field1) references other_table(fieldA).
复合外键约束定义 foreign key (field1,field2) references other_table(fieldA,fieldB).
ps:复合外键约束 只能关联一张表,如下是错误的:
foreign key (field1,field2) references other_table1(fieldA),other_table2(fieldB).
多对多关系
专业 课程
关系:
创建多对多关系:
创建专业表
create table major(id int primary key auto_increment,name char(32));
创建课程表
create table course(id int primary key auto_increment,name char(32));
创建关系表
create table major_course(
id int primary key auto_increment, 设置主键
major_id int, 设置和专业关联的字段
course_id int, 设置和课程关联的字段
foreign key(major_id) references major(id), 使用major_id和major表的 id字段进行外键关联
foreign key(course_id) references course(id)使用course_id和course表 的id字段进行外键关联
);
上一篇: Redis-5.x
下一篇: 《MySQL数据库》关联查询