开源数据库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);
相关推荐
ulias2124 小时前
Linux系统中的权限问题
linux·运维·服务器
沃尔威武5 小时前
数据库 Sinks(.net8)
数据库·.net·webview
青花瓷5 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
问简5 小时前
docker 镜像相关
运维·docker·容器
Dreamboat¿6 小时前
SQL 注入漏洞
数据库·sql
Dream of maid6 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾6 小时前
统信系统UOS常用命令集
linux·运维·服务器
Benszen6 小时前
Docker容器化技术实战指南
运维·docker·容器
ZzzZZzzzZZZzzzz…7 小时前
Nginx 平滑升级:从 1.26.3 到 1.28.0,用户无感知
linux·运维·nginx·平滑升级·nginx1.26.3·nginx1.28.0
曹牧7 小时前
Oracle数据库中,将JSON字符串转换为多行数据
数据库·oracle·json