SQL 多表查询
1.一对一: 由于字段太多或字段内容量太太,考虑到查询效率问题,就把一张表瘦身分为两张表,通过唯一(主键自增长)字段关联
2.一对多:一个分类对应多条新闻
分类表categroy(cid,cat_name) + 新闻表news(news_id,cid,title,.....)
多表查询语句
1)内连查询SQL
查询两表关联字段(news_id)值相同的记录
select * from news,news_contents where news.news_id=news_contents.news_id
#使用表别名 [AS],as关键字可以省略,通过空格如 news a,news_contents b
select * from news as a,news_contents as
b where a.news_id=b.news_id
2)左连查询
SELECT * FROM news AS a LEFT JOIN news_contents AS b ON a.news_id=b. news_id
SELECT * FROM news AS a LEFT JOIN news_contents AS b ON a.news_id=b.news_id where a.news_id>2 ORDER BY a.news_id desc limit 1;
3)右连查询
SELECT * FROM news AS a RIGHT JOIN news_contents AS b ON a.news_id=b. news_id
4)子查询
select a.news_id,a.title,(select content from news_contents as b where a.news_id=b.news_id) from news as a
多表关系总结:
多表关系(一对一、一对多、多对多)
1.表设计
通过功能,确定需要保存的数据,然后设计表:
原则: 确保一张表保存一种数据,不是同类数据就要考虑分表了,然后通过字段关联;
一对一:
由于字段太多或字段内容量太大,考虑到查询效率问题,就把一张表瘦身分为两张,在通过主键字段关联
一对多:
一对多关系表是项目中最常用的,优点:节省存储空间,方便维护,提高查询效率
常见应用:分类+新闻; 分类+产品; 新闻+评论; 用户+订单;
分类表: [一] [对] 新闻表: [多]
-------------- ------------------------
cid | cat_name id | cid | title |.....
-------------- ------------------------
1 | 行业动态 10 | 1 | 新闻一|
-------------- ------------------------
11 | 1 | 新闻二|
------------------------
新闻表中cid就是外键,关连其他表的字段,值可以重复
2.表数据的操作
1)添加:一对一、一对多 中的 "一" 表正常添加
关连表 先要有"一"表记录,才能得到关连的值
2)修改:一对一、一对多 中的 "一" 表正常修改
关连表:一对一关系,同时修改对应好字段所属表
一对多关系,"多"表修改了对应关连的值,其他字段按正常修改;
3)删除:一对一,两表同时删除
一对多:
"一"表记录删除方式:a)先删除"多"表的相关连数据,然后在删除"一"表记录
b)删除"一"表记录同时删除"多"表的对应相关连数据
3.表数据的获取
常用关连表的查询SQL:
1)内连:两表(或以上)通过关联字段,查询值一样的所有数据
SELECT * FROM news AS a,news_content AS b WHERE a.news_id=b.news_id ;
字段根据需要写,其他条件 紧跟后面 拼接
2)左连:两表(或以上)通过关联字段,查询左边表所有数据,并对应关连表
#一对一
SELECT * FROM news AS a LEFT JOIN news_contents AS b ON a.news_id=b.news_id;
#一对多
SELECT * FROM news AS a LEFT JOIN category AS b ON a.cid=b.cid ;
说明:字段根据需要写,其他条件使用 WHERE 拼接
两张表或以上,查询关联关系为:n-1
在业务上不需要精确查询时,一般都使用内连(速度上要高于左连)