由于最近得兼职做后台的业务逻辑以及接口的工作,因此在此把最近总结到的有关数据库查询的东西进行一下总结和备忘。生活不易,且过且珍惜呀....
1.LEFT JOIN ,RIGHT JOIN, INNER JOIN的区别
LEFT JION 左连接,主要依照左表,返回左表的所有记录和右表中联结字段相等的记录。
RIGHT JOIN 右连接,主要依照右表,返回包括右表中的所有记录和左表中联结字段相等的记录。
INNER JOIN 等值连接,只返回两个表中联结字段相等的行
ON 为连接条件,后可以用AND 或 OR连接附加连接条件
1.1查询语句直观来看三者区别
Designer_UserInfo表中的数据如下:
ID TrueName
1 小糖豆
2 小土豆
3 大猴子
4 小萝卜
Student_UserInfo表中数据如下
ID Age
1 10
2 11
3 15
8 4
使用LEFT JOIND的查询语句为
SELECT *FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID
返回结果为
ID TrueName ID1 Age
1 小糖豆 1 10
2 小土豆 2 11
3 大猴子 3 15
4 小萝卜 NULL NULL
使用RIGHT JOIND的查询语句为
SELECT *FROM Designer_UserInfo RIGHT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID
返回结果为
ID TrueName ID1 Age
1 小糖豆 1 10
2 小土豆 2 11
3 大猴子 3 15
NULL NULL 8 4
使用INNER JOIND的查询语句为
SELECT *FROM Designer_UserInfo INNER JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID
返回结果为
ID TrueName ID1 Age
1 小糖豆 1 10
2 小土豆 2 11
3 大猴子 3 15
1.2返回字段
SELECT *返回所有字段,如果是连表查询,则返回两个表中的所有字段,若是单表查询则返回当前表中所有字段;
SELECT Designer_UserInfo.* 返回Designer_UserInfo表中所有字段,不管是单表还是连表;
SELECT Designer_UserInfo.ID 则只返回Designer_UserInfo表中的ID字段不管是连表还是单表。
如:
SELECT Designer_UserInfo.TrueName,Student_UserInfo.Age FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID
结果直返这两个字段:
TrueName Age
小糖豆 10
小土豆 11
大猴子 15
小萝卜 null
注意SELECT后面添加的返回字段必须用‘,’隔开,最后一个字段后什么都不用加
若想返回两个表中的两个字段可以这样写:
SELECT Designer_UserInfo.ID,Student_UserInfo.ID
FROM Designer_UserInfo INNER JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID
2.连接条件 ON AND OR
如上面的查询语句ON是连表查询的连接条件,Designer_UserInfo中的ID等于Student_UserInfo中的ID,但是一般后面还会跟其他的连接条件,如果是两者都需要满足的话就用AND连接,如果两者只要有一个条件满足就可以用OR来连接。
一定要记住NAD 和 OR跟在ON后面代表的是连接条件,跟在WHERE后表示查询条件,两者之间产生的效果是截然不同的,下面举例说明。
一般在数据库中都会有一个字段用来标识是否删除,因此连表条件一般加上这个如下:
SELECT *FROM Designer_UserInfo INNER JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID AND Student_UserInfo.isDel=0
2.1 OR的使用
如果我们把查询语句改为
SELECT *FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID OR Designer_UserInfo.ID=Student_UserInfo.Age
结果就会变成
1 小糖豆 1 10
2 小土豆 2 11
3 大猴子 3 15
4 小萝卜 8 4
3.查询条件 WHERE
WHERE关键字为查询条件,一般后面会添加其他的查询条件用AND来连接
3.1单独WHERE使用
现在我们在上面连表语句的基础上添加查询条件
SELECT *FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID WHERE Designer_UserInfo.TrueName='小糖豆'
这条查询语句的意思就是:根据条件Designer_UserInfo.ID=Student_UserInfo.ID连接表并从中查找出Designer_UserInfo.TrueName为`小糖豆`的数据
运行结果为:
1 小糖豆 1 10
不连表的情况下使用WHERE查询
SELECT *FROM Designer_UserInfo WHERE Designer_UserInfo.TrueName='小糖豆'
运行结果为:
1 小糖豆
3.2 WHERE 和 AND 一起使用
从表中查出TrueName是小糖豆并且ID是1的数据
SELECT *FROM Designer_UserInfo WHERE Designer_UserInfo.TrueName='小糖豆' AND Designer_UserInfo.ID=1
结果为:
1 小糖豆
若把查询语句改为:
SELECT *FROM Designer_UserInfo WHERE Designer_UserInfo.TrueName='小糖豆' AND Designer_UserInfo.ID=2
因为数据库中没有满足条件的数据所以结果为:
null null
3.3 AND作为连接条件和作为查询条件的区别
先来看一下作为连接条件:
SELECT *FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID AND Student_UserInfo.Age=10
结果为:
1 小糖豆 1 10
2 小土豆 null null
3 大猴子 null null
4 小萝卜 null null
再来看一下作为查询条件:
SELECT *FROM Designer_UserInfo LEFT JOIN Student_UserInfo ON Designer_UserInfo.ID=Student_UserInfo.ID WHERE 1=1 AND Student_UserInfo.Age=10
运行结果为:
1 小糖豆 1 10
- 多表联查
最后来举一个多表联查的例子
SELECT
Designer_UserInfo.ID,
Designer_UserInfo.TrueName,
ftt_table.[Work],
Student_UserInfo.Age
FROM
Designer_UserInfo
INNER JOIN ftt_table ON Designer_UserInfo.ID = ftt_table.ID
INNER JOIN Student_UserInfo ON ftt_table.ID = Student_UserInfo.ID
运行结果为:
1 小糖豆 学生 10
2 小土豆 学生 11
3 大猴子 老师 15
网友评论