一.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