sql必知必会-总结篇
总结:
1.全书总览:数据查询、新增、删除;表的新增、更新操作;视图、存储过程、事务、索引的描述,高级sql功能:约束、触发器、索引
2.特色:术语简明定义,讲述最简单化。简而全面。
3.长进的地方:内联结、外联结、组合更加清晰;
4.对一些技术或者语句的使用更加贴近业务层面,所有的数据特殊操作都是针对实际的业务场景去设计实现的。
5.得突破自己一贯的只知道总结,没有自己的思想,或者无法达到与作者进行交流的层面;
6.那就先总结吧:
一、查询:
select * from table_name;
select * from table_name order by feild desc;
过滤:where
select * from table_name where feild >0;
select * from table_name where feild <>0;
select * from table_name where feild !=0;
select * from table_name where feild is null;
select * from table_name where not feild is null;
select * from table_name where feild1>0 and feild2<>0;
select * from talbe_name where feild1>0 or feild2<>0;
select * from table_name where feild1 in(1,2);
select * from table_name where feild1 like 'wyd_';
select * from table_name where feild2 like 'wyd%';
聚合函数过滤:count avg max min
分组查询:group by having having 是对分组后的数据进行过滤,而where是对未分组前的数据进行过滤
//搜索大三年级中张晓娟老师带的学生中成绩大于80的学生信息,并按成绩进行降序排列
select * from student where grade='3' group by teacherName='张晓娟' having score>80 order by score desc;
子查询:作为子查询的select语句只能查询单列(将一条sql查询到的值作为另一条sql的过滤条件值)
使用联结的意义:将对应的重复信息分隔到另一张表去,省去了数据重复,也便于更新,防止了因为过多的重复导致的更新不完全。
//比如说一个班级的多个学生对应一个班主任老师,如果在每个学生的数据后面都要跟着班主任老师的信息,这就造成数据冗余,
而且对班主任老师的信息更新也会变得非常复杂。而单独一表放班主任信息,使用一个关联字段去关联,这样就很科学。
内联结:等值联结,包含自联结和多表联结,属于多表查询的范畴,目的在于将两张表通过关联值将A表中每行对应B表中每行,
自联结: 两表都是同表,通过起别名进行区分,
//查询出221班与春哥同年龄的同学信息;
select id,name,old from student where old=(select old where name='春哥');
select s1.id,s1.name,s1.old from student s1,student s2 where s1.old=s2.old and s2.name='春哥';
#注意,在使用自联结时,要明确查询的是哪张表的数据,不然会返回两张表的所有值,即会重复数据
多表联结: 这个就不多说了,就是where条件关联。
外联结:包含左外联结、右外联结、全外联结 ,与内联结相对应,是不等值联结,意为即使关联表中不存在关联数据,也会返回,只不过是返回一串空。
而左外和右外则对应相对于join位置的表,表示锁定的表即使没有关联内容也显示。
//查询学生信息及对应的学生成绩,(有同学临时有事没去考试,嘿嘿嘿)
组合查询:union 在简单的业务中使用看着复杂,但在复杂的业务中使用却显得无比简单易懂。
#注意两select对应列数一致,对应列含义不同可以,但基本数据类型一致,('yyyy-mm-dd'和'dd-mm-yyyy'是可以的)
#注意order by 只放在最后一条select语句中,但排序的是所有查询到的数据。
#查询到的是第一条sql和第二条sql数据的组合,是上下两行关系,不像联结那样并列一行;
select id,old from student union select id,score from score order by student_id;
二、插入
insert-select 组合:
insert into student(id,name,old)
select * from student; //可以进行多行插入,查询到多少就插入多少。
三、更新
update student set name='张晨鹏',old='21' where id='1' ; //where条件必须写,不然会全部更新
四、删除:
delete from student where id='1' ; //where 条件必须写,不然会全部删除数据,不过只是删除数据,不是表
如果要删除表所有数据, 使用:truncate table table_name 效率更高。
五、表结构:新增、更新、删除
create table student(
id number not null primary key,
name varchar2 not null,
old number not null default(20) check(old>0 and old<25),--这里的default条件有问题
inputdate date not null default (sysdate)
)
alter table student add score number not null;
drop table student;
六、视图、存储过程、事务处理
视图:
1.视图同表一样,也是数据库中一种对象,但它不像表数据那样,是实际存储在物理存储中的,而是从table 中
通过select查询到的数据的组合,也可以说是对查询语句的封装。(虚拟的表)
2.视图的意义:将一些复杂关联关系组合到的数据的这种关系保存下来,方便下次去查,(比如你大姨家夫侄子的老婆的舅舅这种
非常绕的组合关系,),另一方面,权限问题,可以对只有查看权限的用户,将一些敏感信息如密码等从表中屏蔽掉,只让他看
到一些普通信息。 (原话是隐藏复杂的sql关联,简化复杂的联结,过滤不想要的数据 )
3.视图的创建:
create view view_test as select id,name from student;
create view view_test2 as select * from score where score >=60;
存储过程:
1、存储过程:一个业务场景的实现,可能涉及到多条sql操作,为保证每次实现这个场景是,所有sql语句都准确执行,将这些sql
语句封装了起来。
2、编写存储过程比较复杂,没学???就没讲好么……
3、执行存储过程
excute addNewStudent(8,'红军','22','88'); //新增一个同学,录入基本信息和成绩。
事务处理:
事务:指一组sql语句;
回退:指撤销已执行的指定sql的过程;
提交:指将未存储的sql语句结果写入数据库表;
保留点:一个事务可能很多sql,在其中又添加标记位置,可以指定回退到标记位置;
开启事务:set transaction;
回退:rollback;
设置保留点:savepoint point1;
提交:commit;
游标:关于游标,不想学啊不想学,用不到啊用不到。
结果集:由sql查询所检索出的结果。
在结果集的基础上添加游标,可以根据需要滚动或浏览其中的数据
1.创建游标:
declare cursor stuCursor is
select s1.id,s1.name,s2.score from student s1,score s2 where s1.id=s2.studentid and s2.score>60;
2.打开游标:
open cursor stuCursor;
3.使用游标:fetch
4.关闭游标:close stuCursor;
#游标关闭后不能再使用,下次使用时不需要再声明,直接打开使用;
七、sql高级特性: 约束、索引、触发器
约束:管理如何插入或处理数据库数据的规则;
#引用完整性:即有关联性的表,将主表信息删除后,附表中有关的信息也应该删除掉(级联删除)
1.主键约束:唯一标识表中一行数据,不可变性,非空,唯一性,主键不更新修改
alter table student add constraint primary key (id);
2.外键约束:附表中一列,值必须为主表中主键,保证了引用完整性
创建表时创建:student_id number not null references student(id),
已有表创建:alter table score add constraint foreign key(student_id) references student(id);
3.唯一性约束:unique
4.检查约束:check
索引:为提高普通列的搜索效率,添加索引。
索引的意义:索引是因为其他列存储时是无序的,(就好比没有按a-z排序),提高了检索的效率,但降低了插入和更新效率
索引的创建: create index student_id_ind on score(student_id);
索引的实效性:索引的效率随着表数据的增加而变化,可能过几个月后索引就没那么好用了,需要重新修改;
#有些字段无需添加索引,像省别,就那么几十个,
触发器:跟sql语句相关联,比如在执行insert、update语句之前或者之后要执行什么操作。
//将所有录入的英文名首字母大写。
新建触发器:
create trigger student_name
after inert or update
for each row
bigin
update student set name=upper(name) where id =:old.id
end;
约束比触发器效率快,约束能做到的就用约束
sql必知必会-总结篇的更多相关文章
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会--建立练习环境
书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...
- 读书笔记--SQL必知必会12--联结表
12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《SQL必知必会》学习笔记(一)
这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...
- SQL 必知必会
本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...
- 0005 《SQL必知必会》笔记01-SELECT语句
1.SELECT基本语句: SELECT 字段名1,···,字段名n FROM 表名 2.检索所有字段,用"*"替换字段名,这会导致效率低下 SELECT * FROM 表名; 3 ...
- 你必知必会的SQL面试题
写在前面的话 本文参考原博<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 1>和<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 2>进行练习 ...
- 图灵程序设计丛书(SQL必知必会)笔记
SQL必知必会 第二课:检索数据 1.分页 (1).SQL Server 栗子 : select top 2 columns from tableName (2).Oracle 栗子 :select ...
随机推荐
- AngularJS高级程序设计读书笔记 -- 大纲篇
零. 初衷 现在 AngularJS 4 已经发布了, 楼主还停留在 1.x 的阶段, 深感自卑. 学习 AngularJS 的初衷是因为, 去年楼主开始尝试使用 Flask 开发自动化程序, 需要用 ...
- ASP.NET Core 源码学习之 Options[2]:IOptions
在上一篇中,介绍了一下Options的注册,而使用时只需要注入IOption即可: public ValuesController(IOptions<MyOptions> options) ...
- 百度地图 js api 实现 line 居中显示
项目中有个需求需要在百度地图的中心显示画的线,以前用过mapPanto这个方法,传入坐标就可以将地图平移到这个坐标,不过不知道如何获取线的中心点,看了别人的代码,有以下两个函数可以实现这个功能 get ...
- Linux操作数据库基本
连接数据库MySQL中每个命令后都要以分号;结尾1: mysql -h 192.168.10.250 -u root -p2:Enter password //要求你输入密码cug313@com3:s ...
- PHP容器--Pimple运行流程浅析
需要具备的知识点 闭包 闭包和匿名函数在PHP5.3.0中引入的. 闭包是指:创建时封装周围状态的函数.即使闭包所处的环境不存在了,闭包中封装的状态依然存在. 理论上,闭包和匿名函数是不同的概念.但是 ...
- js的DOM操作
ID选择器:document.getElementById("").innerHTML="" class选择器:var divc= document.getEl ...
- touchmover手机移动端的拖动
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name= ...
- ASP.NET Core 四种释放 IDisposable 对象的方法
本文翻译自<Four ways to dispose IDisposables in ASP.NET Core>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! IDispos ...
- hdu2410(水)
题意 如果两个数字除了带问号的位以外都相同,我们称这两个数可以相互匹配 给你两个数,其中第一个数字里有一些问号,问有多少个大于第二个数的数字可以和第一个数字匹配 一开始懒得读题,到网上搜题意,结果居然 ...
- 使用ant自动构建apk
最近因渠道过多,需要单独接入渠道支付sdk的渠道也很多,而首发在即.人手不足,所以着手了部分相关的工作,看了下目前的操作流程..无奈人比较懒,所以决定进行一波简化的技术,先考虑到了两种方案: 1)脚本 ...