数据库操作语言:DML(data management lauguage)

2023-10-27

一,DML操作语言

DML:对表中的数据进行操作的语言

关键字:insert ,update, delete, select

假设我们使用创建表的语句创建了一个student表,然后对该表进行操作。

create table classroom(
cid int,
cname varchar(20),
des varchar(20)
)

1,插入数据

语法:insert into 表名 [(字段)] values(值);
例句:
给所有字段添加值,和表中字段顺序一致

insert into classroom values (1,'java','java class');

给cname字段添加值,和指定的字段顺序把必须保持一致

insert into classroom (cname) values ('python');
insert into classroom (cid,cname) values (3,'test');

添加三条记录,批量插入

insert into classroom 
values
(4,'oracle','oracle class'),
(5,'c','c class'),
(4,'c#','c# class');

将classroom的值整体复制到classroom1。(前提是两个表的结构必须一样(字段类型,个数))

create table classroom1(
cid int,
cname varchar(20),
des varchar(20)
)
insert into classroom1 select * from classroom;

查看表的所有记录

select * from classroom;

2,删除数据

语法:delete form 表名 where 条件;
例句:
删除一条数据

delete from classroom where cname = 'python';

删除表中数据

delete form classroom;
清空表的数据

语法:truncate table 表名;
例句:

truncate table classroom;
delete 和 truncare 的区别是什么?

(1),delete是逐行删除,truncate是文件式的清空
(2),delete删除之后并不会改变表的结构,自增性会继续执行,不会重置,truncate删除之后,自增属性重置

3,修改数据

语法:update 表名 set 字段值 = 新值 [where 条件];
例句:
修改一条数据

update classroom set cname = 'test' where cid = 1;#cid主键列,可以提高检索速度,sql优化
update classroom set cname = 'test' where des = 'oracle class';

修改所有数据(不是把des改为班级信息,而是把des字段的值改为班级信息)

update classroom set des = '班级信息';

4,查询数据

语法:

SELECT 字段 |表达式 
FROM 表名 |视图|结果集
[ WHERE 条件 ] 
[ GROUP BY 分组 ]
[ HAVING 分组之后进行检索 ]
[ ORDER BY 排序 ]
[ LIMIT 限制结果]

例句:
查询所有信息

select * from classroom;

#查询部分信息

select cid, cname from classroom;

查询所有员工的姓名和工资

select ename,sal from emp;

员工工资提升5%之后的员工姓名和工资

select ename, sal + sal * 0.05 from emp;

查询工资大于2000的员工信息

select * from emp where sal > 2000;

查询工资在1000-2000之间的员工信息

select * from emp where sal between 1000 and 2000;#包括边界值[1000,2000]
select * from emp where sal >= 1000 and sal <= 2000;#包括边界值[1000,2000]
select * from emp where sal > 1000 and sal <2000;#不包括边界值(1000,2000)

查询员工编号为7521,7369,7788的员工信息

select * from emp where empno in (7521,7788,7369);
select * from emp where empno = 7521 or empno = 7788 or empno = 7369;

5、取别名

语法:

select ename, sal + sal * 0.05 as 提升之后的薪资 from emp;
select ename, sal + sal * 0.05 提升之后的薪资 from emp;#as可以省略不写

例句:

select ename, sal + sal * 0.05 as after_salary from emp;
select ename, sal + sal * 0.05 after_salary from emp;#as可以省略不写

6、去重查询 distinct

查询所有的职位信息 去重

select distinct job from emp;

7、模糊查询 like

%:匹配字符,匹配0个或者多个长度的任意字符
 _:匹配字符,匹配一个长度的任意字符

查询以s开头的员工信息

select * from emp where ename like 's%';

查询名字中包含s的员工信息

select * from emp where ename like '%s%';

查询第二个字符为L的所有员工信息

select * from emp where ename like '_L%';

8、排序

语法:排序关键字是order by,默认升序asc,降序为desc
对所有员工的工资进行排序

select * from emp order by sal desc;
select * from emp order by sal;

对所有员工的工资进行降序排列,如果工资一致,则按照员工编号降序排列

