美文网首页
mysql-纪录级别操作

mysql-纪录级别操作

作者: 戏之地 | 来源:发表于2017-02-21 15:14 被阅读31次

    增加记录

    insert [into] 
    tab_name (field1,filed2,.......) 
    values (value1,value2,.......);
    
    create table employ_new(
         id int primary key auto_increment,
         name varchar(20) not null unique,
         birthady data
         salary float(7,2)
    )
    insert into 
    employee_new (id,name,birthday,salary) 
    values  (1,'yuan','1990-09-09',9000);
    ----------------------------------------------
    insert into 
    employee_new values  (2,'alex','1989-08-08',3000);
    //insert可以插入id相应的字段,然后id以插入的值继续增加
    
    -- 插入多条数据,只需在后面累加就可以了
    insert into employee_new values
    (4,'alvin1','1993-04-20',3000),
    (5,'alvin2','1995-05-12',5000);
    -- 用set插入
    insert into employee_new set id=12,name="value";
    

    修改表记录

    update tab_name set field1=value1,field2=value2,......[where 语句]
    UPDATE语法可以用新值更新原有表行中的各列。
    SET子句指示要修改哪些列和要给予哪些值。
    WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
    
    update employee_new set salary = salary+2000 where name = "A" and gender="女"
    

    删除表记录

    delete from tab_name [where ....]
    delete from employee_new  where name= "女"
    # 删除表中的全部数据
    delete from employee
    使用truncate删除表中记录。
    truncate table emp_new;
    truncate指将表中的记录清空,然后生成一个具有相同字段的表
    

    查询表记录

    (1) select [distinct] *|field1,field2,......   from tab_name
    -- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
    -- 表明确指定要查找的列,distinct用来剔除重复行。
    
    select distinct name,age from result_table;
    
    (2) select 也可以使用表达式,将选出来的数据用别名进行显示
    
    select name,JS+10,Python+10 from result_table;
    select name,JS +10 as JS成绩 from result_table
    
    (3) where 子句进行过滤查询
    select id,name,JS from Exam where JS > 90
    where中可以使用的比较运算符
    >   <   >=   <=   <>  != 
    between 80 and 100 值在80到100之间(包括)
    in(89,43) 选取值只能是89或者43
    like "jatrix%" %表示可以匹配多个字符 _只匹配一个字符
    逻辑运算符 and or not
    (4) order by 排定排序的列,排序的列可以是表中的列也可以是select 设置的别名,
    主要因为优先级的问题,select的执行顺序前于order by
    -- select *|field1,field2... from tab_name order by field [Asc|Desc]
    默认为降序
    select * from result order by JS
    # 排序的时候如果有一个成绩为null
    select name,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)) as 总成绩 
    from result where name like "a%" order by 总成绩 desc ;
    (5) group by
    group by 后面跟字段或者数字索引
    然后显示每个组的第一条数据 
    对成绩表按名字分组后,显示每一类名字的Django的分数总和>150的
    select name,sum(Django) from ExamResult group by name                                                  
    having sum(Django)>150;
    # group by name 后面的having限制的界定条件应用于已经分成的组
    对这些组来说,是否有组内全部Django总和大于150的组
    having 和 where的区别
    where只能在分组前筛选,having可以用在分组后筛选
    使用where的地方都可以用having进行替换
    having可以有聚合函数,但是where中就不能有
    (6) 聚合函数
    count函数:不统计null值的记录
    SUM(列名):统计一列,统计不统计null没有关系,都按0
    sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
    as 总成绩 from ExamResult;
    -- 统计一个班级JS成绩平均分
    select sum(JS)/count(*) from ExamResult ;
    -- 注意:sum仅对数值起作用,否则会报错。
    AVG
    select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))                                                         
    from ExamResult ;
    注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
    

    执行顺序

    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;成功
    select JS as JS成绩 from ExamResult group by JS成绩 having JS成绩 >80;成功
    select JS as JS成绩 from ExamResult order by JS成绩;成功
    select * from ExamResult as 成绩 where 成绩.JS>85;成功
    

    limit

    limint 1 只显示一个
    limint 2,2 跳过两条,显示两条 
    

    使用正则表达式进行查询

    select * from tb_name where emp_name REGEXP '^yu'

    select * from tb_name where emp_name REGEXP 'yu$'

    select * from tb_name where emp_name REGEXP 'm{2}'

    相关文章

      网友评论

          本文标题:mysql-纪录级别操作

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