zoukankan      html  css  js  c++  java
  • mysql对表中记录的操作


    增:插入记录

    CREATE table employee_new(
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20) NOT NULL UNIQUE ,
    birthday VARCHAR(20),
    salary FLOAT(7,2)
    )CHARACTER SET utf8;

    INSERT INTO employee_new(name, birthday, salary) VALUES ('yuan','1990-09-09',9000),
    ('alex','1989-08-08',3000),
    ('xialv','1988-07-07',1000),
    ('alvin1','1993-04-20',3000),
    ('alvin2','1995-05-12',5000);

    INSERT INTO employee_new SET id=12,name="alvin3";
    注意:表中数据三条,id分别为1,2,3,突然插入一个id=7,那么下次作为主键的字增长的id会从几开始增长呢?(从7开始)

    删:删除表记录
    DELETE from employee_new WHERE id=12;
    如果不跟where语句则删除整张表中的数据
    delete只能用来删除一行记录
    delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
    TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表.此种方式删除的数据不能在
    事务中恢复.
    DELETE from employee_new WHERE name="alex";
    DELETE FROM employee_new;删除表中所有记录
    truncate employee_new;删除表中所有记录
    改:修改记录表

    UPDATE employee_new SET birthday='1989-10-24' WHERE id=1;
    UPDATE employee_new SET salary=salary+1000 WHERE name="yuan";

    UPDATE 语法可以用新值更新原有表行中的各列
    SET 字句指示要修改哪些列和要给予哪些值
    WHERE 字句指定应更新哪些行,如果没有 WHERE 字句,则更新所有行


    查询表达式:

    SELECT *|field1,field2,... FROM tab_name
    WHERE 条件
    GROUP BY field
    HAVING 筛选
    ORDER BY field 排序 DESC(递减) ASC(递增)
    LIMIT 限制条数

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

    --查询表中所有学生的信息
    SELECT * FROM ExamResult;
    --查询表中所有学生的姓名和对应的英语成绩
    SELECT name,JS FROM ExamResult;
    --过滤表中重复数据
    SELECT DISTINCT JS,name FROM ExamResult;
    (2) SELECT 也可以使用表达式,并且可以使用:字段 AS 别名,或者:字段 别名。
    -- 在所有学生分数上加10分特长分显示。
    SELECT name,JS+10,Django+10,OpenStack+10 FROM ExamResult;
    -- 统计每个学生的总分。
    SELECT name,JS+Django+OpenStack FROM ExamResult;
    -- 使用别名表示学生总分。
    SELECT name,JS+Django+OpenStack 总分 FROM ExamResult;
    (3) 使用 WHERE 字句,进行过滤查询
    -- 查询姓名为XXX的学生成绩
    SELECT * FROM ExamResult WHERE name='yuan';
    -- 查询英语成绩大于90分的同学
    SELECT id,name,JS FROM ExamResult WHERE JS>90;
    -- 查询总分大于200分的所有同学
    select name,JS+Django+OpenStack as 总成绩 from
    ExamResult where JS+Django+OpenStack>200 ;
    -- where字句中可以使用:
    比较运算符:
    > < >= <= !=
    BETWEEN 80 AND 100 值在80到100之间
    IN(80,90,100) 值是80或90或100
    LIKE 'yuan%' 匹配以yuan开头的,%表示任意多字符,_ 表示一个字符。两个字符用两个下划线__
    -- 逻辑运算符
    在多个条件直接可以使用逻辑运算符 AND OR NOT
    (4) ORDER BY 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。
    SELECT *|field1,field2... FROM tab_name order by field [Asc|Desc]
    -- Asc 升序、Desc 降序
    -- 对总分排序按从高到低的顺序输出
    select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
    总成绩 from ExamResult order by 总成绩 desc;
    --ifnull(JS,0) 如果JS是空,就记为0

    -- 对姓李的学生成绩排序输出
    SELECT name,(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)) 总成绩 FROM ExamResult
    WHERE name LIKE 'a%'
    ORDER BY 总成绩 DESC ;

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

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

    --GROUP_CONCAT() 函数
    select id,group_concat(name) from aa group by id; 
    --以id分组,把name字段的值打印在一行,逗号分隔(分隔)
    ------+--------------+--------+------------+--------------+
    | id | product_name | price | born_date | class |
    +------+--------------+--------+------------+--------------+
    | 1 | 苹果 | 20.00 | 2017-06-12 | 水果 |
    | 1 | 香蕉 | 80.00 | 2017-01-02 | 水果 |
    | 2 | 水壶 | 120.00 | 2017-06-12 | 电器 |
    | 0 | 被罩 | 70.00 | 2017-01-12 | 床上用品 |
    | 2 | 音响 | 420.00 | 2017-01-12 | 电器 |
    | 0 | 床单 | 55.00 | 2017-06-12 | 床上用品 |
    | 1 | 草莓 | 34.00 | 2017-01-12 | 水果 |
    +------+--------------+--------+------------+--------------+
    select id,group_concat(name) from aa group by id; 
    +------+----------------------------+
    | id | group_concat(product_name) |
    +------+----------------------------+
    | 0 | 被罩,床单 |
    | 1 | 苹果,香蕉,草莓 |
    | 2 | 水壶,音响 |
    +------+----------------------------+

    select id,group_concat(product_name),group_concat(born_date) from order_menu group by id;
    +------+----------------------------+----------------------------------+
    | id | group_concat(product_name) | group_concat(born_date) |
    +------+----------------------------+----------------------------------+
    | 0 | 被罩,床单 | 2017-01-12,2017-06-12 |
    | 1 | 苹果,香蕉,草莓 | 2017-06-12,2017-01-02,2017-01-12 |
    | 2 | 水壶,音响 | 2017-06-12,2017-01-12 |
    +------+----------------------------+----------------------------------+

    (6) 聚合函数:一般和分组查询配合使用
    <1>统计表中所有记录:
    -- COUNT(列名):统计行的个数
    eg:--统计总分数大于280的人数有多少?
    SELECT COUNT(name) FROM student WHERE (ifnull(JS,0)+ifnull(Django,0)+ifnull(Datebase,0))>280;
    --注意:count(*)统计所有的行,count(字段)不统计null的值

    <2>统计满足条件的行的内容和
    -- SUM(列名):统计满足条件的行的内容和
    -- 统计一个班级各科分别的总成绩
    select sum(JS) as JS总成绩,
    sum(Django) as Django总成绩,
    sum(OpenStack) as OpenStack from ExamResult;

    -- 统计一个班级各科的成绩总和
    select sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
    as 总成绩 from ExamResult;
    -- 统计一个班级JS成绩平均分
    select sum(JS)/count(*) from ExamResult ;

    -- 注意:sum仅对数值起作用,否则会报错。
    <3>求平均数
    -- AVG(列名):
    -- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
    select avg(ifnull(JS,0)) from ExamResult;
    -- 求一个班级总分平均分
    select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))

    <4>max() 和 min()
    -- 求班级最高分和最低分(数值范围在统计中特别有用)
    select Max(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)) 最高分 from ExamResult;
    select Min(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)) 最低分 from ExamResult;
    --注意:null 和 所有的数计算都得null,所以需要用ifnull将null转换为0. ifnull(JS,0)

    (7)重点:
    SELECT FROM WHERE GROUP BY HAVING ORDER BY
    --mysql在执行sql语句时的执行顺序:
    --from where select group by having order by
    -- 分析:
    select JS as JS成绩 from ExamResult where JS成绩 >70; ---- 不成功
    select JS as JS成绩 from ExamResult having JS成绩 >90; --- 成功
    (8) limit
    SELECT * from ExamResult limit 1;
    SELECT * from ExamResult limit 2,5;--跳过前两条显示接下来的五条纪录
    SELECT * from ExamResult limit 2,2;

    (9) 使用正则表达式查询
    SELECT * FROM employee WHERE emp_name REGEXP '^yu';

    SELECT * FROM employee WHERE emp_name REGEXP 'yun$';

    SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';













  • 相关阅读:
    Eclipse插件大全 (下)
    Eclipse插件大全 (上)
    Struts2学习笔记
    DisplayTag应用指南
    JFreeChart 2
    JFreeChart 1
    一对一直播app源码开发,多媒体消息发送优化方案
    仿比心视频聊天源码开发,网络节点数量和时延的关系
    一对一直播源码开发,保证实时性要从降低延迟下手
    小视频app源码凭什么成功出圈,守“江山”有多难?
  • 原文地址:https://www.cnblogs.com/guomeina/p/7236880.html
Copyright © 2011-2022 走看看