zoukankan      html  css  js  c++  java
  • MySQL基础(1):基本语法

    记录一些可能会用到但又容易忘记的语法。

    一、数据增删改

    1、新增
      (1)单条数据:INSERT INTO 表名 (列1,列2,...) VALUES (值1,值2,....);
      (2)批量插入:INSERT INTO 表名 (列1,列2,...) VALUES (值1,值2,....),(值1,值2,....),(值1,值2,....);
      (3)插入子查询:INSERT INTO 表名 (列1,列2,...) SELECT 值1,值2 ... ;
    2、修改
      (1)单表:UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2, ...... WHERE 筛选条件;
      (2)多表级联修改:
        UPDATE 表1 别名
        inner/left/right join 表2 别名 ON 连接条件
        SET 列1 = 新值1, 列2 = 新值2...... WHERE 筛选条件; 3、删除   (1)单表:delete from 表名 【where 筛选条件】【limit 条目数】   (2)多表删除:
        delete 表1别名, 表2别名 from 表1 别名
        inner/left/right join 表2 别名 ON 连接条件 WHERE 筛选条件; 4、删除表中全部数据    truncate table 表名;   (1)truncate删完自增长列值从1开始   (2)truncate不能回滚,delete可以回滚

    二、SQL执行顺序

        

      (1)order by,如按多个字段排序,先按第一个字段排序,排序相同的部分,再按第二个字段排序

      (2)group by,按多个字段分组,则多个字段一致的表示一组。

               与oracle不同,oracle中,select只能查出现在group by表达式后面的字段或使用分组函数;Mysql能查不在group by后的字段,但不按group by分组的数据相当于只是表中一条数据的信息,其实没有意义。

      (3)having,放group by后,对分组后的查询结果集再筛选一次

      (4)limit,放查询语句最后,分页公式:要显示的页数page,每页条目数size

        limit (page-1)*size, size

      (5)MYISAM存储引擎下,count(*)效率高。INNODB存储引擎下,count(*)和count(1)效率差不多,一般都是用count(*)

    三、连接

    注意内连接与外连接的区别,内连接是两表的交集部分,外连接是主表全部数据,子表未匹配部分用null。

    1、内连接:取两表交集

      select * from  表1,表2  where 连接条件

      或【inner】join on 连接条件

       

      等值连接、非等值连接(筛选条件不是用=,而是用范围)、自连接(如取上级数据)

    2、外连接:

    (1)左外:left join,左为主表,展示主表所有数据,子表未匹配部分用null

       

    (2)右外:right join,右为主表

    (3)全外:outer join

    全外连接=内连接结果 + 表1中有但表2没有的 + 表2中有但表1没有的

       

    3、交叉连接:cross join,两表进行笛卡尔乘积

       

    4、联合查询

      union:查询结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致,将多条查询语句的结果合并成一个结果

      语法:

        查询语句1 union

        查询语句2 union ....

      (1)要求多条查询语句的查询列数是一致的,且查询列的类型和顺序一致

      (2)union关键字默认去重,union all会包含重复项

      

    四、子查询

    子查询先执行,主查询的条件用到了子查询的结果

    1、可搭配分组函数放在select后(仅支持一行一列)

      

    2、可放在from或exists后(多行多列),当虚拟表使用,需要起别名

      

    3、可放where或having后,

      一行一列的搭配分组函数 > < >= <= = <>

      一列多行的搭配in

      一行多列的有局限性,要求各字段使用的比较操作符是一样的,如都是用 = 、>、 <

       

    五、常用函数

    1、“+”:不用作字符串拼接,仅用做运算符,其他值+null还是null

    2、CONCAT(value1, value2);

    3、IFNULL(value, 0);

    4、length(str),获取参数字节数,utf8中字母1个字节,汉字3个字节

    5、substring(str, index, len) 截取str,从index开始,截取len长度,索引从1开始

    6、instr(str, substr),返回子串第一次出现的下标,找不到返回0,索引从1开始

    7、replace(str, from_str, to_str),把from_str全替换为to_str

    8、replace into具备替换拥有唯一索引或者主键索引重复数据的能力,也就是如果使用replace into插入的数据的唯一索引或者主键索引与之前的数据有重复的情况,将会删除原先的数据,然后再进行添加。 

      REPLACE INTO users (id,name,age) VALUES(123, ‘chao’, 50);

    9、数值型函数

      ROUND(1.567),四舍五入

      ROUND(1.567,2),保留2位小数

      CEIL(X)、FLOOR(X),向上、向下取整

      MOD(10,3),取余

      RAND(),获取随机数,返回0-1间的小数

    10、日期型转换

      STR_TO_DATE(time, '%Y-%m-%d'),字符串转日期

      DATE_FORMAT(time, '%Y-%m-%d'),日期转字符串

      DATEDIFF(NOW(), '2018-9-1'),两个日期相差天数

        

    11、加密

      PASSWORD(str),返回字符的密码形式

      MD5(str),返回字符串MD5加密形式

    12、运算符:   

    (1)>  <  =  !=  <>  >=  <=        

    (2)and  or  not       

    (3)"like"、"between and"、“in” 、“is null”   

      like结合通配符,默认不区分大小写;

      % 任意多个字符,_ 占单个字符;

       转义符,也可以通过escape声明转义字符;

      between  and会包含零界值;

      in不能结合通配符使用,效率和or差不多;

      is null仅仅可判断null值,<=>既可判断null又可以判断普通数值;

    13、流程控制函数

    (1)IF(10<5, '大', ‘小’)

    (2)case,两种方式

    14、分组函数

      sum、avg、max、min、count,这些都会忽略null值,可以和distinct搭配

  • 相关阅读:
    WF编译报错
    VS2012编译错误信息,错误列表却没显示
    SQL Server带游标的SQL
    SQL Server创建LinkServer
    ASP.NET自定义控件加载资源WebResource问题
    sqlserver 增加用户并分配权限
    Java for C#程序员
    laravel安装
    Convert Geometry data into a Geography data in MS SQL Server
    linux安装ruby
  • 原文地址:https://www.cnblogs.com/zjxiang/p/9112922.html
Copyright © 2011-2022 走看看