上一篇讲了博客讲了数据库表内容的插入、删除、修改的基本操作,这一篇博客我来说一下mysql数据库的连接查询和子查询、和合并查询
A):连接查询:用到两张或者是两张以上的表的查询叫做连接查询。连接查询可以分为:内连接查询、外连接查询、复合条件的连接查询。
1):内连接查询:可以查询两张及两张以上的表,常用where做限制。最常用的查询方式。
如查询t_book表与t_bookType表中t_book的bookTypeid与bookType的id一样的数据:
select * from t_book t_b,t_bookType t_bt where t_b.bookTypeid = t_bt.id;
2):外连接查询:在内连接中只有满足条件的数据才会被查阅到,可是有些时候我们想查看全部结果,这个时候就要用到外连接。外连接查询分为左外连接查询和右外连接查询。
左外连接查询:join左表中的所有记录和右表中满足条件的记录会被查询到。
如左外连接查询:查询t_book中所有记录并且把在t_bookType表中属于每种类型的书籍类型显示出来,没有的书籍所对应的类型则不需显示:
SELECT * FROM t_book t_b LEFT JOIN t_bookType t_bt ON t_b.bookTypeId = t_bt.id;
如右外连接查询:查询t_bookType表中的所有书籍类型显示出来,并把对应的书籍显示出来,没有所对应的书籍则不需要显示:
select * from t_book t_b right join t_bookType t_bt on t_b.bookTypeid = t_bt.id;
3):复合条件查询:where子句只有连接条件,where字句还可以跟多个字句的连接条件,这样就称为复合条件查询。
如查询t_book中bookName='java编程思想'并查出所对应的书籍类型名字等所有信息。
SELECT * FROM t_book t_b,t_bookType t_bt WHERE t_b.bookTypeId = t_bt.id AND t_b.bookName='java编程思想';
B):子查询:是将一个查询嵌入到另一个查询中。常用的关键字:in、exists、any、all、带比较>、<、=。
in关键字子查询:查询t_book中t_bookTypeId不在t_bookType中id的书籍信息:
select * from t_book where id not in(select id from t_bookType);
all关键字子查询:查询t_book中价格小于等于t_book1中价格的所有书的信息:
select * from t_book where price <=all(select price from t_book1);
any关键字查询:查询t_book中价格小于任意一个t_book1中price的所有书信息:
select * from t_book where id < any(select price from t_book1);
exist关键字查询:先判断exists子句中的语句是否存在返回true或false,也存在限制性作用,存在再判断外层语句。比如判断T_BOOKTYPE中id为1并且t_book中bookTypeid与t_booktype中的id相对应,并查出t_book中满足这些条件的书籍信息记录。
SELECT * FROM t_book WHERE
EXISTS (SELECT id FROM t_bookType
WHERE t_book.bookTypeId = T_BOOKtYPE.ID AND T_BOOKtYPE.ID = 1);。
C):合并查询。Union为关键字,数据库系统会把所查到的记录并到一起并删除重复记录。
用union all会显示所有记录。
比如查询t_book中id大于3的和价格大于40满足任意一条件的合并信息记录不重复:
SELECT * FROM t_book WHERE id >3 UNION SELECT * FROM t_book WHERE price > 40;
比如查询t_book中id大于3的和价格大于40满足任意一条件的合并信息记录重复:
SELECT * FROM t_book WHERE id >3 UNION all SELECT * FROM t_book WHERE price > 40;