本文共 4578 字,大约阅读时间需要 15 分钟。
=============================================================================
SQL join
SQL join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。 连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。JOIN 类型,以及它们之间的差异:
"Persons" 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
"Id_P" 列是 Persons 表中的的主键。
"Orders" 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。"Id_P" 列把上面的两个表联系了起来。
建表语句:
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P);create table Orders
ALTER TABLE Orders ADD CONSTRAINT pk_OrderID PRIMARY KEY (Id_O);
#添加外键约束
ALTER TABLE OrdersADD CONSTRAINT fk_PerOrdersFOREIGN KEY (Id_P)REFERENCES Persons(Id_P); 如需撤销 FOREIGN KEY 约束,请使用下面的 SQL: MySQL: ALTER TABLE OrdersDROP FOREIGN KEY fk_PerOrders SQL Server / Oracle / MS Access: ALTER TABLE OrdersDROP CONSTRAINT fk_PerOrders 插入数据: insert into Persons values (1,'Adams','John','Oxford Street','London' );
INSERT INTO Persons VALUES (3,'Bush', 'George', 'Fifth Avenue', 'New York'); INSERT INTO Persons VALUES (2,'Gates', 'Bill', 'Changan Street', 'Beijing');
insert into orders values(1,'20150730100',2);
insert into orders values(2,'20150730100',3); insert into orders values(3,'20150730100',2); insert into orders values(4,'20150730100',3);
insert into orders values(5,'20150730100',3);
insert into orders values(6,'20150730100',1);
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P
也可以使用关键词 JOIN 来从两个表中获取数据。 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastName
结果集:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |