• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySql学习day03:数据表之间的连接、查询详解

    主键:

    关键字:primary key

    特点:不能为null,并且唯一。

    主键分类:

    1. 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)
    2. 业务主键:例如username,参与实际的业务逻辑。

    主键使用方式:

    方式一:

        Create table t1(
    
           Id int primary key,
    
           Name varchar(100)
    
    );
    
    Insert into t1 values(1,'zs');
    
    Insert into t1 values(2,'ls');
    

    主键自动增长:

    关键字: auto_increment

       create table t4(
    
                         id int primary key auto_increment,
    
                         name varchar(100)
    
    );
    
    Insert into t4(name) values(‘zs');
    
    Insert into t4 values(null,'ls');
    

    域完整性:

    指数据库表的列(即字段)必须符合某种特定的数据类型或约束

    数据类型

    长度

    非空约束:NOT NULL

    唯一约束:UNIQUE

        CREATE TABLE t5(
    
                         username varchar(100) NOT NULL UNIQUE,
    
                         gender varchar(100) NOT NULL,
    
                         phonenum varchar(100) UNIQUE
    
           );
    

    数据表之间的连接:

    1.一对多(1*N):客户和订单,一个客户可以有多个订单,每个订单只属于一个客户

    创建客户表:

    CREATE TABLE customers(
    
      id int,
    
      name varchar(100),
    
      address varchar(255),
    
      PRIMARY KEY(id)
    
    );

    创建订单表:

    CREATE TABLE orders(
    
           order_num int primary key,
    
           price float(8,2),
    
           status int,
    
           customer_id int,
    
    CONSTRAINT customer_id_fk FOREIGN KEY(customer_id) REFERENCES customers(id)
    
    );
    

    插入数据:

    2.多对多:用第三张表的外键连接两张表的主键。

    老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教

    创建老师表:

       Create table teachers(
    
                  id int,
    
                  name varchar(100)
    
                  salary float(8,2),
    
                  primary key(id)
    
    );
    

    创建学生表:

     Create table students(
    
      id int,
    
      name varchar(100),
    
      grade varchar(100),
    
      primary key(id)
    
    ); 

    第三张表格:

    Create table teacher_student(
    
           t_id int,
    
           s_id int,
    
           primary key(t_id,s_id)
    
    CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),
    
    CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)
    
    );
    

    插入数据:

    3.一对一:一张表的外键连接第二张表的主键,实际开发中不需要这么做,直接设计一张表格就可以了。

    多表查询:

    交叉连接(笛卡尔积):第一个表格的所有行 乘以 第二个表格中的所有行,最终结果不正确,故一般不使用。

    内连接:

    因为交叉连接获得的结果集是错误的。因此内连接是在交叉连接的基础上

    只列出连接表中与连接条件相匹配的数据行,匹配不上的记录不会被列出。

    语法:

    隐式语法:

    select * from customers,orders where customers.id=orders.customer_id;

    显式语法:

     select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

    外连接:

    外连接是以一张表为基表,其他表信息进行拼接,如果有就拼接上,如果没有显示null; 外连接分为左外连接和右外连接。

    左外连接: 以关键字左边的表格为基表进行拼接

    语法: select * from customers c LEFT JOIN orders o ON c.id=o.customer_id;

    右外连接: 以关键字右边的表格为基表

    语法: select * from orders o RIGHT JOIN customers c ON c.id=o.customer_id;

    注意:表a左外连接表b与表b右外连接表a结果是一样的。

    子查询:

    某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就会用到子查询,为了给主查询(外部查询) 提供数据而首先执行的查询(内部查询)被叫做子查询; 子查询分为嵌套子查询和相关子查询。

    嵌套子查询:

    内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用(嵌套子查询中的子查询语句可以拿出来单独运行。)

    语法及练习: 查询出id为1的老师教过的所有学生。

    select * from students where id in(select s_id from teacher_student where t_id=1);

    相关子查询:

    内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。

    语法及练习:求每一科考试成绩大于平均分的学生的分数。

    select * from score as a where a.score>(select avg(b.score) from score as b where a.cou_id=b.cou_id);

    以上所述是小编给大家介绍的MySql数据表之间的连接、查询详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • mysql连接查询(左连接,右连接,内连接)
    • PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
    • 详解MySQL中的分组查询与连接查询语句
    • MySQL中基本的多表连接查询教程
    • php基础之连接mysql数据库和查询数据
    • PHP连接MySQL查询结果中文显示乱码解决方法
    • MySQL笔记之连接查询详解
    • MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍
    • MySQL查询优化:用子查询代替非主键连接查询实例介绍
    • MySQL查询优化:连接查询排序浅谈
    上一篇:详解MySQL(InnoDB)是如何处理死锁的
    下一篇:简单谈谈Mysql索引与redis跳表
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySql学习day03:数据表之间的连接、查询详解 MySql,学习,day03,数据表,之,