zoukankan      html  css  js  c++  java
  • MySQL语句之数据的增删改查

    1、插入记录insert
    语法:INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);

    也可以一次性插入多条记录,每条记录之间用逗号分隔,语法如下:

    INSERT INTO tablename (field1, field2,……fieldn)
    VALUES
    (record1_value1, record1_value2,……record1_valuesn),
    (record2_value1, record2_value2,……record2_valuesn),
    ……
    (recordn_value1, recordn_value2,……recordn_valuesn);

    例如:mysql> insert into dept values(1,'tech'), (2,'sale'), (5,'fin'), (5,'dept5'), (6,'dept6');

    2、删除记录delete

    语法:DELETE FROM tablename [WHERE CONDITION]

    可以一次删除多个表的数据,语法如下:

    DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION]

    注意:如果from 后面的表名用别名,则delete 后面的也要用相应的别名,否则会提示语法错误。

    例如,将表emp 和dept 中deptno 为3 的记录同时都删除,命令如下:

    mysql> delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;

    3、更新记录update

    语法:UPDATE tablename SET field1=value1,field2=value2,……fieldn=valuen [WHERE CONDITION]

    例如:mysql> update emp set deptno=3 where ename='angel';

    可同时更新多个表中的数据,语法如下:

    UPDATE t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]

    例如:mysql> update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;

    4、查询记录select

    语法:SELECT * FROM tablename [WHERE CONDITION]

    (1)查询不重复的记录distinct

    mysql> select distinct deptno from emp;

    (2)条件查询where

    mysql> select * from emp where deptno=2;

    (3)排序order by和限制limit

    排序:升序asc,降序desc,默认不写是asc

    例如,按照部门升序,薪水降序排列,命令如下:

    mysql> select * from emp order by deptno,sal desc;

    限制:SELECT ……[LIMIT offset_start,row_count]

    例如,按照薪水升序,显示前两条记录,命令如下:

    mysql> select * from emp order by sal limit 2;

    如果要显示emp 表中按照sal 排序后从第二条记录开始,显示3 条记录:

    mysql> select * from emp order by sal limit 1,3;

    limit 经常和order by 一起配合使用来进行记录的分页显示。

    (4)聚合

    语法:SELECT [field1,field2,……fieldn] fun_name
    FROM tablename
    [WHERE where_contition]
    [GROUP BY field1,field2,……fieldn
    [WITH ROLLUP]]
    [HAVING where_contition]

    对其参数进行以下说明:

    fun_name 表示要做的聚合操作,也就是聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。

    GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by 后面。

    WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。

    HAVING 关键字表示对分类后的结果再进行条件的过滤。

    注意:having 和where 的区别在于having 是对聚合后的结果进行条件的过滤,而where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having 进行再过滤。

    例如,要emp 表中统计公司的总人数:mysql> select count(1) from emp;

    要统计各个部门的人数:mysql> select deptno,count(1) from emp group by deptno;

    既要统计各部门人数,又要统计总人数:mysql> select deptno,count(1) from emp group by deptno with rollup;

    统计人数大于1 人的部门:mysql> select deptno,count(1) from emp group by deptno having count(1)>1;

    最后统计公司所有员工的薪水总额、最高和最低薪水:mysql> select sum(sal),max(sal),min(sal) from emp;

    (5)表连接

    从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。

    我们最常用的是内连接。

    例如,查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp 和dept 中,因此,需要使用表连接来进行查询:

    mysql> select ename,deptname from emp,dept where emp.deptno=dept.deptno;

    外连接有分为左连接和右连接,具体定义如下:

      左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。

      右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。

    例如,查询emp 中所有用户名和所在部门名称:

    mysql> select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

    mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;

    (6)子查询:用于子查询的关键字主要包括in、not in、=、!=、exists、not exists 等。

    例如:mysql> select * from emp where deptno in(select deptno from dept);

    可转化为表连接:mysql> select emp.* from emp ,dept where emp.deptno=dept.deptno;

    (7)记录联合(用union 和union all 关键字)

    语法:SELECT * FROM t1
    UNION|UNION ALL
    SELECT * FROM t2
    ……
    UNION|UNION ALL
    SELECT * FROM tn;

    UNION 和UNION ALL 的主要区别是UNION ALL 是把结果集直接合并在一起,而UNION 是将UNION ALL 后的结果进行一次DISTINCT,去除重复记录后的结果。

    例如,将emp 和dept 表中的部门编号的集合显示出来:

    mysql> select deptno from emp
           -> union all
           -> select deptno from dept;

    如果希望将结果去掉重复记录后显示:

    mysql> select deptno from emp
           -> union
           -> select deptno from dept;

  • 相关阅读:
    Pyhton入门 笔记 第四天 Python的高级语法与用法
    Pyhton入门 笔记 第四天 正则表达式与JSON
    Pyhton入门 笔记 第三天 正则表达式与JSON
    Pyhton入门 笔记 第三天 面向对象 类
    Pyhton入门 练习 第三天 用循环输出小数点到某位
    Pyhton入门 笔记 第三天 函数
    Pyhton入门 笔记 第三天 包 模块 函数与变量作用域
    Pyhton入门 笔记 第二天 分支 循环 条件与枚举
    JS 获取地址栏参数
    文件的读取和写入
  • 原文地址:https://www.cnblogs.com/angel_kiki/p/6394931.html
Copyright © 2011-2022 走看看