多表连接查询:从多个表中获取数据。如:table1有bookid,bookname,category,而bookname需要从图书信息表中获取数据,category需要从图书类别表中获取数据。
同时,不限制于2个表。
--语法:
table_reference
[inner] join |{left|right} [outer] join
on conditionl_expr
通过查看图书信息表和图书类别表,获取图书编号、图书名称、图书类别。
select book_id,book_name,category from bookinfo
inner join bookcategory on bookinfo.book_category_id = bookcategory.category_id;
一、内连接:查询表连接时表与表之间匹配的数据行。即:两张表之间数据行匹配时,同时满足on条件才会被筛选出来。
select colunn_list
from t1
[inner] join t2 on join_condition1
[inner] join t3 on join_condition2
...
where where_conditions;
例子:由于图书借阅统计的需要,想要查询未归还图书的图书编号,图书名称,身份证号,姓名,电话,归还日期,是否归还。
分析:
1.涉及到3张表:图书信息表、读者信息表、借阅信息表
2.图书编号在图书信息表、借阅信息表都有
3.身份证号在读者信息表、借阅信息表都有
4.图书名称在图书信息表
5.姓名,电话,归还日期,是否归还,在借阅信息表中
select borrowinfo.book_id,book_name,borrowinfo.card_id,name,tel,return_date,status
from borrowinfo
inner join bookinfo on borrowinfo.book_id = bookinfo.book_id
inner join readerinfo on borrowinfo.card_id = readerinfo.card_id
where borrowinfo.status = '否';
--book_id存在2个表,需要指出哪一个表
--borrowinfo表,和bookinfo内连接
--borrowinfo表,和readerinfo 内连接
通过起别名,简化sql
select t1.book_id,book_name,t1.card_id,name,tel,return_date,status
from borrowinfo t1
join bookinfo t2 on t1.book_id = t2.book_id
join readerinfo t3 on t1.card_id = t3.card_id
where t1.status = '否';
--inner join中的inner可省略
二、外连接:查询多个表相关联的行。左(外)连接,显示左表的全部记录,右(外)连接,显示右表的全部记录。
select column_list
from t1
left|right [outer] join t2 on join_condition1;
例子:查询图书类别表中所有类别下,都有哪些图书。
分析:涉及2个表:图书类别表、图书信息表
select book_id ,book_name ,bookcategory from bookcategory t1
left join bookinfo t2 on t1.category_id = t2.book_category_id;