一 DDL语句:数据定义语言
1 作用:操作表
2 常用关键字
CREATE(创建)
DROP(删除(销毁))
ALTER修改
3 格式
-- 单行注释
/* 多行注释 */
删除表:DROP TABLE [IF EXISTS] 表名;括号内为查看该表是否存在有则删
创建表:参考JavaBean中定义有参构造器 (最后一列不写逗号)
CREATE TABLE 表名(
列名1 数据类型[约束] [字段约束],
列名2 数据类型[约束] [字段约束],
.....
列名n 数据类型[约束] [字段约束]
);
4 表约束 – 又称字段约束或列约束
作用:限定表中指定字段存储数据的规则;需要根据表中的列含义和实际情况相结合来编写表约束
分类:
① 通用约束 – 所有的关系型数据库
非空约束 -- NOT NULL(常用)
唯一约束 -- UNIQUE(常用)
默认值的约束 -- DEFAULT 值(没有特殊要求一般不用)
外键约束 -- FOREIGN KEY(必须是多表操作目前用不上)
主键约束 -- PRIMARY KEY(重点)
特点1:非空且唯一,等价于NOT NULL UNIQUE同时使用
特点2: 每张表中有且仅有一个主键字段
特点3:如果表中定义主键字段,推荐使用不具备业务逻辑的列作为主键
② "方言"约束只适用于MySQL数据库
AUTO_INCREMENT -- 主键自增长
特点:必须配置主键字段编写,默认从1开始,每次增长1,类似Java中的++或+=1
③ 例子
# 判断表是否存在,若存在则删除
DROP TABLE IF EXISTS t_employee;
# 创建表
CREATE TABLE t_employee(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
eid VARCHAR(10) NOT NULL UNIQUE,
ename VARCHAR(6) NOT NULL,
job VARCHAR(10),
salary INT(10)
);
二 DML语言 – 数据操作语言
1 作用:对表中数据进行增删改操作
2 关键字
INSERT INTO ... VALUES... --插入
UPDATE ... SET... -- 修改
DELETE FROM ... --删除
3 插入数据
# 向表中所有字段插入一条数据,VALUES语句中的值与表中字段的顺序一致
# INSERT INTO 表名 VALUES(值1,值2....);
INSERT INTO t_employee
VALUES(1,'tj001',"大黄",'医药代表',15000);
# 向表中指定字段(不具有自增长和默认值的字段)插入一条数据
# INSERT INTO 表名(列1,列2....)VALUES(值1,值2....);
INSERT INTO t_employee(eid,ename,job)
VALUES("tj002","大白",'机器人');
# 同时向表中指定字段插入多条数据(常用)
# INSERT INTO 表名 (列1,列2...)VALUES(值1,值2....),(值1,值2....),(值1,值2....);
INSERT INTO t_employee(eid,ename,job)
VALUES("tj004","大橘",'机器人'),("tj003","小黑",'保安');
4 修改数据
# 不对修改设置条件,表中所有数据都会被修改
# UPDATE 表名 SET 列1=值,列2=值....[WHERE 条件];
# 将所有员工的职业设置为智能机器人
UPDATE t_employee
SET job='智能机器人';
# 将大黄的职业设置为保安
UPDATE t_employee
SET job='保安'
WHERE ename='大黄';
5 删除数据
# 不对删除设置条件,表中所有数据都会被删除
# DELETE FROM 表名[WHERE 条件]
# 删除员工编号为tj004的员工
DELETE FROM t_employee
where eid='tj004';
# 删除表中所有数据
DELETE FROM t_employee;
6 DELETE语句与DROP语句区别
① DELETE语句:DML语句,操作表中数据,删除表中数据,保留表结构
② DROP语句:DDL语句,操作表,将表结构删除
三 DQL语言 – 数据查询语言
1 作用:查询表中的数据
2 查询操作结果分类
① 没有结果 – 0条数据
② 有一个结果 – 1条数据
③ 多个结果 – 存放到List集合中
3 语法
① 查询员工表所有信息
# * 表示查询指定表中所有的字段
# 字段: 字段表示查询表中的指定字段
# 函数: 表示调用MySQL定好的方法
SELECT *|字段|函数 FROM 表名;
# 查询员工表所有信息
SELECT * FROM t_employee;
# 查询员工表指定字段
SELECT ename,eid FROM t_employee;
② 去重查询
SELECT DISTINCT ename,eid
FROM t_employee;
③ 算数运算符: + - * /
# MySQL中算数运算符只针对数值型和日期类型数据
# 数值型数据可以进行 + - * /操作;日期型只支持 + - 操作
# 员工工资翻倍
SELECT ename,salary,(salary*2)
FROM t_employee;
# 员工工资翻倍再加上5000块绩效
SELECT ename,salary,(salary*2+5000)
FROM t_employee;
④ 给指定字段定义别名
# 起别名时 as 可省略
SELECT ename,salary,(salary*2+5000) as '工资'
FROM t_employee;
⑤ 给定格式显示数据
# 使用CONCAT(列1,烈2...)
SELECT ename,salary,CONCAT(ename,"拿到了双倍工资",(salary*2),"还有",5000,"的绩效") 工资说明
FROM t_employee;
⑥ 过滤查询
# SELECT *|字段|函数 FROM 表名 WHERE 条件;
# 关系判断: > >= < <= = <>(不等于,等价!=)
# 查询工作不是智能机器人的员工
SELECT ename,job
FROM t_employee
WHERE job <> "智能机器人";
⑦ 逻辑判断 – AND(&&)
# 查询工资大于10000且工作不是智能机器人的员工
SELECT ename,salary
from t_employee
WHERE salary >= 10000 AND job <> '智能机器人';
# BETWEEN AND 当判断条件仅有1个字段时可使用,取值范围包括端点
SELECT ename,salary
from t_employee
WHERE salary BETWEEN 10000 AND 15000;
⑧ 逻辑判断 – OR(||)
# 查询工资大于12000或者工作不是智能机器人的员工
SELECT ename,salary
from t_employee
WHERE salary > 12000 or job <> '智能机器人';
# IN(值1,值2,...) 判断条件仅有一个字段时使用,条件的结果是确定的几个值中的任意一个
SELECT ename,salary
from t_employee
WHERE salary IN(10000,12000,15000);
⑨ 逻辑判断 – NOT(!)
# 查询工资不是10000和12000的员工
SELECT ename,salary
from t_employee
WHERE salary NOT IN(10000,12000);
⑩ 特殊值判断 – 判断当前字段是否为 NULL
# 为空 IS NULL 不为空 IS NOT NULL
SELECT ename,salary
from t_employee
WHERE salary IS NULL;
### MySQL中运算符的优先级 (由高到低)
() >算数(+ - * /) >关系 >NOT > AND >OR
4 模糊查询 – 关键字搜索
① 语法
SELECT * | 字段 |函数 FROM 表名 WHERE 字段 LIKE 值;
② 通配符
_:表示一个字符
%:表示任意多个字符,取值范围[0,正无穷)
# 查询名字大字共计开头两个字的员工
SELECT ename,salary
from t_employee
WHERE ename LIKE '大_';
# 查询名字含黄字的员工
SELECT ename,salary
from t_employee
WHERE ename LIKE '%黄%';
5 排序显示
① 语法
SELECT * |字段 |函数 FROM 表名 ORDER BY 列[排序方式,列[排序方式],....];
排序会增加用户等待时长;一般参与排序的字段数据类型为数值型或日期型;
使用多个字段进行排序,当且仅当前一个字段无法排序时,才会使用后一个字段的排序方式进行操作
② 分类
升序排序:默认的排序方式,关键字ASC,可以省略不写
降序排序:关键字 DESC ,必须写
# 按照工资降序排序,同时按照工号升序排序
SELECT ename,salary
from t_employee
ORDER BY salary DESC,eid;
6 分页显示
① 优势
提高用户观感度
一定程度上避免内存溢出的风险
② 语法
# LIMIT语句是MySQL的"方言"
# 第一个?:表示当前页开始显示数据的下标(从0开始)
# 第二个?:表示的是当前也显示数据的条数
# 例子:一共16条数据,每页显示3条
# 第一页下标 0 第二页下标 3
SELECT * |字段 |函数
FROM 表名
LIMIT ?,?;
# 将员工信息分页展示,每页3条数据,显示第2页
SELECT ename,salary
from t_employee
LIMIT 6,3;
7 小结
① 完整的DQL 语句
SELECT *|字段|函数
FROM 表名
[WHERE 条件]
[ORDER BY 排序字段]
[LIMIT ?,?];
② 执行顺序
从指定的表中(FROM语句),根据指定条件(WHERE语句),查询指定的数据(SELECT 语句),根据指定的字段进行排序(ORDER BY语句),以指定的条件进行分页显示(LIMIT 语句)
四 聚合函数 – 分组函数
1 作用:针对表中指定的某一个字段进行统计操作,是由MySQL定义好的方法,直接调用即可
2 常见聚合函数 – 5个
COUNT(字段) -- 统计指定字段个数
以下4个聚合函数只对数值型数据有意义
SUM(字段) -- 统计指定字段的数据总和
AVG(字段) -- 统计指定字段的数据平均值
MAX(字段) -- 统计指定字段的数据最大值
MIN(字段) --统计指定字段的数据最小值
# 查询员工总数
SELECT COUNT(id) from t_employee;
# 查询此次公司给员工发放的薪水总额,与平均工资
# 聚合函数对NULL值会进行忽略,做统计操作需配合IFNULL(字段,替换值)方法
SELECT SUM(salary) '发放金额',AVG(IFNULL(salary,0)) '员工平均工资',MAX(salary) '第一',MIN(salary) '倒数'
from t_employee;
聚合函数对于字段中的NULL值会进行忽略处理;因此在进行统计总数操作时,需使用具有非空约束的字段
五 导入与导出
1 导出命令
mysqldump -u用户名 -p密码 指定的数据库名 > 导出的地址(.sql结尾)
2 导入命令:前提是指定的数据库必须存在
mysql -u用户名 -p密码 指定的数据库名 < 导入的地址(.sql结尾)