Mysql数据库

操作命令

  • 使用数据库

    USE databaseName;

  • 查看数据库或表

    SHOW databases;

    SHOW tables;

  • 查看列

    SHOW COLUMNS FROM tableName;

    DESCRIBE tableName

其他SHOW语句

  • 显示服务器状态信息

    SHOW STATUS;

  • 显示创建数据库或者表时使用的语句

    SHOW CREATE databaseName/tableName

  • 显示用户的权限

    SHOW GRANTS

  • 显示服务器错误或者警告信息

    SHWO ERRORS/WARNINGS

  • 其他

    HELP SHOW

检索语句

  • 检索单个、多个、所有列

    SELECT __ FROM tableName

  • 检索去重(作用于所有列)

    SELECT DISTINCT __ FROM tableName

  • 限制结果

    SELECT __ FROM tableName LIMIT 10;

    • 从行10开始之后的5行

      SELECT __ FROM tableName LIMIT 10,5;

  • 完全限定

    SELECT tableName.columnName FROM databaseName.tableName

排序检索

  • 按照单个、多个列排序

    order by A,B

  • 升序降序

    • 降序(从大到小)DESC 只应用于直接位于其前面的列名

      SELECT product_id, product_price, product_name

      FROM products order by product_price DESC, product_name;

    • 升序ASC(默认)

过滤

WHERE子句

SELECT product_id, product_price, product_name

FROM products WHERE product_price = 100;

where操作符
  • 空值检查

    WHERE product_price IS NULL

组合使用AND 、 OR

  • and优先级高于or

IN操作符

  • in (列表)相当于or

NOT操作符

通配符

  • 缺点:慢

LIKE

  • 一个谓语

百分号(%)通配符

  • like表示任何字符出现任意次数,区分大小写,非贪婪匹配
  • 可以在搜索模式中任意位置使用

SELECT id, name FROM products WHERE name LIKE 'jet%'

  • 表示任何位置包含jet的值

SELECT id, name FROM products WHERE name LIKE '%jet%

下划线(_)通配符

  • _总是匹配一个字符,不能多不能少

MySQL正则表达式

  • 默认不区分大小写

SELECT name from products WHERE name REGEXP '.1000' ORDER BY name;

  • ‘.’在正则中表示匹配任意一个字符

  • 区分大小写:REGEXP BINARY

    SELECT name from products WHERE name REGEXP BINARY ' JetPack .1000';

正则OR

SELECT price from products WHERE price REGEXP BINARY '1000|2000|3000';

字符之一

SELECT price from products WHERE price REGEXP BINARY '[0-9]';

特殊字符

  • 使用’\\‘转义

SELECT price from products WHERE price REGEXP BINARY '\\-';

特殊字符

匹配字符类

字符类 元字符

定位元字符

定位符

创建计算字段

  • 计算字段是运行时在SELECT语句内创建的

拼接字段

  • MySQL的不同之处
    • 多数DBMS使用+或者||实现拼接,MySQL则使用Concat()函数实现,因此SQL语句转换成MySQL语句时一定要将区别铭记于心

Concat()函数

SELECT Concat(name, '(', contry, ')') FROM vendors ORDER BY name;

RTrim()、LTrim()、Trim()

执行算术计算

SELECT id,

quantity,

price,

quantity*price AS sum_price

FROM orderitems

WHERE order_num = 20005;

分组数据

  • GROUP BY
  • HAVING

HAVING可以理解为WHOSE, HAVING支持所有WHERE操作符

SELECT id, COUNT(*) AS orders

FROM orders

GROUP BY id

HAVING COUNT(*) >= 2;

  • HAVING和 WHERE的差别
    • 这里有另一种理解方法, WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。这是一个
      重要的区别,WERE排除的行不包括在分组中。这可能会改变计算值,从而影响 HAVING-子句中基于这些值过滤掉的分组。

子查询

SELECT id FROM orders WHERE order_num IN (SELECT order_num
FROM orderitems
WHERE id = 'TNT2');