• mysql全家桶(二)数据操作


    一、数据操作
    1、增
    #新增
    insert into 表名(字段列表) values(值列表);
    INSERT INTO table_name ( field1, field2,...fieldN )
    VALUES
    ( value1, value2,...valueN );

    #蠕虫复制 (优点:快速复制数据,测试服务器压力)
    insert into 表名1_插入 select (字段列表) from 表名2_复制;
    #当主键与表中数据重复时执行更新
    insert into 表名(字段列表) values(值列表) on duplicate key update 字段1=值1,字段n=值n;
    2、删除
    #删除
    delete from 表名[删除条件];
    delete from 表名 [where条件] [order by 字段名 asc|desc] [limit];

    #例如:
    delete from user where age<1;--删除age小于1数据
    3、修改
    #修改
    update 表名 set 字段1=新值1,字段n=新值n [修改条件];
    update 表名 set 字段1=值1,字段n=值n [where条件] [order by 字段名 asc|desc] [limit];

    #例如:
    update user set age=100 where id=1;
    4、单表查询
    #查询
    select [select选项] *|字段列表 [as 字段别名] from 表名 [where子句][group by子句][having子句][order by子句][limit子句];
    select选项: 系统在查询到相关数据之后,如何显示.

    select选项的两个值:all: 默认值,保留所有的查询结果、distinct: 去重,去掉重复的查询结果.

    having子句是配合group by 使用的相当于where

    *as
    #关键字 as:可以为每个列使用别名. 适用于简化列标识,避免多个列标识符重复. 也可省略as.
    #例如:
    select (Math+English+Chinese) as sum from score;
    #省略as
    select (Math+English+Chinese)/3 avg from score;
    *虚拟表的名称:dual :
    Mysql中执行select语句在适当的时候会自动创建一个虚拟表,官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用。

    #例如
    select now() from dual;
    #可省略
    select now();
    *where
    where子句 (条件查询)

    从from获得的数据源中进行查询

    整型: 1表示真(返回查询记录);0表示假(不返回记录)

    表达式由运算符和运算数组成.

    运算数: 变量(字段)、值、函数返回值

    *运算符
    算术运算符

    MySQL 支持的算术运算符包括:

    运算符 作用
    + 加法
    - 减法
    * 乘法
    / 或 DIV 除法
    % 或 MOD 取余
    在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。

    比较运算符

    SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。

    符号 描述 备注
    = 等于  
    <>, != 不等于  
    > 大于  
    < 小于  
    <= 小于等于  
    >= 大于等于  
    BETWEEN 在两值之间 >=min&&<=max
    NOT BETWEEN 不在两值之间  
    IN 在集合中  
    NOT IN 不在集合中  
    <=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
    LIKE 模糊匹配 通配符; _ :代表任意的单个字符; % :代表任意的字符
    REGEXP 或 RLIKE 正则式匹配  
    IS NULL 为空  
    IS NOT NULL 不为空
    逻辑运算符

    逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。

    运算符号 作用
    NOT 或 ! 逻辑非
    AND 逻辑与
    OR 逻辑或
    XOR 逻辑异或
    位运算符

    位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

    运算符号 作用
    & 按位与
    | 按位或
    ^ 按位异或
    ! 取反
    << 左移
    >> 右移
    运算符优先级

    最低优先级为: :=。

    最高优先级为: !、BINARY、 COLLATE。

    *group by
    group by 字段/别名 [排序方式] 分组后排序: asc 升序(默认),desc 降序

    统计函数需配合group by使用:

    count 返回不同的非NULL统计值 count(*)、count(字段)

    sum 求和; max 求最大值; min 求最小值; avg 求平均值

    #例如:
    select count(*) as total from student;

    #查询各个班级总成绩,分组班级降序.
    select class, sum(score) as sum from student group by class desc;

    #查询各个班级最高成绩,分数要大于80,分组班级升序.
    select id,class, max(score) as max from student where score>80 group by class;
    *having 子句 (条件查询)
    类似where功能、用法相同,执行时机不同.

    本质区别:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选.

    where不可以使用统计函数. 一般需用统计函数配合group by才会用到having

    #例如(查询各个班级最低成绩,分组班级,最低分数大于80)

    #错误
    select class, min(score) as min from student where min(score)>80 group by class;

    #正确
    select class, min(score) as min from student group by class having min(score)>80;

    *order by子句 (排序)
    order by 字段1[asc|desc],字段n[asc|desc]

    排序: asc 升序(默认),desc 降序

    #例如(查询score大于80,排序score升序和name降序)
    select * from student where score >80 order by score,name desc;
    *limit 子句(限制查询结果数量)
    limit offset,length 语法解析: offset是指偏移量,默认为0; length是指需要显示的记录数.

    分页示例说明: $page = 3;

    //第三页 $pageSize = 10;

    //页面显示10条记录 $offset = ($page - 1) * $pageSize;

    //偏移量为20 limit $offset,$pageSize

    //实现分页 偏移20,显示10

    #例如(查询score大于80,排序score升序和name降序,偏移量为1,显示3条记录)
    select * from student where score >60 order by score,name desc limit 1,3;
    5、多表查询
    *级联查询(联合查询 关键字:union)
    联合查询:就是将多个查询结果进行纵向上的拼接. (select语句2的查询结果放在select语句1查询结果的后面)

    #级联查询
    select语句1
    union [all | distinct]
    select 语句2
    union [all | distinct]
    select 语句n
    *连接查询
    +交叉连接

    #交叉连接 cross join(一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录包含两个表的所有的字段.结果上看,就是对两张表做笛卡尔积,有n1*n2条记录.)

    select *|字段列表 from 表名1 cross join 表名2;
    +内连接(如果数据不存在,不会出现在连接结果中)

    数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存. 如果没有匹配上,数据没有意义不会保存. 通常就是两张表中存在相同的某个字段.(项目中通常是关联主键ID) using() 用法连接两表公共字段. 例如:using(ID)

    #例如
    select student.*, teacher.class as t_class, teacher.name as t_name from student join teacher on student.class = teacher.class;
    查询结果

    +外连接 outer join(如果数据不存在,也会出现在连接结果中.)

    #左外连接 left join(如果数据不存在,左表记录会出现,而右表为null填充)
    select *|字段列表 from 左表 left [outer] join 右表 on 左表.字段 = 右表.字段 [五子句];

    #右外连接 right join(如果数据不存在,右表记录会出现,而左表为null填充)
    select *|字段列表 from 右表 right [outer] join 左表 on 右表.字段 = 左表.字段 [五子句];

    #例如
    select student.*, teacher.class as t_class, teacher.name as t_name from student left join teacher on student.class = teacher.class;
    查询结果

    +自然连接 natural join(自动判断连接条件完成连接.)

    #自然内连接 natural inner join(自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.)
    select *|字段列表 from 左表 natural [inner] join 右表;


    #自然外连接 natural outer join(自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.)

    #自然左外连接 natural left join
    select *|字段列表 from 左表 natural left [outer] join 右表;

    #自然右外连接 natural right join
    select *|字段列表 from 右表 natural right [outer] join 左表;
    *子查询
    子查询(内查询)在主查询(外查询)之前一次执行完成,子查询的结果被主查询使用. 使用子查询需用括号包裹.

    #单一值: 返回单行单列的子查询,也叫标量子查询.
    select max(score) as max from student;

    #一列: 返回单列的子查询,也叫列子查询.
    select name from student;

    #一行: 返回一行的子查询,也加行子查询.
    select *|字段列表 from 表名 where(字段1,字段n)=(行子查询结果)

    #多行多列: 返回多行多列的子查询,也叫表子查询.
    例如:(查询B班和C班,排序score字段升序)
    select * from student where class in ('B','C') order by score;

    #exists(主要作用就是判断后面的select语句有没有查询到数据.结果为true有返回数据,否则就是false.)

    select exists (select * from student where name ='uzi');
     

     
    ---------------------

  • 相关阅读:
    兼容ie10及以上css3加载进度动画
    MySQL的安装
    VSFTPD+MYSQL+PAM
    58.省市联动-json
    省市联动
    56.检验特殊字符
    55.全选2
    54.截取字符串的思想实现输入框字数限制
    网络截取文件名
    lastPathComponent的功能
  • 原文地址:https://www.cnblogs.com/ly570/p/11155036.html
Copyright © 2020-2023  润新知