php-9

来源:互联网 发布:100 7 js是什么意思 编辑:程序博客网 时间:2024/06/15 07:34

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


      在业务上不需要精确查询时,一般都使用内连(速度上要高于左连)

原创粉丝点击