基本连接:
使用规则:
SELECT子句列表中,目标列前都加上基本名称
FROM子句包括所有使用的基表
WHERE定义一个同等连接
例子:
SQL数据库中有两张表,一张人员(T_Person)表、一张卡(T_Card)表,人基本上都那么几张卡,像银行卡、饭卡、水卡、电费卡……
(T_Person)
(T_Card)
内连接:
语法格式:
SELECT select_list
From table inner join tables [on join_conditions]
[where search_conditions]
[order by order_expression]
内连接是等值连接,它使用“=、>、<、<>”等运算符根据每个表共有的列的值匹配两个表中的行
查询语句:
select * from T_Person inner join T_Card on T_Person.CardId = T_Card.CardId
查询结果:
左外连接:
与内连接的区别:
内连接消除与另一表任何行不匹配的行,外连接返回form子句提到的至少一个表或视图的所有行,
外连接有主从之分,主表去匹配从表,符合条件,返回到查询结果,没有匹配到,主表行任然保留,也返回到查询结果,表中的行空值也到查询表
左连接又称左向外连接,查询的结果集包括SQL语句中左表的所有行,右表中匹配的行。如果左表的某行在右表中没有匹配行,则用空值表示
查询语句:
select * from T_Person left join T_Card on T_Person.CardId = T_Card.CardId
查询结果:
右外连接:
格式: 表名 RIGHT JOIN 表名 ON 条件 返回包括右表中的所有记录和右表中连接字段相等的记录
其实跟左外连接差不多,就是将右边的表给全部显示出来
查询的结果集包括SQL语句中右表的所有行,左表中匹配的行。如果右表的某行在左表中没有匹配的行,则用空值表示
查询语句:
select * from T_Person right join T_Card on T_Person.CardId = T_Card.CardId
查询结果:
全连接:
可以全查出来
交叉连接:
不带where子句,返回被连接的两个表所有的数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
语法格式:
Select select_list
From table cross join table
[where search_conditions]
[order by order_expression]
自连接:
在同一个表实现多表连接
联合查询:
语法格式:
Select select_list
From table_source
[where search_conditions]
{union[ALL]
Select select_list
Form table_source
[where search_conditions]
[order by order_expresson]
}
注意:使用union查询,连接的两个结果集在期目标列表有相同数目表达式,内容保持一致
使用子查询:
数据筛选条件,其中使用select语句,控制取值范围
子查询,将查询一张表得到的结果来充当另一个查询的条件,这样嵌套的查询就称为子查询
嵌套子查询:
xml查询:
For xml查询:
exists关键字查询:
EXISTS关键字后面的参数是任意一个子查询,如果子查询有返回记录行,则为TRUE,外层查询语句将会进行查询,如果子查询没有返回任何记录行,则为FALSE,外层查询语句将不会进行查询。
交查询ntersect:
差查询except: