
前言:我们在javaWeb的学习中已经接触到了数据库的相关知识和操作,这篇对重点知识进行汇总,为后面的数据库进阶打好基础。
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段) DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改 DQL Data Query Language 数据查询语言,用来查询数据库中表的记录 DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
查询所有数据库:SHOW DATABASES; 查询当前数据库:SELECT DATABASE(); 创建:CREATE DATABASE [IF NOT EXISTS] 数据库名[DEFAULT CHARSET 字符集][COLLATE 排序规则]; 删除:DROP DATABASE[IF EXISTS]数据库名; 使用:USE 数据库名
查询当前数据库所有表:SHOW TABLES; 查询表结构:DESC表名; 查询指定表的建表语句:SHOW CREATE TABLE 表名;

添加字段: ALTERTABLE表名ADD 字段名 类型(长度)[COMMENT注释][约束]; 修改数据类型:ALTERTABLE表名MODIFY 字段名 新数据类型(长度); 修改字段名和字段类型:ALTERTABLE表名CHANGE I旧字段名 新字段名 类型(长度)[COMMENT注释][约束];
删除字段 ALTERTABLE表名 DROP 字段名;
修改表名 ALTERTABLE表名 RENAME TO 新表名;
删除表:DROP TABLE[IF EXISTS]表名; 删除指定表,并重新创建该表:TRUNCATE TABLE 表名;(用于把数据清空)
添加数据:INSERT INTO表名(字段1,字段2,...)VALUES(值1,值2,..)[,(值1,值2,..)...]; 修改数据:UPDATE表名 SET 字段1=值1,字段2=值2[WHERE条件]; 删除数据:DELETE FROM 表岛[WHERE 条件];
编写顺序:
SELECT [列名|表达式|*] FROM [表名] [WHERE 条件] [GROUP BY 分组列] [HAVING 分组后条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT/OFFSET 子句]; -- 或其他数据库的等效语法(如 TOP、FETCH NEXT)
-- 查询所有员工的所有信息
SELECT * FROM employees;
-- 查询特定列
SELECT employee_id, first_name, last_name, salary
FROM employees;
-- 使用别名
SELECT
employee_id AS "员工编号",
first_name AS "名",
last_name AS "姓",
salary * 12 AS "年薪"
FROM employees;-- 基本条件
SELECT * FROM employees
WHERE salary > 5000;
-- 多条件组合
SELECT * FROM employees
WHERE department_id = 10
AND salary > 4000
AND hire_date > '2020-01-01';
-- 使用 BETWEEN
SELECT * FROM employees
WHERE salary BETWEEN 4000 AND 8000;
-- 使用 IN
SELECT * FROM employees
WHERE department_id IN (10, 20, 30);
-- 模糊查询 (LIKE)
SELECT * FROM employees
WHERE first_name LIKE 'J%'; -- J开头
SELECT * FROM employees
WHERE email LIKE '%@gmail.com'; -- gmail邮箱
SELECT * FROM employees
WHERE phone LIKE '13_%'; -- 13开头,11位手机号
-- NULL 值处理
SELECT * FROM employees
WHERE commission_pct IS NULL;
SELECT * FROM employees
WHERE commission_pct IS NOT NULL;-- 单列排序
SELECT * FROM employees
ORDER BY hire_date DESC; -- 按入职日期降序
-- 多列排序
SELECT * FROM employees
ORDER BY department_id ASC, salary DESC; -- 先按部门升序,再按工资降序
-- 结合条件
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 3000
ORDER BY salary DESC
LIMIT 10; -- 工资最高的10名员工
MySQL中内置了很多字符串函数,常用的几个如下:
CONCAT(S1,S2,..Sn): 字符串拼接,将S1,S2,...Sn拼接成一个字符串 LOWER(str): 将字符串str全部转为小写 UPPER(str): 将字符串str全部转为大写 LPAD(str,n,pad): 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 RPAD(str,n,pad): 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 TRIM(str): 去掉字符串头部和尾部的空格 SUBSTRING(str,start,len): 返回从字符串str从stat位置起的len个长度的字符串
CEIL(x): 向上取整 FLOOR(x ): 向下取整 MOD(x,y): 返回x/y的模 RANDO: 返回0~1内的随机数 ROUND(xY): 求参数x的四舍五入的值,保留y位小数
常见的日期函数如下: CURDATE(): 返回当前日期 CURTIME( ): 返回当前日期和时间 YEAR(date): 获取指定date的年份 MONTH(date): 获取指定date的月份 DAY(date): 获取指定date的日期 DATE_ ADD(date, INTERVAL expr type): 返回一个日期/时间值加上一个时间间隔expr后的时间 DATEDIFF(datel,date2) :返回起始时间date1和结束时间date2之间的天数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。 函数 IF(value,t,f) 如果value为true,则返回t,否则返回f IFNULL(value, value2) 如果valuel不为空,返回valuel,否则返回value2
CASE WHEN [vall ] THEN [res1] ... ELSE[ default] END 如果vall为true,返回res1,...否则返回default默认值
CASE[expr] WHEN [vall] THEN [resl] ...ELSE[default] END 如果expr的值等于val1,返回res1,...否则返回default默认值