基础
SQL语言分类
- DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。 - DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。
主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。
SELECT是SQL语言的基础,最为重要。 - DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、SAVEPOINT等。
去除重复行
DISTINCT 是对后面所有列名的组合进行去重,如果只针对某一个字段去重用group by
查询常数
比如说,我们想对 employees 数据表中的员工姓名进行查询,同时增加一列字段 corporation ,这个字段固定值为“hello,可以这样写:
SELECT ‘hello’ as corporation, last_name FROM employees;
使用正则表达式查询
MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。下表列出了REGEXP操作符中常用字符匹配
列表。
排序
- 如果没有使用排序,默认排序方式为插入到数据库的顺序
- 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序
分页
分页显式公式:(当前页数-1)*每页条数,每页条数
多表查询
等值连接
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id
FROM employees e , departments d
WHERE e.department_id = d.department_id;
非等值连接
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
函数
单行函数
字符串函数
- CONCAT(s1,s2,…,sn) 连接s1,s2,…,sn为一个字符串
- CONCAT_WS(x,s1,s2,…,sn) 同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上x
- REPLACE(str, a, b) 用字符串b替换字符串str中所有出现的字符串a
流程控制函数
- IFNULL(value1, value2)如果value1不为NULL,返回value1,否则返回value2
- CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2… [ELSE resultn] END 相当于Java的if…else if…else…
日期函数
DATE_FORMAT(date,fmt) 按照字符串fmt格式化日期date值
聚合函数
COUNT函数
COUNT(expr) 返回expr 不为空的记录总数。
Innodb引擎:查询效率 count(*)=count(1)>count(列名)
过滤分组:HAVING子句
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
非法使用聚合函数 : 不能在 WHERE 子句中使用聚合函数
数据类型
- 整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。
- 字符类型
M 为字符长度,1个汉字=1个字符=3个字节
系统变量
修改系统变量的值
- 方式1:修改MySQL 配置文件 ,继而修改MySQL系统变量的值(该方法需要重启MySQL服务)
- 方式2:在MySQL服务运行期间,使用“set”命令重新设置系统变量的值(该方法重启MySQL服务后就会失效)
全局变量的有效期再重启服务之前都有效。
会话变量的有效期只在当前连接有效,新的连接不生效。
#为某个全局变量赋值
方式1:SET @@global.变量名=变量值;
方式2: SET GLOBAL 变量名=变量值;
#为某个会话变量赋值
方式1: SET @@session.变量名=变量值;
方式2: SET SESSION 变量名=变量值;