SQL之多表联查

一、数据完整性

数据库的完整性

指数据的有效性和准确性

确保数据的完整性 = 在创建表时给表中添加约束

完整性的分类:

实体完整性(行完整性)、域完整性(列完整性)、引用完整性(关联表完整性)

        主键约束:primary key                                               行完整性

        唯一约束:unique                                                       行完整性

        自动增长:auto_increment                                         行完整性

        非空约束:not null                                                      列完整性

        默认约束:default                                                       列完整性

        数据类型(数值类型、字符串类型、日期类型)             列完整性

        外键约束: foreign key                                                 引用完整性

二、多表查询

多表约束:外键列

在实际开发中,为了数据查询效率,一般不设置表的外键列

2.1.        多表的关系

2.1.1      一对多/多对一关系

        一对多建表原则:在多的一方创建一个字段,字段作为外键指向一的一方的主键

2.1.2      多对多关系

        多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一 方的主键

2.1.3      一对一关系

        在实际的开发中应用不多.因为一对一可以创建成一张表

2.2        多表查询  

分为:

        合并结果集 UNION 、 UNION ALL

        连接查询

                内联  [INNER] JOIN ON

                外联  OUTER JOIN ON

                        左外联 LEFT [OUTER] JOIN ON

                        右外联 RIGHT [OUTER] JOIN ON

                自然连接

        子查询  select的嵌套

2.2.1        合并结果集(用途较少)

        作用:合并结果集就是把两个select语句的查询结果合并到一起! 合并结果集有两种方式:

        UNION:去除重复记录,例如:SELECT* FROM t1 UNION SELECT * FROM t2

        UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2

2.2.2        连接查询(重要!!!!)

        连接查询会出现笛卡尔积现象,即表1的每一条数据会去匹配表2的每一条数据,得到个乘积

        1.内连接

                92版语句:

                select 表1.列名,表2.列名 from 表1,表2 where 表1.列名=表2.列名 and......

                99版语句:

                select 表1.列名,表2.列名 from 表1 inner join 表2 on 表1.列名=表2.列名 where.....

                inner可省略,尽量以后都使用这版,目的是结构清晰易读

        2.外连接

                左外连接

                语法:

                左外联:select 列名 from 主表 left join 次表 on 主表.列名=次表.列名

                主表数据全部显示,次表数据匹配显示,能匹配到的显示数据,匹配不成功的显示null                 主表和次表不能随意调换位置

                右外连接

                left改成right  主表在后

2.2.3        子查询(重要!!!)

        一个select语句中包含另一个完整的select语句。

        子查询出现的位置:

                a. where后,作为条为被查询的一条件的一部分

                b. from后,作表;

        示例:

                工资高于JONES的员工。

        分析:

                查询条件:工资>JONES工资,其中JONES工资需要一条子查询

                第一步:查询JONES的工资

                SELECT sal FROM emp WHERE ename='JONES';

                第二步:拿所有人的工资和jones的工资比

                SELECT * FROM emp WHERE sal > (第一步结果);        

                结果:

                SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE

ename='JONES');

                

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值