常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 显示数据库
SHOW DATABASES;

-- 选择数据库
USE some_db;

-- 显示表
SHOW TABLES;

-- 显示表的列信息
SHOW COLUMNS FROM some_table;
DESCRIBE some_table;

-- 显示数据库服务器状态信息
SHOW STATUS;

-- 显示授予用户的权限
SHOW GRANTS;

-- 显示服务器错误信息/警告信息
SHOW ERRORS;
SHOW WARNINGS;

Tips

  • 结束SQL语句用分号 ;
  • SQL语句不区分大小写,约定SQL关键字用大写,列和表名用小写,以便阅读和调试

检索数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 检索单个列
SELECT prod_name FROM products;

-- 检索多个列
SELECT prod_id, prod_name, prod_price FROM products;

-- 检索所有列
SELECT * FROM products;

-- 检索不同的行
SELECT DISTINCT vend_id FROM products;

-- 限制结果
SELECT prod_name FROM products LIMIT 5, 5;

Tips

  • 使用*通配符会降低检索和应用程序的性能,尽量避免使用

排序检索

1
2
3
4
5
6
7
8
-- 按单个列排序
SELECT prod_name FROM products ORDER BY prod_name;

-- 按多个列排序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;

-- 排序方向,默认升序,降序需要指定 DESC 关键字
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

Tips

  • 如果想在多个列上进行降序排序,必须对每个列指定 DESC 关键字

过滤数据

1
2
3
4
5
6
7
8
9
10
11
-- 空值检查
SELECT prod_name FROM products WHERE prod_price IS NULL;

-- AND、OR 操作符
SELECT prod_name, prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

-- IN 操作符
SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name;

-- NOT 操作符
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;

Tips

  • IN 操作符比 OR 执行更快,语法更清楚直观,可以包含其他 SELECT 语句
  • NOT 与 IN 操作符配合使用对于找出条件列表不匹配的行非常简单

通配符

1
2
3
4
5
-- 百分号 % ,任意字符出现任意次数
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';

-- 下划线 _ ,匹配单个字符
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';

Tips

  • 通配符匹配不了 NULL
  • 只在必要的时候使用通配符
  • 通配符置于搜索模式开始处搜索起来是最慢的

正则表达式

1
2
3
4
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

-- 匹配特殊字符
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name

Tips

  • MySQL要求两个反斜杠(自己解释一个,正则表达式解释另一个)

参考书籍: 《MySQL必知必会》