2.DML(增删改)和DQL(查)

一.DML数据操作语言(insert update delete)

操作的是数据库对象里的数据

1. insert :向表中插入数据(功能:注册,添加)

语法:
insert into 表名(列名2,列名1,列名4) values(值2,值1,'值4')

说明:

  • 1.在插入数据时不要违反表的任何约束
  • 2.列的顺序任意,但是values后面值的顺序要和前面列的顺序对应
  • 3.当值是字符串或时间类型时需要使用引号
  • 4.如果插入表中的所有列,那么语法可以简化如下
    如果简化了,要插入所有列的值
    insert into 表名 values(值1,值2,值3,值4)

例:

INSERT INTO emps VALUES('1002','崔宸','PG',5000,'1002','测试数据')
INSERT INTO emps(empno,sal,ename,job,deptno) VALUES
('1001',5000,'崔宸','PG','1001')

2.update :更新、修改表中的数据

语法:
update 表名 set 列名=值,列='值' [where 条件]
【注意】 直接在数据库中可以通过update去修改主键的值
但是通过Java把update语句发送到数据库中,不允许修改主键
条件 列名 比较运算符 = <> > >= < <=
多个条件使用 and or

例如:

-- 更新
update emps set ename='崔宸',job='SE' where empno='qf1002'
-- 把低于5000的数据,  在原有基础上涨5000
update emps set sal=sal+5000 
where deptno='1001' and sal<5000

3. delete:删除表中的数据

语法:
delete from 表名 删除表中的所有数据
delete from 表名 where 条件

使用delete删除数据时,删除的数据会记录在日志文件中,
在理论上delete删除的数据是能够恢复的

truncate table emps;
删除emps表中的所有数据,然后把表drop掉,最后新建emps表

例如:

-- 删除表中的数据
delete from emps where deptno='1002' and sal<5000

其他:
复制新表
– 复制表结构,把数据一同复制
create table emps2
as select * from emps


二.DQL 数据查询语言(select)

作用:把表中的数据给查询显示出来,查询不改变表中的数据,查询结果是表中数据的映像

1.

语法:

  • select 列名3,列名1,列名2 from 表名
    查询表中的所有行,部分列
  • select 列名3,列名1,列名2 from 表名 [where 条件 group by 分组条件列 order by 排序列 DESC降序/ASC升序默认 having 条件]
    注意:
    group by分组之后自带排序效果,
    group by之后可以进行order by排序,反之不可以!!!

查询语句:

select ename,sal,job from emps where deptno='1001' and sal>5000
select ename,job,sal,deptno from emps order by sal DESC ,deptno asc

给列命名别名:(空格或as)

select empno 员工编号,ename 员工姓名,job 职务,sal as 薪资,deptno as 部门编号,mark as 备注 
from emps order by ename DESC

2.五个聚合函数/单行函数

  • max() 最大值
  • min() 最小值
  • avg() 平均值
  • sum() 计算指定列的和
  • count() 统计个数

【注意】 null值在聚合函数中是不参与统计计算的

分组查询统计:把同一分组条件列的数据放在一起作为一组,然后在组内进行统计

【注意】 使用分组查询后,select后面的列,必须是聚合函数处理的列,或是分组列
要求:统计各部门的人数和

having 条件 分组查询后的数据进行条件查询

【说明】where 和 having区别?
where是在分组之前起作用,进行条件筛选
对筛选出来的数据然后group by
having 是对group by后的数据进行条件筛选

例子:
1.五个聚合函数:
select avg(com) from emps

select max(sal),ename from emps

select COUNT(empno) as num from emps

2.分组查询:

SELECT
COUNT(empno) 人数, deptno 部门
from emps GROUP BY deptno
-- 练习  查询统计出各个部门的最高薪资、最低薪资、平均薪资
SELECT max(sal) 最高薪资,min(sal) 最低薪资, avg(sal) 平均薪资,deptno 部门
from emps GROUP BY deptno
-- 查询平均薪资高于6500 部门的最高 最低  平均薪资
SELECT max(sal) 最高薪资,min(sal) 最低薪资, avg(sal) 平均薪资,deptno 部门
from emps GROUP BY deptno having avg(sal)>6500

单标查询语句的语法:(查询结果来源于一个表)

select 列
from 表
where 条件
order by 排序条件1,排序条件2
group by 分组条件
having 条件

多表查询语句(查询的数据来源多个表)

多表查询时,表和表之间按照条件进行关联,条件的关联方式不同,连接查询不同

            等值连接
            内连接
            左外连接
            右外连接
            非等值连接
            自然连接
            自身连接
            交叉连接

例如:

-- 笛卡尔积
SELECT ename,job,dname
from emp,dept
-- 等值连接,表的先后顺序不影响查询结果
SELECT ename,job,dname,emp.deptno
from dept,emp
where emp.deptno=dept.deptno
-- 内连接 查询效果等同于等值联接
select ename,job,dname
from dept
INNER JOIN emp on emp.deptno=dept.deptno
-- 左外连接  以左表为主,把左表的数据都会查询显示出来
--                      那么右表中没有符合条件的数据进行组合
--                      就使用null进行组合填充
select ename,job,dname
from dept LEFT OUTER JOIN emp on dept.deptno=emp.deptno
-- 右外连接
select ename,job,dname
from emp right OUTER JOIN dept on dept.deptno=emp.deptno

-- 当连接条件不是一个确定的值,而是一个范围时,使用非等值连接
SELECT ename,sal,id
from emp,salgrade
where emp.sal BETWEEN salgrade.lowsal and salgrade.higsal
-- 等同如下
SELECT ename,sal,id
from emp,salgrade
where emp.sal >=salgrade.lowsal and emp.sal<=salgrade.higsal
-- 给表命名别名
SELECT ename,sal,id
from emp e,salgrade s
where e.sal BETWEEN s.lowsal AND s.higsal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值