Mysql数据库基础语法
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 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-子句中基于这些值过滤掉的分组。
- 这里有另一种理解方法, WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。这是一个
子查询
SELECT id FROM orders WHERE order_num IN (SELECT order_num |