开源数据库Mysql_DBA运维实战 (DML/DQL语句)

DML/DQL

DML

[INSERT 实现数据的 插入](#INSERT 实现数据的 插入)

实例:

[DELETE 实现数据的 删除](#DELETE 实现数据的 删除)

实例:

[UPDATE 实现数据的 更新](#UPDATE 实现数据的 更新)

实例1:

实例2:

实例3:

DQL


DML/DQL

DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE

DQL语句 数据库查询语言:查询数据SELECT


DML

INSERT 实现数据的 插入

语法: 完整插入 INSERT INTO 表名 VALUES(值1,值2,值3...值n);

部分插入 INSERT INTO 表名 (列名,列名) VALUES(值1,值2);

实例:

1.首先创建一个表

2.插入数据

DELETE 实现数据的 删除

**语法:**DELETE FROM 表名_ WHERE CONDITION;

实例:

.删除数据

UPDATE 实现数据的 更新

**语法:**UPDATE 表名 SET 列名=值 WHERE CONDITION;

实例1:

1.准备一张表

sql 复制代码
mysql> create table t6(id int, name varchar(20));

2.插入数据

sql 复制代码
mysql> insert into t6 values (1,'aa');

mysql> insert into t6 values (2,'bb');

3.更新数据 ----->把bb 改成 cc

sql 复制代码
mysql> update   t6   set   name='cc' where id=2;

4.查询结构

sql 复制代码
mysql> select * from t6;

实例2:

更新数据库的登录密码

sql 复制代码
mysql> update mysql.user set authentication_string=password("QianFeng@123456") where user="root";

实例3:


DQL

在MySQL管理软件中,可以通过SQL语句中的DQL语言来实现数据的

从数据表中提取满足特定条件的记录

  • 单表查询
  • 多表联合查询

DQL基础语法:

实例:

1.首先创建一个表

sql 复制代码
mysql> create database company;
sql 复制代码
mysql> 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
     );

插入数据

sql 复制代码
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.简单查询

sql 复制代码
#查看所有列
SELECT    *    FROM   表名;


#查部分列
SELECT   列1,列2,列3    FROM     表名;
sql 复制代码
#通过四则运算查询(查看年薪)

 SELECT name, salary, salary*14 FROM employee5;

3.条件查询

单条件查询 WHERE

a.查询hr部门的员工姓名

sql 复制代码
SELECT name,post  FROM  employee5  WHERE  post='hr';

多条件查询AND/OR

a.查询hr部门的员工姓名,并且工资大于1000

sql 复制代码
SELECT name,salary FROM employee5 WHERE post='hr' AND salary>1000;

b.查询所有部门的员工姓名,并且工资是6000或者8000的员工

sql 复制代码
SELECT name, salary FROM employee5 WHERE salary=6000 OR salary=8000

关键字BETWEEN AND 在什么之间

a.需求:查一查薪资在5000到15000

sql 复制代码
SELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;

b.需求:不在5000~15000呢?请使用NOT

sql 复制代码
SELECT name,salary FROM employee5 WHERE salary NOT BETWEEN 5000 AND 15000;

关键字IN集合查询

a.工资可能是4000,也可能是5000,还有可能是9000,怎么查

sql 复制代码
OR可以组合多条件,效率如何?
SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;

关键字IS NULL

a.没有岗位描述的

sql 复制代码
空
SELECT name,job_description FROM employee5 WHERE job_description IS NULL;
sql 复制代码
非空
SELECT name,job_description FROM employee5 WHERE job_description IS NOT NULL;

关键字LIKE模糊查询

a.好像有个员工姓阿

sql 复制代码
SELECT * FROM employee5 WHERE name LIKE 'al%';



SELECT * FROM employee5 WHERE name LIKE 'al___';

4.排序查询

实例:

a.例如以工资升序排列

sql 复制代码
SELECT    *     FROM     表名   ORDER       BY     工资的列名     ASC;

b.例如以工资降序排列

sql 复制代码
SELECT    *     FROM     表名   ORDER BY    工资的列名     DESC;

c.工资最高的前五名

sql 复制代码
SELECT * FROM employee5 ORDER BY salary DESC LIMIT  5;	  

5.多表查询

创建员工信息表:

sql 复制代码
#创建表结构
create table info(
name char(50),
age int,
dep_num int,
level_num int);

#查询表结构
desc info;

#插入数据
insert into info values 
('zhangsan',23,101,1),
('lisi',25,102,2),
('wangwu',30,102,3),
('zhaosi',30,103,4),
('sunba',35,NULL,NULL);

#查询表
select * from info;

创建部门信息表:

sql 复制代码
#创建表结构
create table department(
dep_num int,
dep_name varchar(50),
dep_des varchar(100));

#插入数据
insert into department values
(101,'hr','recruit,training'),
(102,'tec','system,network,service'),
(103,'exp','C++,python,php'),
(104,'admin','administrator');

#查看表结构
desc department;

#查看表
select * from department;

示图:

多表的连接查询:

a.交叉连接

特点:全部组合(A表5行,B表7行,最后5*7=35行)

生成笛卡尔积,它不使用任何匹配条件

select info.name,info.age,info.dep_num,department.dep_name from info,department;

b.内连接

特点:两列相同时,才会显示

**语法:**SELECT 字段列表 FROM 表1 , 表2 WHERE 表1.字段 = 表2.字段;

select info.name,info.age,info.dep_num,department.dep_name from info,department where info.dep_num = department.dep_num;

c.外连接

特点:两列相同时显示,并,已左/右表为主。

**语法:**A表 left join B表 on 条件是

外连接(左连接 left join on)

找出所有员工及所属的部门,包括没有部门的员工

查看所有员工的部门信息。

sql 复制代码
select info.name,info.age,info.dep_num,department.dep_name from info left join department on info.dep_num = department.dep_num;

外连接(右连接right join on)

显示所有的部门的员工信息。

sql 复制代码
select info.name,info.age,info.dep_num,department.dep_name from info right join department on info.dep_num = department.dep_num;

子查询:

子查询是指:父查询 需要 依赖 子查询的结果。
子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
还可以包含比较运算符:= 、 !=、> 、<等

EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。
Ture或False,当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询

1. 带IN关键字的子查询(范围)

查询员工年龄大于等于25岁的部门

sql 复制代码
 select dep_num,dep_name from department where dep_num in (select distinct dep_num from info where age >=25);

2. 带EXISTS关键字的子查询(返回值)

如果部门101存在(返回为真),查询所有员工信息。

sql 复制代码
true

 select * from info where exists (select * from department where dep_num=102);


false

 select * from info where exists (select * from department where dep_num=105);
相关推荐
Elastic 中国社区官方博客5 分钟前
SearchClaw:将 Elasticsearch 通过可组合技能引入 OpenClaw
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
娇娇yyyyyy1 小时前
Qt编程(3): 信号和槽函数
开发语言·数据库·qt
乌鸦乌鸦你的小虎牙4 小时前
qt 5.12.8 配置报错(交叉编译环境)
开发语言·数据库·qt
一只大袋鼠5 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
Anastasiozzzz5 小时前
深入研究Redis的ZSet底层数据结构:从 Ziplist 的级联更新到 Listpack 的完美救场
数据结构·数据库·redis
菠萝蚊鸭5 小时前
x86 平台使用 buildx 基于源码构建 MySQL Wsrep 5.7.44 镜像
数据库·mysql·galera·wsrep
梦白.5 小时前
Python的容器类型
运维·python
沙漏无语7 小时前
(二)TIDB搭建正式集群
linux·数据库·tidb
tuotali20267 小时前
天然气压缩机技术2026,高可靠性长周期运行与智能运维融合路径
运维·python
姚不倒7 小时前
三节点 TiDB 集群部署与负载均衡搭建实战
运维·数据库·分布式·负载均衡·tidb