欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库关联查询

程序员文章站 2022-05-08 11:24:15
...

一、数据库关联查询
  ㈠数据库条件查询

消除重复行(对原数据不影响,只对数据集起作用)
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字段进行外键关联
);