1.sql 的分类,各个类的作用
DDL 数据定义语言 - create ,drop ,alter ,truncate 不支持事务
DML 数据操作语言 - insert,delete,update ,select 支持事务
DQL 数据查询语言 - 只有 select ,属于 DML 支持事务
TCL 数据控制语言 - rollback rollback to commit savapoint
DCL 数据控制语言 - 分配用户权限的相关 sql
2.查询 数据 的一些关键字
and (相当于 java &&),or ,in between x and y
distinct,like _ %(_ 代表单个未知符,%代表多个未知符号),
order by 字段名,limit
ifnull(x,y) age = ifnull(x,y) 判断 x 是否 null,是的话返回 y,否则返回 x
3.聚合函数有哪些,怎么使用?
avg,sum,max,min,count
例: select avg(sal) from emp; select count(*) from emp;
4.怎么分组查询
select deptno,avg(sal) from emp group by deptno;
5.怎么有条件的分组查询,
用 having 关键字,
存在多个关键字时排序为: select . from 表名
where .group by..having....order by....limit.
一般having 后跟聚合函数的条件
例:select deptno,avg(sal) a from emp
where ename like '%c%'
group by deptno
having a>2000;
6.什么是子查询,如何使用
嵌套在sql语句里面的查询sql语句成为子查询,子查询可以多层嵌套
用法,
1).一般写在 where/having 后 当做查询条件
2).可以 写在 from 后面 当做 一张新表,但是必须起别名
例: select * from (select * from xxx) t1;
3).创建表的时候 被当做新表
例: create table newemp as (select ename,sal from emp);
7.什么是关联查询
关联查询就是同时查询多张表的数据
8.什么是等值连接和内连接,有什么作用,怎么使用内连接与等值连接?
等值连接和内连接都是关联查询的查询方式,效果相同.
作用都是把把表关联起来查询.
等值连接:
select * from A,B where A.x=B.x and A.y=abc;
隐式内连接:
select A.id,b.name from A ,B where A.id = B.id;
内连接: (inner 可以省略)
select A.id,b.name from A inner join B on where A.id = B.id;9.什么是外连接,外连接的作用,外连接有几种方式
把一张表中的数据全部数据显示出来,另一张相关的表只显示相关的数据
通过一定 相等 的条件.连接起来,叫做外连接.
select tableA.id,tableB.num from tableA right/left outer join
tableB on tableA.id = tableB.id;(outer 可以省略)
两种:
左连接的结果是除了匹配条件的数据还包含左边表中的所有数据右连接的结果是除了匹配条件的数据还包含右边表中的所有数据
10.视图是什么?有什么作用?有哪几种类型?怎么创建,修改,删除?
视图就是数据库中的一种对象,代表一段sql语句.
有 重用 sql ,隐藏 敏感信息的作用.
创建语法:
create view viewName as 子查询;
例如:
create view v_emp_1 as
(select * from emp where deptno=10);
分类:
1.简单视图,创建视图中不包含,去重,函数,分组,关联查询.
支持 增删改查操作.
1.复杂视图,与简单视图相反,但同样支持增删改操作
修改视图:
create or replace view viewName as 子查询;
删除视图:
drop view viewName; / drop view if exists viewName;
别名: 视图(中的字段)有了别名,对视图操作只能用别名!
例:(其中 ename 有别名)
create view v_emp_name as (select ename name from emp);
update v_emp_name set name='abc' where name='李四';数据污染: 往视图中插入一条视图中不显示,
但是原表会显示的数据称为数据污染
避免数据污染的出现,创建视图时需要使用 with check option的关键字
create view v_emp_20 as (select * from emp where deptno=20)
with check option;需要注意的是,原表数据改变,视图也会跟着改变.
11.索引的作用,与分类 怎么对索引进行操作?
索引的作用是提高查询速度.
所以分为聚集索引与非聚集索引.
聚集索引
数据以树状结构保存
有主键的表会自动 给主键创建一个聚集索引,
每个表做多一个聚集索引.
非聚集索引
数据以树状结构保存,不同的是树状结构保存的是磁盘地址
创建方式: create index index_name on tableName(columnName);
删除方式: drop index index_name on tableName;什么时候使用:当频繁使用多个字段作为查询条件的时候使用复合索引
复合索引: create index index_name ont tableName(columnName1,columnName2...);
创建表指定索引: create table t_table(id int,age int ,index index_age(age));12.什么是事务? 事务有什么特性? 怎样操作事务?
事务是数据库执行sql 语句的最小工作单元,不可拆分,同时成功同时失败;
事务具有 ACID 特性,即 原子性(最小,不可拆分),一致性(同时成功或失败)
隔离性(事务之间互不影响),持久性(事务完成后保存到数据库中)
可以先查看自动提交状态: show variables like "autocommit";
通过关闭自动提交 开启事务. set autocommit=0;
编写完 DML(数据操作语言) 语句 后 编写 commit; 提交 sql 语句 让数据控执行.
可以使用 rollback 回滚到 某个执行点. 然后通过 savepoint s1; 来保存此次回滚点
然后,发现错误 既可以比较方便地 去 rollback to s1;
也就是上次 命名的 回滚点;
13.存储程序是什么?有什么作用? 怎么创建,调用,删除存储过程?
存储程序是一段 预编译的sql 语句 集,
市面上有比较多 的数据库支持存储过程 例如 Oracle MySQL Mariadb DB2;
使 sql 语句能 被被重用,在程序中多次被调用 不必再写 sql语句,
只需调用对应的 存储过程就可以.
而且 由于预编译 所以 执行速度 相对较快.
创建需要注意的是,在命令行中 需要 重新声明 分隔符
DELIMITER //
然后 create procedure procedureName(in aa int)
begin
sql 语句;
end //
形式创建,然后也要 吧分隔符 声明 回来 DELIMITER ;
用 set @parameterName = "aaa";的形式可以 设置参数
当然直接传参也可以;