select ename,sal from emp order by sal desc,empno desc;

9、限制结果集查询

语法:关键字是limitlimit M,N M:开始的位置,索引从0开始,N:取值的长度
例句:
查询在10号部门工资最高的员工

select * from emp where deptno = 10 and sal = (select max(sal) from emp);
-- 思路:查询在10号部门的员工信息;工资最高 排序 desc;只要第一个人的信息,limit M,N  M:开始的位置,索引从0开始,N:取值的长度
select * from emp where deptno = 10;
select * from emp where deptno = 10 order by sal desc;
select * from emp where deptno = 10 order by sal desc limit 0,1;

10、为空或者非空的数据查询与操作

语法:为空 is null, 非空 is not null
例句:
查询所有有奖金的员工信息

select * from emp where comm is not null;
select * from emp where comm > 0;
select * from emp where comm is null;#查询空置,不能用 = null,要用 is null

将奖金小于500的员工奖金加100

update emp set comm = comm + 100 where comm < 500 or comm is null;#这样子的查询是有问题的,他只会修改掉comm<500的员工奖金,对于comm为null的不做修改
-- 针对以上问题,我们需要把空值的列改为0
update emp set comm = 0 where comm is null;
-- 然后再添加奖金
update emp set comm = comm + 100 where comm < 500 or comm is null;
-- 两句sql处理过于麻烦,可以使用 ifnull(comm,0)函数,判断comm列是否为null,如果是null则赋值0
update emp set comm = ifnull(comm,0) + 100 where comm < 500 or comm is null;

二,sql运算符

1,算术运算符

+,-,*,/, %取结果的余数,div整除,只取整个结果的整数部分, mod取余

select 10/3  #3.33333
select 10div3   #3
select 10%3   #1
select 10%3   #1

2,比较运算符

1、 >, <, >=, <=, =, !=, is null, is not null, between and, in, not in
2、 结果是布尔值 true 、false
3,逻辑运算符 and,逻辑与,都真则真 or,逻辑或,一真为真 !,逻辑非,取反 select !(1<0); 结果为true

练习:

-- 查询员工提升100元后超过2000的所有员工信息
select * from emp where sal+100 >2000;
-- 查询工资在1000-2000之间的10号部门的最高工资的员工信息
select * from emp where sal between 1000 and 2000 and deptno = 10 order by sal asc limit 0,1;
-- 将所有工资低于2000的员工工资提高5%
update emp set sal = sal + sal * 0.05 where sal < 2000;
-- 查询名字包含s的并且在20号部门的员工信息
select * from emp where deptno = 20 and ename like '%s%';
-- 查询工资大于1000的10号部门的前5条记录
select * from emp where sal >10 and deptno = 10 order by sal asc limit 0,5;
-- 将奖金小于500的员工奖金加100
update emp set comm = ifnull(comm,0) +100 where comm < 500 or comm is null;

