zoukankan      html  css  js  c++  java
  • mysql 两例习题

    一、

    综述:两张表,一张顾客信息表customers,一张订单表orders
    1、创建一张顾客信息表customers,字段要求如下:
        c_id 类型为整型,设置为主键,并设置为自增长属性
        c_name 字符类型,变长,宽度为20
        c_age 微小整型,取值范围为0~255(无符号)
        c_sex 枚举类型,要求只能在('M','F')中选择一个值
        c_city 字符类型,变长,宽度为20
        c_salary 浮点类型,要求整数部分最大为10位,小数部分为2位
        在表中任意插入3条记录,c_name为"Zhangsan","Lisi","Wangwu", c_city尽量写"Beijing","Shanghai" ......    
    
        create table customers(
        c_id int primary key auto_increment,
        c_name varchar(20),
        c_age tinyint unsigned,
        c_sex enum("M","F"),
        c_city varchar(20),
        c_salary float(12,2)
        );
    
        insert into customers values
        (1,"Zhangsan",25,"M","Beijing",8000),
        (2,"Lisi",30,"F","Shanghai",10000),
        (3,"Wangwu",27,"M","Shenzhen",3000);
    
    2、创建一张订单表orders,字段要求如下:
        o_id 整型
        o_name 字符类型,变长,宽度为30
        o_price 浮点类型,整数最大为10位,小数部分为2位
        设置此表中的o_id字段为customers表中c_id字段的外键,更新删除同步
        在表中任意插入5条记录(注意外键限制)
        o_name分别为"iphone","ipad","iwatch","mate9","r11",其他信息自己定
    
        create table orders(
        o_id int,
        o_name varchar(30),
        o_price float(12,2),
        foreign key(o_id) references customers(c_id)
        on delete cascade
        on update cascade
        );
    
        insert into orders values
        (1,"iphone",5288),
        (1,"ipad",3299),
        (3,"mate9",3688),
        (2,"iwatch",2222),
        (2,"r11",4400);
    
    
    3、返回customers表中,工资大于4000元,或者年龄小于29岁,满足这样条件的前2条记录
        select * from customers where c_salary > 4000 or c_age < 29 limit 2;
        
    4、把customers表中,年龄大于等于25岁,并且地址是北京或者上海,这样的人的工资上调15%
       update customers set c_salary=c_salary*1.15 where c_age >= 25 and c_city in ("Beijing","Shanghai");
                
    5、把customers表中,城市为北京的顾客,按照工资降序排列,并且只返回结果中的第一条记录
       select * from customers where c_city="Beijing" order by c_salary desc limit 1;
                
    6、选择工资salary最少的顾客的信息
       select * from customers where c_salary = (select min(c_salary) from customers);
                    
    7、找到工资大于5000的顾客都买过哪些产品的记录明细
       select * from orders where o_id in (select c_id from customers where c_salary > 5000);
                    
    8、删除外键限制
       1、show create table orders;  
       2alter table orders drop foreign key orders_ibfk_1;
                    
    9、删除customers主键限制
       1、删除自增长属性
        alter table customers modify c_id int;
       2、删除主键限制
        alter table customers drop primary key;
    
    10、增加customers主键限制c_id
       alter table customers add primary key(c_id);

    二、

    select user_id,count(*) as plNum from comment group by user_id order by plNum desc limit 10;

    注意:

    一.第二题的count(*)也可以用count(user_id)代替,作用一样,都是取各个user_id对应记录的个数(行数),但是count(*)的效率更高

    二.group by之后的字段名必须要为select之后的字段名

    三.如果select之后的字段没有在group by语句之后,则必须要对该字段进行聚合处理(聚合函数)(

                                  avg(字段名) : 求字段的平均值
                                  sum(字段名) : 求和
                                  max(字段名) : 求最大值
                                  min(字段名) : 求最小值
                                  count(字段名):统计该字段记录的个数

                                  )

  • 相关阅读:
    删除链表中的一个节点
    链表系列面试题1
    线程的5种状态
    红黑树 实现
    Java的SPI机制浅析与简单示例
    socket原理
    rabbitmq简单介绍
    MongoTemplate操作mongodb
    RJava配置
    浅析前后台分离
  • 原文地址:https://www.cnblogs.com/hooo-1102/p/10773923.html
Copyright © 2011-2022 走看看