数据库表关联(mysql数据库表之间是怎么关联的请详解)
老铁们,大家好,相信还有很多朋友对于数据库表关联和mysql数据库表之间是怎么关联的请详解的相关问题不太懂,没关系,今天就由我来为大家分享分享数据库表关联以及mysql数据库表之间是怎么关联的请详解的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
数据库表关联查询的类型有什么
1.左右连接:以哪个表为主,结果集为“主表”的全部记录+“副表”与“主表”相匹配的记录,如果“副表”中没有和“主表”相匹配的记录,则相对应的记录显示为NULL
2.左连接:左边表全部行+右边表相匹配的行,如果左边表中的某一行,在右边表中没有匹配的行,则显示NULL(left join或者left outer join)
3.右连接:和左连接相反。(right join或者right outer join)
4.内连接:它返回字段ID(连接条件)同时存在于两个表中的记录,也就是说,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行,内联接消除与另一个表中的任何行不匹配的行。(innerjoin或者join)
5.全连接:不管匹配不匹配,全部都显示出来。(full join或者full outer join)
6.交叉连接:没有WHERE子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(cross join不带where)
7.自连接:给自己取个别名,一个表当两个表来使用。
如何设置SQL数据库表与表的关联关系
如果是父子关系,或者一对多关系。
可以通过创建外键的方式,在父表与子表之间,创建一个关联关系。
例如:
--创建测试主表. ID是主键.
CREATE TABLE test_main(
id INT NOT NULL,
value VARCHAR(10),
PRIMARY KEY(id)
);
--创建测试子表.
CREATE TABLE test_sub(
id INT NOT NULL,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
--插入测试主表数据.
INSERT INTO test_main(id, value) VALUES(1,'ONE');
INSERT INTO test_main(id, value) VALUES(2,'TWO');
--插入测试子表数据.
INSERT INTO test_sub(id, main_id, value) VALUES(1, 1,'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES(2, 2,'TWOTWO');
SQL>--创建外键(默认选项)
SQL> ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY(main_id) REFERENCES test_main;
Table altered.
SQL>
SQL>--测试删除主表数据.将出错 ORA-02292:违反完整约束条件
SQL> DELETE
2 test_main
3 WHERE
4 ID= 1;
DELETE
*
ERROR at line 1:
ORA-02292: integrity constraint(HR.MAIN_ID_CONS) violated- child record found
mysql数据库表之间是怎么关联的请详解
left join
join
主外键是两种对表的约束。
例如:
学生表student(学号(id),姓名(name),性别(sex))
表内有:1,aa,女
课程表subject(课程编号(id),课程名(name))
表内有:1,语文
成绩表grade(成绩编号(id),学号(stu_id),课程号(sub_id),成绩(grade))
表内有:1,1,1,90
成绩表的学号就是学生表的学号相对应,并且为学生表的主键,这样就称成绩表中的学号是学生表的外键,同理,成绩表中的课程号是课程表的外键。
select* from student as s inner join subject as su on su.stu_id=s.id inner join grade as g on g.sub_id=su.id where 1.
扩展资料:注意事项
SQL连接(JOIN)子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。
左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。
假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。
不同的 SQL JOIN可以使用的不同的 SQL JOIN类型:
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行(MySQL不支持FULL JOIN)
例如:
mysql> select* from access_log;
+-----+---------+-------+------------+
| aid| site_id| count| date|
+-----+---------+-------+------------+
| 1| 1| 45| 2016-05-10|
| 2| 3| 100| 2016-05-13|
| 3| 1| 230| 2016-05-14|
| 4| 2| 10| 2016-05-14|
| 5| 5| 205| 2016-05-14|
| 6| 4| 13| 2016-05-15|
| 7| 3| 220| 2016-05-15|
| 8| 5| 545| 2016-05-16|
| 9| 3| 201| 2016-05-17|
+-----+---------+-------+------------+
9 rows in set
请问什么是数据库表自关联啊 求高手指教
自关联,字面意思是自己跟自己关联,如数据库中某表:EXP,有字段ID,PD数据内容是:
ID PD
001 002
002 001
006 008
009 007
如何将字段ID中的前两位数字相同的ID号取出来,并对PD求和,那么这就是自关联,或者我们经常遇到的销售记录表:
ID U_ID JE
1 001 800
2 001-50
3 001 600
4 001-1000
上表的意思是某用户第一次冲值800元,第二次消费50元,要查找出该用户所有消费记录和当前结余是多少,那么在对这个表查询需要用到内关联。
好了,关于数据库表关联和mysql数据库表之间是怎么关联的请详解的问题到这里结束啦,希望可以解决您的问题哈!