mysql(三)

来源:互联网 发布:淘宝认证照片 编辑:程序博客网 时间:2024/05/21 06:21

-- 1.增加一条记录insert
      /*insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);*/

-- 插入多条数据

    /*insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......),           (value1,value2,.......),

...

(value1,value2,.......);*/

 -- set插入: insert [into] tab_name set 字段名=值

-- 2.修改表记录  update tab_name set field1=value1,field2=value2,......[where 语句]
    /*      UPDATE语法可以用新值更新原有表行中的各列。
            SET子句指示要修改哪些列和要给予哪些值。
            WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/

-- 3.删除表纪录
     delete from tab_name [where ....]
        /*    如果不跟where语句则删除整张表中的数据
            delete只能用来删除一行记录
            delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
            TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。

此种方式删除的数据不能在事务中恢复。*/

-- 删除表中所有记录。
                delete from tab_name;-- 注意auto_increment没有被重置:

alter table employee auto_increment=1;
                -- 使用truncate删除表中记录。
                truncate table tab_name;

==================================================================

-- 查询表达式
   SELECT *|field1,filed2 ...   FROM tab_name
                  WHERE 条件
                  GROUP BY field
                  HAVING 筛选
                  ORDER BY field
                  LIMIT 限制条数

-- (1)select [distinct] *|field1,field2,......   from tab_name
            -- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
            -- 表明确指定要查找的列,distinct用来剔除重复行。

-- (2)select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名

-- (3)使用where子句,进行过滤查询。

          -- where字句中可以使用:
                     -- 比较运算符:
                        > < >= <= <> !=
                        between 80 and 100 值在10到20之间
                        in(80,90,100) 值是10或20或30
                        like 'yuan%'
                        /*
                        pattern可以是%或者_,
                        如果是%则表示任意多字符,此例如唐僧,唐国强
                  如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个
字符:__
                        */


                    -- 逻辑运算符
                        在多个条件直接可以使用逻辑运算符 and or n

-- (4)Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。
              -- select *|field1,field2... from tab_name order by field [Asc|Desc]
              -- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。


-- (5)group by 分组查询:

-- 注意,按分组条件分组后每一组只会显示第一条记录
            -- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。 

/*
                   having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
                     <1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛    选;
                     <2>使用where语句的地方都可以用having进行替换
                     <3>having中可以用聚合函数,where中就不行。
                   */

 -- GROUP_CONCAT() 函数

GROUP_CONCAT([DISTINCT] expr [,expr ...] 

[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]

[,col_name ...]] [SEPARATOR str_val])

-- (6)聚合函数: 先不要管聚合函数要干嘛,先把要求的内容查出来再包上

聚合函数即可。
                 --   (一般和分组查询配合使用)
        --<1> 统计表中所有记录
            -- COUNT(列名):统计行的个数

 -- SUM(列名):统计满足条件的行的内容和

--AVG(列名):平均数

--MAX,MIN(列名)



==================================================================================================================================


     1、 创建成绩表,字段包括:学生姓名,语文成绩,数学成绩,英语成绩
create table score(
id int primary key auto_increment,
              name varchar(20),
             culture float,
             mathematics float,
              english float)


     向表中插入多条数据;
insert into score(name,culture,mathematics,english) values
                    ('egon',89,99,67),
                   ('alex',95,85,100),
                   ('wupeiqi',92,93,94),
                   ('yuan',88,93,88),
                    ('jack',96,97,95);




     查询:


           (1) 查询所有学生的数学成绩和总成绩
select name,mathematics,culture+mathematics+english as 总成绩 from score;
             (2)   查询所有学生的语文和数学成绩和,按从高到低排序
select name,mathematics+culture from score order by mathematics+culture desc;
           (2) 查询班级总成绩最高的学生姓名
select name, mathematics+culture+mathematics+english from score where mathematics+culture+mathematics+english=(SELECT Max(mathematics+culture+mathematics+english) from score);
           (3) 查询班里所有姓李学生的总成绩最高的姓名


select name from score where  mathematics+culture+mathematics+english=(select max(mathematics+culture+mathematics+english) from score where name like'li%');


2、创建一张某超市的购物表,字段包括:商品名,购物价格,商品生产日期,商品分类;


     向该表中插入多条数据;




     查询:(1)每一类商品的总价格
select class,sum(price) from supermarket group by class;
                (2)统计每类商品各有多少
select class,count(price) from supermarket group by class;
                (2)统计水果花了多少钱(两种方式实现)
select class,sum(price) from supermarket group by class limit 1,1;
select class,sum(price) from supermarket where class='A' group by class;
                (3)统计购买的2017-01-12日生产的商品中价格最贵的商品(插入的数据中包括2017-01-12生产的商品)
select goods ,price from supermarket where price= (select max(price) from supermarket where date='2017-1-12');


                (4)统一购买商品的总价格
select sum(price) from supermarket;