zoukankan      html  css  js  c++  java
  • 数据库1 关系(relation) 元组(tuple) join

    关系模型是一种基于表的模型,含有列(attribute)和数据的表即可视为relationship

    关系代数集合中,重复元组总是会被排除。如 unionunion all ,对于返回的查询结果,前者会把重复项随机删除一个

    查找与排序均为不稳定,不同的操作系统对于相同的插入元组数据会有不同的排序数据

    其他高级语言的数据类型自动转换仍然有效,比如float与int,100.0为float。能否强制类型转换???可以!包括显式和隐式,见 :sql类型转换

    sql语句设计成最有效的方式,虽然查询的逻辑比java c等麻烦


    模式:关系名和其属性集合的组合称为模式schema,例如

    表名(属性1,属性2...)

    在MySQL中,数据库和模式是一样的,比如在MySQL中输入:show schemas,则会返回和show databases一样的结果;
    而create schema sh1 和 create database sh2 的效果是一样的;
    MySQL中不存在CATALOG的概念;也没有CREATE CATALOG的语法;

    数据库有一个或多个关系组成,数据库的关系集合模式叫做数据库模式(database schema)

    元组: 关系中除含属性名所在行以外的其他行称作元组(tuple)

    (name,1996,ID) 

    关系实例:一个给定关系中的元组集合

    关系约束:键。

    没有任何两个元组在组成键的所有属性上具有相同的值,虽然他们有可能在组成键的部分属性上取值相同。

    投影:从原有关系生成一个新的关系,包含原来关系的部分列

    选择:原有关系的元组的子集合


    普遍说的join为交叉连接(cross join),即笛卡尔积

    自然连接(natural join):是一种特殊的等价连接,它将表中具有相同名称的列自动进行记录匹配, 自动判断相同名称的列,而后形成匹配。缺点是,虽然可以指定查询结果包括哪些列,但不能人为地指定哪些列被匹配。自然连接不必指定任何同等连接条件。连接后的结果表中匹配的列只有一个. 没有共有属性的元组忽略掉,称为悬浮元祖

    A B C
    1 2 3
    6 7 8
    9 7 8

    +

    B C D
    2 3 4
    2 3 5
    7 8 10

    =

    A B C D
    1 2 3 4
    1 2 3 5
    6 7 8 10
    9 7 8 10

    使用自然连接要注意,两个表同名的列不能超过1个。
    natural join:指明了两表进行自然连接,并且连接是基于两表中所有同名字段的。
    join…using:用于两表有同名字段但数据类型不同,或者使用多个同名字段中的某一个做等值连接
    join…on :最为灵活,可以指明连接的条件。

    select *from test_table_a join test_table_b using(name);  

    =

    select *from test_table_a, test_table_b where a.name=b.name;  

    使用NATURAL JOIN运算符进行自然连接,与检查两个源表中同名列值相等的WHERE子句是等价的


    连接的概念:

    连接分为条件连接、等值连接和自然连接三种。

    1、条件连接就是在多个表的笛卡尔积中选取满足条件的行的连接,例如 select * from A,B where A.a > A.b 之类的有条件的查询。

    2、等值连接就是特殊的条件连接,当条件为某字段=某字段时,即为等值连接。如SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno=dept.deptno;

    3、自然连接是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。如A中a,b,c字段,B中有c,d字段,则select * from A natural join B 相当于 select A.a,A.b,A.c,B.d from A.c = B.c 。

    内连接与等值连接的区别:

    内连接:两个表(或连接)中某一数据项相等的连接称为内连接。等值连接一般用where字句设置条件,内连接一般用on字句设置条件,但内连接与等值连接效果是相同的。

    内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。

    内连接与等值连接其实是一回事情(等效)。

    经常有人会问到select a.id,b.name from a,b where a.id=b.pid 与

    select a.id,b.name from a inner join b on a.id=b.pid 有什么区别,哪个效率更高一些。

    实际上一回事情。只是内连接是由SQL 1999规则定的书写方式。两个说的是一码事。

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/bishi/p/5699016.html
Copyright © 2011-2022 走看看