!!!查询时要注意笛卡尔积:添加合适的条件
!!!查询时要注意数据重复:用distinct
!!!查询时要注意别名的使用:给列设置别名要用as,给表设置别名不需用as。给表设置别名后,查询语句中只能使用别名不能使用原表名
各类连接查询方式:
SELECT table1.column, table2.column FROM table1
[,table2 where table1.column_name = table2.column_name] --简单的自连接
[,table2 where table1.column_name between table2.low and table2.heigh] --连接查询也可实现非等值查询
[CROSS JOIN table2]| --可得到两表的笛卡尔积
[NATURAL JOIN table2] | --自然连接,自动以两表中的同名列为条件创建等值连接
[JOIN table2 USING (column_name)] | --以特定列为条件创建等值连接的自然连接,列名前不能写表名前缀
[INNER JOIN table2 ON(table1.column_name = table2.column_name)] | --内连接,常用
[LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)] --左/右/全外连接
- 内连接:可以合并具有相同列的2个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
举例:在dyaq表中查询qlrmc='小明‘的所有数据。但dyaq表中无qlrmc字段,有bdcdyh字段。qlr表中有qlrmc字段和bdcdyh字段。
select distinct s.* from dyaq s inner join (select * from qlr where qlrmc='小明’) t on s.bdcdyh=t.bdcdyh
- 外连接:除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)