美文网首页
PHP -- 数据库7 -- 多表间查询

PHP -- 数据库7 -- 多表间查询

作者: 潘肚饿兵哥哥 | 来源:发表于2019-08-19 22:43 被阅读0次

    truncate table tablename
    tablename是表名 清空数据,会重置自增长的下标
    delect from tablename
    删除所有数据,保留主键原本下标

    <?php
    //header("Content-type:text/html;charset=utf-8");
     
     PHP使用mysqli函数库操作MYSQL数据库:
        操作步骤:
    7个步骤:
     
     增删改语句
        添加:
            insert  into tablename(列,...) value(值)前面的列数量和后面的值数量要匹配
        
        修改:
            update tablename set 列=值,...[where 修改条件](值要看类型,要对应的类型,最后一个不要写逗号,中括号里参数,可以不写但建议写,不写的话全部都改掉了)
        
        删除:
            delect from tablename [where 删除条件]
            
        表有一个主键,主键是自增长的,用delect删除掉项之后,主键还是保留,所以再插入数据之后就不会从1开始,下面这种删除数据方法会从1开始
        
            truncate table tablename//tablename是表名 清空数据,会重置自增长的下标
            delect from tablename //删除所有数据,保留主键原本下标
            
            
            
            
        select语句:
            select 列 from 表
            where 表达式(比较和逻辑运算) in not in between and like % _   select后面没有出现的列可以用
            group by (count(*) max(列)求最大 min()求最小 avg()求平均 sum()求和)
            having 写法和where写法一样,select后面出现的列having才能用(having针对临时表)
            order by 列1(asc/desc), 列2(asc/desc),...
            limit start, len,   limit 5 == limit 0,5默认从0开始,这个数字是索引
    
    

    \color{rgba(254, 67, 101, .8)}{多表之间查询:}
    \color{rgba(254, 67, 101, .8)}{新建一个表category,对应goods表商品类目}

    #栏目表
        create table category(
            `cat_id` smallint(5) unsigned not null auto_increment,
            `cat_name` varchar(90) not null default '',
            primary key(`cat_id`) 
        )engine=myisam default charset=utf8;
    
    
    insert into category
    values
    (1, '手机类型'),
    (2, 'CDMA手机'),
    (3, 'GSM手机'),
    (4, '3G手机'),
    (5, '双模手机'),
    (6, '手机配件'),
    (7, '充电器'),
    (8, '耳机'),
    (9, '电池'),
    (11, '读卡器和内存卡'),
    (12, '充值卡'),
    (13, '小灵通/固话充值卡'),
    (14, '移动手机充值卡'),
    (15, '联通手机充值卡');
    
    
       多表之间的查询:
           连接查询: 左连接(left join) 右连接(right join) 内连接([inner] join)只写一个join就是内连接
           无论什么连接都要加 on 连接条件,
           
           select 列 from table1 left join table2 on 连接条件 where ...
    左连接:主表写在左边      
    
       示例:select goods.goods_name from goods left join category on goods.cat_id=category.cat_id;
    让两个表的cat_id相等,才能拿出来
       
       这样写每次都要写表名,很麻烦,所以可以取一个别名G/C,这样写起来容易一些:
           select g.goods_name,g.shop_price,c.cat_name from goods g left join category c on g.cat_id=c.cat_id;
           
    goods g 表示给goods取一个别名 g 
    goods as g 也是给goods取一个别名 g 
    两者是等价的
    所以:
    select goods.goods_name, goods.shop_price,category.cat_name from goods g left join category c on goods.cat_id=category.cat_id;
    等价于:
    select g.goods_name,g.shop_price,c.cat_name from goods g left join category c on g.cat_id=c.cat_id;
    
    ?>
    
    

    \color{rgba(254, 67, 101, .8)}{查询分类名称、商品名称、本店价格}

    分类名称在category表,商品名称、本店价格在goods表

    mysql> select g.goods_name,g.shop_price,c.cat_name from goods g left join category c on g.cat_id=c.cat_id;
    +-------------------------+------------+-------------------+
    | goods_name              | shop_price | cat_name          |
    +-------------------------+------------+-------------------+
    | KD876                   |    1388.00 | 3G手机               |
    | 诺基亚N85原装充电器                  |      58.00 | 耳机                  |
    | 诺基亚原装5800耳机                 |      68.00 | 耳机                  |
    | 索爱原装M2卡读卡器                    |      20.00 | 读卡器和内存卡               |
    | 盛创KINGMAX内存卡             |      42.00 | 读卡器和内存卡               |
    | 诺基亚N85原装立体声耳机                  |     100.00 | 耳机                  |
    | 飞利浦9@9v                    |     399.00 | GSM手机              |
    | 诺基亚E66                    |    2298.00 | GSM手机              |
    | 索爱C702c                   |    1328.00 | GSM手机              |
    | 索爱C702c                   |    1300.00 | GSM手机              |
    | 摩托罗拉A810                   |     983.00 | GSM手机              |
    | 诺基亚5320 XpressMusic       |    1311.00 | GSM手机              |
    | 诺基亚5800XM                 |    2625.00 | 3G手机               |
    | 摩托罗拉A810                   |     788.00 | GSM手机              |
    | 恒基伟业G101                  |     823.33 | CDMA手机             |
    | 夏新N7                      |    2300.00 | GSM手机              |
    | 夏新T5                      |    2878.00 | 3G手机               |
    | 三星SGH-F258                |     858.00 | GSM手机              |
    | 三星BC01                    |     280.00 | GSM手机              |
    | 金立 A30                    |    2000.00 | GSM手机              |
    | 多普达Tuch HD                |    5999.00 | GSM手机              |
    | 诺基亚N96                    |    3700.00 | 双模手机               |
    | P806                    |    2000.00 | GSM手机              |
    | 小灵通/固话50元充值卡                |      48.00 | 小灵通/固话充值卡             |
    | 小灵通/固话20元充值卡                |      19.00 | 小灵通/固话充值卡             |
    | 联通100元充值卡                  |      95.00 | 联通手机充值卡               |
    | 联通50元充值卡                   |      45.00 | 联通手机充值卡               |
    | 移动100元充值卡                  |      90.00 | 移动手机充值卡               |
    | 移动20元充值卡                   |      18.00 | 移动手机充值卡               |
    | 摩托罗拉E8                     |    1337.00 | GSM手机              |
    | 诺基亚N85                    |    3010.00 | GSM手机              |
    +-------------------------+------------+-------------------+
    31 rows in set (0.00 sec)
    

    相关文章

      网友评论

          本文标题:PHP -- 数据库7 -- 多表间查询

          本文链接:https://www.haomeiwen.com/subject/paqlsctx.html