一、DML
在MySQL管理软件中,DDL已经定义了数据库结构,那么如何对其中的数据进行管理呢?可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入、DELETE实现数据的删除,UPDATE实现数据的更新等。
1.1 插入数据INSERT
1.1.1 完整插入
INSERT INTO 表名 VALUES (值1,值2,值3…值n);
1.1.2 部分插入
INSERT INTO 表名(列名,列名) VALUES (值1,值2);
insert into t2(name) values ("lisi");
1.2 更新数据UPDATE
UPDATE 表名 SET 列名=值 WHERE CONDITION;
- 准备一张表并插入一些数据。
create table t6(id int, name varchar(20));
insert into t6 values (1,'aa');
insert into t6 values (2,'bb');
- 需求:把bb改成cc
update t6 set name='cc' where id=2;
- 可以使用update修改管理员的root账户的密码
update mysql.user set authentication_string=password("Aa.654321") where user="root";
1.3 删除数据DELETE
DELETE FROM 表名 WHERE CONDITION;
delete from t6 where id=2; #删除id为2的用户数据
delete from t6; #删除表6的全部数据
二、DQL
在MySQL管理软件中,可以通过SQL语句中的DQL语言来实现数据的SELECT查询操作
2.1 环境准备
- 环境1
准备一张表,包含三列信息id int 序号,name varchar 姓名,age int 年龄,再插入测试数据。
create table t3 (id int,name varchar(20),age int);
insert into t3 values (1,"zhangsan",23);
insert into t3 values (2,"lisi",24);
insert into t3 values (3,"wangwu",18);
- 环境2
create database company;
CREATE TABLE company.employee5(id int primary key AUTO_INCREMENT not null,name varchar(30) not null,sex enum('male','female') default 'male' not null,hire_date date not null,post varchar(50) not null,job_description varchar(100),salary double(15,2) not null,office int, dep_id int);
desc employee5;
- employee5表结构如下:
- 插入数据
mysql> insert into company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values
('jack','male','20180202','instructor','teach',5000,501,100),
('tom','male','20180203','instructor','teach',5500,501,100),
('robin','male','20180202','instructor','teach',8000,501,100),
('alice','female','20180202','instructor','teach',7200,501,100),
('aofa','male','20180202','hr','hrcc',600,502,101),
('harry','male','20180202','hr',NULL,6000,502,101),
('emma','female','20180206','sale','salecc',20000,503,102),
('christine','female','20180205','sale','salecc',2200,503,102),
('zhuzhu','male','20180205','sale',NULL,2200,503,102),
('gougou','male','20180205','sale','',2200,503,102);
图示如下
2.2 简单查询
查看所有列:
SELECT * FROM 表名; #在目标库里面使用
SELECT * FROM 库名.表名; #不在目标库里面使用查部分列:
SELECT 列1,列2,列3 FROM 表名;
查询支持四则运算,加减乘除
例如查看年薪: SELECT name, salary, salary*12 FROM employee5;
2.3 条件查询
- 单条件查询where
查询hr部门的员工姓名
SELECT name,post FROM employee5 WHERE post='hr';
- 多条件查询AND/OR
查询hr部门的员工姓名,并且工资大于1000
SELECT name,salary FROM employee5 WHERE post='hr' AND salary>1000;
查询所有部门的员工姓名,并且工资是6000或者8000的员工
SELECT name, salary FROM employee5 WHERE salary=6000 OR salary=8000;
- 关键字BETWEEN AND 在什么之间
薪资在5000到15000的员工
SELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;
不在5000~15000呢?请使用NOT
SELECT name,salary FROM employee5 WHERE salary NOT BETWEEN 5000 AND 15000;
- 关键字IN集合查询
工资可能是4000,也可能是5000,还有可能是9000,怎么查?
SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;
工资是4000,5000,6000,9000:
SELECT name, salary FROM employee5 WHERE salary IN (4000,5000,6000,9000) ;
工资不是4000,5000,6000,9000:
SELECT name, salary FROM employee WHERE salary NOT IN (4000,5000,6000,9000) ;
- 关键字IS NULL
没有岗位描述的
空:
SELECT name,job_description FROM employee5 WHERE job_description IS NULL;
非空:
SELECT name,job_description FROM employee5 WHERE job_description IS NOT NULL;
错误示范:
SELECT name,job_description FROM employee5 WHERE job_description='';
报错信息:
- 关键字LIKE模糊查询
好像有个员工姓阿
SELECT * FROM employee5 WHERE name LIKE 'a%'; #通配符’%’代表多个任意字符
SELECT * FROM employee5 WHERE name LIKE 'a___'; #通配符’_’代表1个任意字符
四个“_”
三个“_”
2.4查询排序
以工资升序排列
SELECT * FROM 表名 ORDER BY 工资的列名 ASC;
以工资降序排列
SELECT * FROM 表名 ORDER BY 工资的列名 DESC;
工资最高的前五名
SELECT * FROM employee5 ORDER BY salary DESC LIMIT 5;
写在最后,文章中的不足之处还请大神指出