您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

约束~数据库设计~多表查询(5个小练习)----保姆级详述,学到了就是赚到了

文章目录

  • 约束
  • 数据库设计
      • 一对多实现方式
      • 多对多实现方式
      • 一对一实现方式
  • 多表查询
    • 分类
      • 连接查询
      • 子查询
        • 单行单列(作为条件值)
        • 多行单列(多为条件值)
        • 多行多列(多为虚拟表)
    • 练习
      • 练习1 ✊
      • 练习2 ✊
      • 练习3 ✊
      • 练习4 ✊
      • 练习5 ✊

约束


约束名称描述关键字
非空约束保证列中所有数据不能有null值not null
唯一约束保证列中所有数据各不相同unique
主键约束主键是一行数据的唯一标识,要求非空唯一primary key
默认约束保存数据时,未指定值则采用默认值default
外键约束外键用来让两个表的数据之间建立连接,保证数据的一致性,完整性foreign key

数据库设计

一对多实现方式

  • 在多的一方建立外键关联低的一方的主键

多对多实现方式

  • 建立第三方中间表
  • 中间表至少包含两个外键,分别关联双方主键

一对一实现方式

  • 在任意一方建立外键,关联对方主键,并设置外键唯一

多表查询

笛卡尔积:取A,B集合所有组合情况

select * from tb_1,tb_2;

分类

连接查询

在这里插入图片描述

  • 🍎内连接

    相当于查询A,B的交集部分

    • 🌳隐式内连接
      • select 字段列表 from 表1,表2… where 条件;
      • 字段列表可以这样写:fg: A.name,B.age…
      • 当现实中A,B名字很长的情况下可以给表起别名类似于给字段起别名直接 A a,B b 中间有空格
    • 🌳显示内连接
      • select 字段列表 from 表1 inner join 表2 on 条件 📕这里的inner可以省略
  • 🍎外连接

    • 🌳左外连接:A的部分和A与B的交集的部分

    • select 字段列表 from 表1 left outer join 表2 on 条件

    • 🌳右外连接:B的部分和A与B交集的部分

    • select 字段列表 from 表1 right outer join 表2 on 条件

    • 这里的 outer 也是可以省略的

子查询

查询中嵌套查询,称嵌套查询为子查询

Fg:查询工资高于A的员工信息;分两步走:1.先查询A的工资 2.查询工资高于A的员工

  • 根据子查询结果不同,作用不同

单行单列(作为条件值)

使用 = != > < 进行条件判断

select 字段列表 from 表名 where 字段名 =(!= > <) (子查询)

多行单列(多为条件值)

使用 in 关键字进行判断

select 字段列表 from 表名 where in (子查询)

多行多列(多为虚拟表)

select 字段列表 from (子查询) where 条件

练习

在这里插入图片描述
在这里插入图片描述

练习1 ✊

select emp.id,emp.ename,emp.salary,job.jname,job.description from emp,job where emp.job_id=job.id

练习2 ✊

select emp.id,emp.ename,emp.salary,job.jname,job.sescription,dept.dname,dept.loc
from emp,job,dept where emp.job_id=job.id and emp.dept_id=dept.id

练习3 ✊

select emp.ename,emp.salary,t1.grade from emp,salarygrade t1 
where emp.salary between t1.losalary and t1.hisalary

练习4 ✊

select emp.ename,emp.salary,job.jname,job.decription,dept.dname,dept.loc,t1.grade
from emp inner
join job on emp.job_id=job.id inner
join dept on emp.dept_id=dept.id inner 
join salarygrade t1 on emp.salary between t1.losalary and t1.hisalary

练习5 ✊

select  dept.id,dept.dname,dept.loc,t1.count
from dept,(select dept_id,count(*) count from emp group by dept_id ) t1 
where t1.dept_id=dept,id 

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进