如果想要更多的练习SQL语句,可以点击下面的链接,百度文库中有很多题目可以练习。
员工部门表综合查询60题 - 百度文库 (baidu.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库操作语言:DML(data management lauguage) 的相关文章

  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • RMySQL fetch - 找不到继承的方法

    使用 RMySQL 我想将数据从数据库加载到 R 中的数据帧中 为此 我使用以下代码 R连接数据库 con lt dbConnect MySQL user root password password dbname prediction h
  • 使用 JPA 时如何在部署时设置序列的架构名称?

    出于安全原因 我们的 Oracle 数据库对象通常属于与登录用户不同的架构 例如 表位于 xx core 中 我们登录的用户是 xx app yy 在我的 persistence xml 中 我定义了一个 orm 文件 以便我可以在部署时指
  • 本地数据库缓存的最佳实践?

    我正在开发一个应用程序 该应用程序的部分内容依赖于 MySQL 数据库 在某些情况下 应用程序将在互联网连接 UMTS 有限的环境中运行 特别是延迟较高的环境 应用程序的用户能够登录 并且应用程序用户界面的大部分内容都是从 MySQL 数据
  • 基本表创建 fpdf

    我找不到使用 fpdf 制作表格并从 mysql 数据库获取数据的合适教程 我只是想知道如何创建一个 我在网上尝试示例时遇到了很多错误 例如 我有 名字 中间名 姓氏 年龄 和 电子邮件 列 如何使用 fpdf 创建表格并回显数据库中的条目
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • CREATE TABLE 和 CREATE ANY TABLE 权限之间的区别

    我不明白这两种特权之间的区别 我找到了这两个解释 但这对我没有帮助 CREATE TABLE gt Enables a user to create a table owned by that user CREATE ANY TABLE g
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • Oracle 数据库 12c 尝试连​​接时出错:网络适配器无法建立连接

    我第一次安装Oracle数据库12c 我正确地遵循了所有步骤并将其安装在 Windows 7 64 位上 但是当我单击 SQL Developer 并尝试创建新连接时 我输入了用户名和密码等信息 最后单击 测试 按钮 我得到了这个错误消息
  • 什么是 Oracle 数据集成器?

    什么是ODI ODI的实际用途是什么 oracle data integrator工具如何帮助编程 sql Developer 工具和 ODI 工具实际上有什么区别 真的厌倦了在某些网站上找到的定义 如果有人能提出 gud 解释 那就太好了
  • APEX:从临时表下载 BLOB

    我正在尝试使用 Oracle APEX 4 1 1 构建一个简单的查看应用程序 要显示的信息位于与包含 APEX 应用程序访问的架构的数据库不同的数据库上的表中 使用视图 View 访问此远程表 远程表视图 和数据库链接 视图按预期工作 包
  • 高效插入和更新时检查唯一性

    我的员工表中有 2 列 每列值必须是唯一的 staff code staff name staff id staff code staff name 1 MGT Management 2 IT IT staff 当向表中插入或更新项目时 我
  • SQL:查找每个跑步者跑步之间的平均天数

    因此 如果我们给出下表 runner ran Carol 2011 02 01 Alice 2011 02 01 Bob 2011 02 01 Carol 2011 02 02 Bob 2011 02 02 Bob 2011 02 03 B
  • IO 错误:从读取调用中得到负一

    我的时间和想法都快用完了 我需要使用 Java 和 Oracle 数据库模拟预订整架飞机 我们有一些关于如何执行此操作以及预期内容的说明 但我们的代码始终出现这种非常奇怪和意外的行为 数据库看起来像这样 我们需要有一个不断运行的线程池来模拟
  • INNER JOIN 可用作 SELECT,但不能用作 DELETE [重复]

    这个问题在这里已经有答案了 为什么这个有语法错误 DELETE FROM print mailing request pmr INNER JOIN person p ON p id pmr person AND p email LIKE T
  • MySql 从另一个表中减去一个表

    我有两个表 A 包含所有数据 表 B 从 A 中随机选择 25 的数据创建 所以 A 和 B 具有完全相同的列 也没有独特的列 我想做的是从 A 中减去 B 有什么想法吗 查看所有行A除了那些在B SELECT FROM A WHERE f
  • 如何编写 bash 函数来包装另一个命令?

    我正在尝试编写一个函数包装器mysql command If my cnf存在于 pwd 中 我想自动附加 defaults file my cnf到命令 这就是我正在尝试的 function mysql if e my cnf then
  • MySQL 和 MariaDB 数据库有什么区别?

    我已经使用 XAMPP 很长时间了 很惊讶 XAMPP 已经从 MySQL 切换到了 MariaDB https www apachefriends org index html https www apachefriends org in
  • MySQL 中的 group_concat 性能问题

    我添加了一个group concat到一个查询并杀死了性能 添加之前和之后的解释计划是相同的 所以我对如何优化它感到困惑 这是查询的简化版本 SELECT curRow curRow 1 AS row number docID docTyp
  • 安装后步骤未成功完成 MySQL Mac OS Sierra

    pyEnv Anants MacBook Pro litibackend anantchandra brew postinstall mysql gt Postinstalling mysql gt usr local Cellar mys

随机推荐