一.了解
1.sql查询的基本原理:
第一,单表查询,根据WHERE条件过滤表中的记录,形成中间表(中间表对用户不可见)根据SELECT的选择列选择相应的列进行返回最终结果
第二,两表连接查询,对两表求积并用ON条件和连接类型进行过滤形成中间表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果
第三,多表连接查询,先对第一个和第二个表做两表连接查询,然后用查询的结果和第三个表做连接查询,自此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表记录,并根据SELECT指定列返回查询结果
二.连接查询
连接运算符是用来实现多表联合查询的一种重要方式,主要分为:内连接,外连接,交叉连接
1.内连接:inner join on关键字 找出两表的【交集】
基本语法: SELECT * FROM [左表] innder join [右表] on [左表].[字段]=[右表].[字段];
可以省略on,也可以用where代替on
下边是找的例子可以帮助我们理解
"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 |
"Orders" 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
sql语句: SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
结果:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
2.外连接:包括左外连接,右外连接
左外连接:
关键字:left join on / left outer join on
基本语法: SELECT * FROM [左表] LEFT JOIN [右表] on [左表].[字段]=[右表].[字段];
会显示左边表的全部数据,右边没有数据则以null显示
sql语句:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
Bush | George |
右外连接:
关键字:right join on
基本语法:SELECT * FROM [左表] RIGHT JOIN [右表] on [左表].[字段]=[右表].[字段];
会显示右边表的全部数据,左边没有数据则以null显示
sql语句:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
34764 |