1、数据定义语言DDL:用来定义和管理数据库中的对象
1、CREAT TABLE /*创建表*/
创建表语法:
CREATE TABLE <表名> (<列名><数据类型> [NULL|NOT NULL]
[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]…][,<表级完整性约束条件>])
create table mytest//创建表
(sid number(6) not null primary key,//创建列sid ,类型number,长度6,不为空,设为主键
sname varcheat2(10) not null,//创建列sname ,类型varcheat2,长度10,不为空
ssex char(2) check(ssex in('男','女')));//创建列ssex ,类型char,长度2,设定约束只能取值男女
2、ALTER TABLE /*修改表的属性*/
ALTER TABLE<表名>
[ADD <新列名><数据类型>[完整性约束]
[DROP<列名>]
[MODIFY]<列名><数据类型>];
alter table mytest
add adderss varchar2(60);//新增列address,类型长度varchar2(60)
3、DROP TABLE /*删除表*/
drop table mytest;//删除表mytest
2、数据操作语言DML:用来操作数据库中的对象和数据,是T-SQL中最常用的部分。
1、 SELECT /*从一个表或多个表中检索数据*/
SELECT select_list //列名select_list
FROM table_source //表名table_source
[ WHERE search_condition ] //符合的条件search_condition
[ GROUP BY group_by_expression ]//分组
[ HAVING search_condition ]//分组之后的条件
[ ORDER BY order_expression [ ASC | DESC ]
select ename from emp where ename like '_A%';//模糊查询,ename第一个字符不限制,
第二个字符为A,后面字符不限制
//(and 并,or 或)
select * from emp order by hiredata desc ;//按照hiredata降序查询
select deptno,sum(sa1) as payroll from emp//统计列(sal别名为payroll)和列deptno,表为emp
group by deptno;//以deptno相同的分为一组,
select job,sum(sal) as payroll from emp//查询列job,sol别名payroll,表为emp
where job not like 'SALE%'//条件为模糊查询job列值要有SALE
group by job//分组job
having sum(sal)>5000//条件为sal和大于5000
order by sum(sal) asc;//升序排列
1、)分组详解
组函数
COUNT()(个数)、SUM()(求和)、AVG()(平均)、MAX()(最大值)、MIN()(最小值)。
· COUNT(*):会实际的统计出表中的数据量;
· COUNT(字段):
|- 如果统计的字段上不包含有 null,那么与 COUNT(*)结果相同;
|- 如果统计字段上包含有了 null,null 不参与统计;
· COUNT(DISTINCT 字段):消除掉重复数据后的统计。
分组统计
· 限制一:统计函数单独使用时(没有 GROUP BY 子句)只能够出现统计函数,不能够出现其它字段。
正确的代码:SELECT COUNT(empno) FROM emp ;
错误的代码:SELECT COUNT(empno),ename FROM emp ;
· 限制二:使用统计查询时(存在 GROUP BY 子句),SELECT 子句之中只允许出现统计函数与分组字段,
其它的任何字段都不允许出现。
正确的代码:
SELECT deptno,COUNT(empno)
FROM emp
GROUP BY deptno ;
错误的代码:
SELECT deptno,COUNT(empno),ename
FROM emp
GROUP BY deptno ;
· 限制三:统计函数在分组之中可以嵌套使用,但是嵌套之后的统计查询之中,SELECT 子句不允许再出现
任何的字段,包括分组字段。
正确的代码:
SELECT MAX(COUNT(empno))
FROM emp
GROUP BY deptno ;
错误的代码:
SELECT deptno,MAX(COUNT(empno))
FROM emp
GROUP BY deptno ;
关于 WHERE 和 HAVING 的区别?
· WHERE 子句:是在分组前使用,而且不能够使用统计函数进行验证,经过 WHERE 筛选后的数据才可以分组;
· HAVING 子句:必须结合 GROUP BY 子句一起出现,是在分组后的过滤,可以使用统计函数。
-- 没分组的大组
select count(empno) from emp;
--由查询结果来看,可以根据部门编号分组
select * from emp order by deptno;
--分组统计人数
select count(empno), deptno from emp group by deptno;
--查询每个部门的平均工资
select avg(empno) avgsal, deptno from emp group by deptno;
select count(*), deptno from emp;
--会报错,因为没有group by分组所以统计函数统计的是整张表的 数据,
--我们却非要强加在部门编号上是不对的,所以想要查询出来部门下的统计信息就必须要分组
--需要添加分组
select count(*), deptno from emp group by deptno;
--分组查询出记录数,部门编号,部门名称
select count(*), d.deptno, d.dname
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno,d.dname;
--分组查询每个部门下从事每种工作的人数
select count(*), deptno, job
from emp
group by deptno, job
order by deptno;
原文链接:https://blog.csdn.net/qq_36260974/article/details/88732300
2、DELETE /*从表中删除数据*/
DELETE [FROM ]
{table_name |view_name
}
[ WHERE
<search_condtion>
]
delete from emp//删除的表为emp
where deptno-(select deptno from dept where dname='SALES')//条件为deptno=(dept表,deptno列,dname值为'SALES')
3、INSERT /*向一个表中添加数据*/
INSERT [INTO] { talbe_name |view_name}
{[(column_list)]
{values ({default |NULL |expression } [,…n])}
insert into dept(deptno,dame,loc)//在表的平台中添加列名deptno,dame,loc中的值
values(20,'develop','dizhi');//按顺序添加的值分别为20,'develop','dizhi'
4、UPDATE /*修改表中已有的数据*/
Update { table_name |view_name }
[from {<table_soource>}[,…n]
SET column_name={expression |default |NULL}[,…]
[where search_condition]
update emp//更新表emp
set deptno-20//更新列deptno的值为20
where enpno-7782;//条件enpno=7782
update emp//更新表emp
set (job,deptno)-(select job,deptno from emp where enpno-7499);//更新为,表emp,列为job,deptno,条件为enpno-7499的值
where enpno-7698;
3、数据控制语言DCL:用来控制用户对数据库对象操作的权限。
主要的命令有:
GRANT /*授予权限*/
REVOKE /*回收所授予的权限*/
grant|revoke 对象权限|all(全部权限)
on 数据库对象
to 数据库用户
[WITH GRANT OPTION]
grant select on emp to myuser在emp(表)对象下授权myuser用户具有select查询权限,
with grant option;//并可将select查询权限授予其他用户
revoke select on emp to myuser;//撤销myuser用户在emp对象的select查询条件
4、其他
单引号''区分大小写