一条sql语句的执行流程,以及数据库中的表的连接方式,如何将两个表进行连接,内连接,外连接,

1. 一条Sql语句

  • 是什么

    SQL是一套标准,全称结构化查询语言

    SQL是用来完成和数据库之间的通信的编程语言

    SQL语言是脚本语言,直接运行在数据库上。

    SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同。

  • 被执行的过程

    1. 客户端把语句发给服务器端执行;
    2. 语句解析;
    3. 查询高速缓存
    4. 语句合法性检查
    5. 语义检查
    6. 获取对象解析锁
    7. 数据访问权限的核对
    8. 确定最佳执行计划
    9. 语句执行
    10. 结果返回

2. 关于数据库中两表的连接操作

一. 外连接

  1. 左连接 left join 或 left outer join

    select * from student left join score on student.Num=score.Stu_id;
    -- 左边的student表全部显示,右边score没有的为null
    

  2. 右连接 right join 或 right outer join

    select * from student right join score on student.Num=score.Stu_id;
    -- 与左连接相反
    
  3. 完全外连接 full join 或 full outer join

    select * from student full join score on student.Num=score.Stu_id;
    -- 是返回两个表中的所有的值,没有对应的数据则输出为空。
    

: 通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。而对于select * from student,score;则尽量不使用此语句,产生的结果过于繁琐。

二. 内连接

join 或 inner join

select * from student inner join score on student.Num=score.Stu_id;
select * from student,score where student.ID=course.ID;
-- 两条语句实现同样的功能
-- 内连接:返回两个表的交集

三. 交叉连接

cross join:没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

select * from student cross join score;
-- A x {B, C, D}
-- = {A, B}, {A, C}, {A, D}

四. 结构不同的表连接

  • 中间表

    当两表为多对多关系的时候,我们需要建立一个中间表student_score,中间表至少要有两表的主键

    select s.Name,C.Cname from student_score as sc left join student as s on s.Sno=sc.Sno left join score as c on c.Cno=sc.Cno
    select C_name,grade from student left join score on student.Num=score.Stu_id where name='李五一';

五. UNION操作符用于合并两个或多个select语句的结果集。

UNION内部的SELECT语句必须拥有相同数量的列,每个列也必须拥有相似的数据类型,每条SELECT语句中的列的顺序必须相同。

select Num from student union select Stu_id from score;

union操作符是默认查重的,如果允许重复的值,就可以使用union all 。对于两张结构相同的表,union也可以把他们合并成一张表

select * from student1 union select *from student2;

猜你喜欢

转载自blog.csdn.net/qq_37795916/article/details/115268337
今日推荐