MYSQL 必知必会

基础知识

使用MySQL基本指令

  • use database1; 切换数据库
  • SHOW DATABASES; 显示所有数据库
  • SHOW TABLES;
  • SHOW COLUMNS FROM customers ; === DESCRIBE CUSTOMERS;

limit关键字:

  • Limit 3,4 ==LIMIT 4 OFFSET 3; 从行3开始,返回4行;检索出来的第一行是行0

ORDER BY

  • 通常ORDER BY子句中使用的列将是为显示所选择的列。但是,实际上并不一定,用非检索的列排序数据是完全合法的。
  • 默认是升序
  • 对于文本性的数据进行排序时,A被视为与a相同,这是MySQL(和大多数数据库管理系统)的默认行为。但是,许多数据库管理员能够在需要时改变这种行为。

使用IN操作的优点

  • 语法更清楚且直观
  • 一般比OR操作符清单执行更快
  • 最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

MySQL中NOT

  • 支持对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

SQL中的谓词

  • 谓词与函数的区别:对于通常的函数来说,返回值有可能是数字、字符串或者日期等,但是谓词的返回值都是真值(true/false/unknown)。

  • LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS

    • LIKE——字符串的部分一致查询(模糊查询)

      1
      2
      3
      4
      5
      6
      7
      ①前方一致select * from user where username like 'aaa%';

      ②中间一致select * from user where username like '%aaa%';

      ③后方一致select * from user where username like '%aaa';

      %可以匹配0个字符。
    • BETWEEN(and)——范围查询

用通配符的技巧

  • 不要过度使用通配符,注意通配符的位置。

MySQL的正则表达式

  • REGEXP和LIKE的区别:LIKE匹配整个串而REGEXP匹配子串

  • 不区分大小写,为区分大小写,可使用BINARY关键字

    1
    WHERE prod_name REGEXP BINARY 'JetPack .000'
  • 进行OR匹配 ‘|’

  • 匹配几个字符之一 [123] 表示匹配1或2或3,与1|2|3不同,前者是[1|2|3]的缩写

    1
    2
    3
    4
    SELECT prod_name
    From products
    WHERE prod_name REGEXP '[123] Ton'
    ORDER BY prod_name;
  • 匹配范围 [1-3]

    1
    2
    3
    4
    SELECT prod_name
    From products
    WHERE prod_name REGEXP '[1-3] Ton'
    ORDER BY prod_name;
  • 匹配特殊字符,如 . [] | () ,用\\为前导,如\\.表示查找. \\也用来引用元字符

  • 匹配字符类

    image-20200618114655099

匹配多个实例

  • 对匹配的数目进行更强的控制

    image-20200618114850214

    匹配定位符

  • 为了匹配特定位置的文本

    image-20200618115227926

    • ^的双重用途:

      • 在集合中[],用它来否限定该集合

      • 用来指串的开始处

创建计算字段

拼接:

  • 多数DBMS使用+或者||来实现拼接,MySQL则使用Concat()函数来实现。

    1
    2
    3
    4
    5
    Select Concat(vend_name,'(',vend_country,')')
    From vendors
    ORDER BY vend_name;

    Return: ACME(USA)
  • RTrim()函数: 删除数据右侧多余的空格。如RTrim(vend_name)

  • LTrim()函数:去掉串左边的空格

  • Trim()函数:去掉串左右两边的空格

  • 取列的别名

使用数据处理函数

  • 以下的函数都是大多数SQL实现支持的。

文本处理函数:

  • 其中SOUNDEX()考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。

image-20200620111648327

image-20200620111657883

日期和时间处理函数

  • MySQL使用的日期格式,不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为格式yyyy-mm-dd。

image-20200620112323444

数值处理函数

  • 在主要DBMS的函数中,数值函数是最一致最统一的函数

    image-20200620112642455

汇总数据

聚集函数

image-20200620112834932

  • Distinct关键字:后面必须使用列名。

分组数据

  • 使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值

    1
    2
    3
    SELECT vend_id,COUNT(*) AS num_prods
    FROM products
    GROUP BY vend_id WITH ROLLUP;
  • WHERE过滤行,HAVING过滤分组

联结表

  • 笛卡尔积:由没有联结条件的表关系返回的结果

  • 内部联结,也称为等值联结

    • ANSI SQL规范首选INNER JOIN语法,而不是=

      1
      2
      3
      SELECT vend_name,prod_name,prod_price
      FROM vendors INNER JOIN products
      ON vendors.vend_id = products.vend_id;

乱七八糟

  • 没有主键,更新或删除表中的特定行很困难,因为没有安全的方法保证只涉及相关的行。
  • MySQL在执行匹配时默认不区分大小写。根据MySQL的配置方式,搜索可以是区分大小写的。
  • 可移植的:能运行在多个系统上的代码
  • 可伸缩性:能够适应不断增加的工作量而不失败。

���ı���:MYSQL 必知必会

��������:luyiqu

����ʱ��:2020��07��15�� - 16:23:07

������:2020��07��15�� - 16:31:48

ԭʼ����:https://luyiqu.github.io/2020/07/16/MYSQL-必知必会/

���Э��: ����-����ҵ��ʹ��-��ֹ���� 4.0 ���� ת���뱣��ԭ�����Ӽ����ߡ�

0%