1.0 什么是数据库

狭义:存储数据的仓库。

广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库。

另外一种说法:数据库是由表、关系、操作组成。

2.0 为什么要学习数据库

几乎所有的应用软件的后台都需要数据库。

数据库存储数据占用的空间小,容易持久化。

存储比较安全。

容易维护和升级。

数据移植比较容易。

简化对数据的操作。

3.0 数据结构和数据库的区别

数据结构是在系统软件级别研究数据的存储和操作。(内存)

数据库是在应用软件级别研究数据的存储和操作。(外部存储)

4.0 数据库中连接概念

5.0 对内存数据的操作,编程语言更加灵活;对于硬盘数据的操作,通过数据库管理软件更加容易。但是对于复杂的数据操作,当通过数据库语言没法操作时,通常把数据先写入内存通过编程语言处理以后,再存入数据库。

6.0 建议初学者从三个方面学习数据库

 数据库是如何存储数据的

字段、记录、表、约束

 数据库是如何操作数据的

insert、update、delete、TL-SQL、存储过程、函数、触发器

 数据库是如何显示数据的

select(查询)

7.0 创建数据库

8.0 删除数据库

9.0 数据库的备份和还原

10.0 数据库的分离和附加

11.0 用户的创建和密码修改

安全性→登录名

12.0 表以及表相关的基本概念

字段(也叫 列):模拟的是某一个事物的某一个静态的特征。

记录(也叫 元组):字段的组合,表示的是一个具体的事物。

表:记录的组合,表示的是同一类事物的集合。

表、字段、记录的关系:字段是事物的属性,记录是事物本身,表示事物的集合。

13.0 表的创建

create tabletabel_name(

字段名 数据类型 约束

);

注意:SQLServer 创建表的时候,最后一个字段的都好最好不写。如果最后一个字段带上逗号oracle会报错。

14.0 主键和外键

主键:能够唯一标识一个事物的一个字段或者多个字段的组合。

外键:是指另外表中的主键(也可以是唯一键)。包含外键字段的表示外键表。外键也可能来自本表的主键。

外键所在的表是子表(外键表),外键依赖的那个表叫做主表(主键表)。

通过外键约束从语法上保证了本事物所关联的其他事物一定是存在的。

事物和事物之间的关系是通过外键来体现的。

在进行删除操作的时候,有主外键关系的表之间,要先删除外键表,再删除主键表。如果先删除主键表,会报错,因为这会导致外键表中依赖的数据找不到。当然也可以先删除主外键关系,然后随便先删除那张表。

15.0 什么是约束

对一个表中的属性操作的限制叫做约束。

主键约束 primary key

外键约束 foreign key (id) references outTable (id) ;

检查约束 check (a>1000 and a<8000)

保证事物属性的取值在合法的范围之内。

默认约束 default ( ‘男’)

保证事物的属性一定会有一个值。

唯一约束 unique

主键不可以为null,但是唯一约束的字段是可以为null。

保证事物属性的取值不重复。

SQLserver1 唯一约束只允许有一列为null。

oracle 唯一约束允许多列为null。

非空约束 not null

保证该属性一定有值。

默认字段的值可以为null。

注意:约束可以组合使用

16.0 关系

关系的分类:

一对一:

一般可以把两个事物设计在一张表中;

也可以设计为两张表,通过一个关系表维护这两个事物。

也可以设计为两张表,在其中一个表中设置外键。

一对多:

一般在多的一方的表中增加一个外键。

多对多:

多对多必须新建一张关系表,把多对多关系转化为一对多关系。

关系表,有两个外键,分别来自多对多的两张表。

关系表的主键一般是联合主键,是各个字段组合形成的主键。

关系的实现:

通过外键来体现表和表之间的关系。

17.0 查询分析器显示行号

工具→选项

18.0 数据库关系图

19.0 查询 之 查询所有

– * 代表所有的列

select * from emp;

– 计算列和别名(as可以省略,别名用双引号,或者不用)

select ename, sal*12 as “年薪” from emp;

–查询字段可以是一个常量

select ename, sal*12 as “年薪”, 5, ‘aa’ from emp;

注意: oracle的别名不允许使用单引号,但是SqlServer却允许。

– SqlServer没有问题,但是oracel会报错

select *, e.ename from emp e;

– SqlServer 和oracel都执行成功

select e.*, e.ename from emp e;

20.0 查询 之 distinct

– distinct 去掉查询列表组合的重复,只能写在所有查询字段的前面

select distinct deptno from emp;

注意:distinct 对 null 的处理是多个null会输出一个。

21.0 查询之 between … and …

–不包含1500 和3000

select * from emp e where e.sal > 1500 and e.sal<3000;

–包含1500 和3000

select * from emp e where e.sal between 1500 and 3000;

–以下三条是等价写法

select * from emp e where e.sal >= 1500 and e.sal<=3000;

select * from emp e where not e.sal < 1500 and not e.sal>3000;

select * from emp e where not (e.sal < 1500 or e.sal>3000);

– not between…add…

select * from emp e where not e.sal between 1500 and 3000;

22.0 查询之 in

– in

select * from emp e where e.sal in (1500,2500,3000);

–等价写法

select * from emp e where e.sal = 1500 or e.sal = 2500 or e.sal = 3000;

– not in

select * from emp e where e.sal not in (1500,2500,3000);

–等价写法(!= 和<>都是不等于)

select * from emp e where e.sal != 1500 and e.sal <> 2500 and e.sal != 3000;

注意:not in 转化为逻辑表达式时是 and

23.0 查询之top

– top (oracle通过rownum)

select top 5 * from emp;

– 百分数如果不是整数,向上取整

select top 50 percent * from emp;

–注意:top一般是在最后执行,where等子句先执行

24.0 null

– 注意null 不能用=,!=,<>比较

select * from emp e where e.comm is null;

select * from emp e where e.comm is not null;

–因为null参与的表达式运算结果是null,因此要通过isnull函数避免,否则没有奖金的员工年薪为null

select ename, sal*12+isnull(comm,0) as “年薪” from emp;

25.0 order by 字段名 asc/desc

select ename, sal*12+isnull(comm,0) as “年薪” from emp order by 年薪desc;

26.0 like

– like(%代表个或多个字符,_代表一个字符)

select ename,deptno,sal from emp e where e.ename like ‘%king%’;

– 注意:字符的大小写有区别,实际开发中,一般把like两边的都转为大写或小写

select ename,deptno,sal from emp e where upper(e.ename) like upper(‘%king%’);

–第二个字符是A到F中的一个(模糊查询不仅是_和%,还有一些正则表达式匹配)

select * from emp where ename like ‘_[A-F]%’;

–模糊查询中的转义,通过escape 指定转义的字符,默认是\

select * from emp where job like ‘%_%’ escape ‘\’;

27.0 函数的分类

单行函数:输入一个行,返回还是一行。

多行函数:输入多行,返回是一行。聚合函数是多行函数。

常见聚合函数:

max() min() avg() count() sum()

select count(*)from emp; –返回所有的行数

select count(deptno) from emp; – 返回值,重复的部门编号也会被统计

select count(distinct deptno) from emp; –返回值,重复的部门编号只统计一次

select count(comm) from emp; –返回值为,说明为null的列不会被统计

–返回所有的行数,可以认为1 是在查询字段中添加的一个常量,统计这个常量的个数

select count(1) from emp;

–多个聚合函数可以同时使用

select max(sal),min(comm),avg(sal),count(*) from emp;

28.0 group by

–聚合函数和分组一块使用,是先分组,然后对分组进行聚合

–注意:查询的字段要不包含在聚合函数中,要不包含在分组子句中(非常重要)

–换句话说:使用group by 之后,select中只能出现分组house的整体信息,不能出现组内详细信息

select deptno, avg(sal) from emp group by deptno;

–按照多个字段分组,聚合函数统计的是最小的那个分组信息

select deptno,ename from emp group by deptno,ename;

–分组中有null,null也会被当做一组

select comm,count(1) from emp group by comm;

–默认也可以理解为这里是把当前整张表的数据为一个分组

select max(sal),min(comm),avg(sal),count(*) from emp;

29.0 having 对分组之后的数据进行过滤

select deptno, avg(sal) from emp group by deptno having avg(sal)>2000;

–(报错) 不能用别名avgsal,原因是条件执行在前。

select deptno, avg(sal) as avgsal from emp group by deptno having avgsal >2000;

–(报错) 分组以后没有ename这一列,当然也就不能再having中使用

select deptno, avg(sal) from emp group by deptno having ename like ‘%a%’;

–正确

select deptno, avg(sal) from emp group by deptno having count(ename)> 5;

–名字不包含a,输出平均工资大于的部门和平均工资

select deptno,avg(sal) from emp where ename not like ‘%a%’ group by deptno having avg(sal) > 2000;

–注意:having子句中不能使用查询列表中的别名.其实where子句中也不能使用。

–注意:where子句中不能使用聚合函数

– (报错)ORDER BY 子句中的列”emp.ename” 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。

select deptno, avg(sal) from emp group by deptno having avg(sal)>2000 order by ename;

30.0 连接

–笛卡尔积

select count(deptno) from emp; –14行

select count(deptno) from dept; – 5行

select count(1) from emp,dept; –70行14*5 = 70

select e.ename, e.deptno,d.deptno, d.dname from emp e ,dept d;

– 对笛卡尔积进行过滤14行

select e.ename, e.deptno,d.deptno, d.dname from emp e, dept d where e.deptno = d.deptno;

–内连接14行 3+5+6 = 14

select deptno, count(1) from emp group by deptno;

select e.ename, e.deptno,d.deptno, d.dname from emp e join dept d on e.deptno = d.deptno;

–查询工资等级

select * from emp e join dept d on e.deptno = d.deptno

join salgrade s on e.sal between s.losal and hisal;

–输出工资最高的前三名的员工的姓名,工资.工资等级,部门名称,员工的名字中不包含a

select top 3 ename,sal,grade,dname

from emp e join dept d on e.deptno = d.deptno

join salgrade s on e.sal between s.losal and hisal

where ename not like ‘%a%’

order by e.sal desc;

– 查找每个部门的编号,该部门所有员工的平均工资平均工资的等级

select deptno,avgsal,grade

from (select deptno, avg(sal) avgsal from emp group by deptno) t

join salgrade s on t.avgsal between s.losal and hisal ;

–查询出每个员工的领导的姓名

select e1.empno,e1.mgr,e1.ename, e2.empno,e2.ename

from emp e1 join emp e2 on e1.mgr = e2.empno;

–查询出emp表中所有领导的姓名

select * from emp where empno in (select mgr from emp);

–左外连接(左外连接的结果行数可能等于或大于左表的函数)

select * from emp e left join dept d on e.deptno = d.deptno;

–右外连接(同理)

select * from emp e right join dept d on e.deptno = d.deptno;

31.0 identity 表示主键的值自动增长。

语法格式:identity[(m,n)]

m:表示的是初始值,n表示的是每次自动增长的值。

要么同时指定m和n的值,要么m和n的值都不指定,取默认值(1,1)。

注意:数据类型为整型的列才可以被定义成标识列。

dbcc checkident(‘emp’,reseed,3) 表示把表emp的自动增长的初始值设置为3。

给identity字段插入数据

set identity insert scott.dbo.dept on;

表示把数据库scott中表dept中给identity修饰的字段插入值的权限打开;

insert into dept (deptid) values(100);

32.0 视图

33.0 事务

begin transaction 开始事务

commit transaction 提交事务

rollback transaction 回滚事务

事务的三种运行模式:

 自动提交事务

每条单独的语句都是一个事务,如果成功执行,自动提交事务;如果错误,则自动回滚。SqlServer采用的就是这种模式。

 显式事务

每个事务均以begin transaction 语句显式开始。

以commit 或 rollback显式提交和回滚事务。

 隐式事务

注意:在SqlServer中不能单独的使用commit,rollback语句。

事务的特性:

 原子性,

 一致性

 隔离性

 持久性

34.0 分页

–分页查询

select top 3

from emp

where empno not in (select top 5 empno from emp order by sal desc)

order by empno desc;

–分页模式

select top n  from A where A_id not in (select top(m-1)* A_id from emp);

表设计()

主键设计一般单独添加一列,这一列不能是有实际意义的事物的属性。

强烈建议不要使用有业务含义的字段充当主键。

主键命名一般是:表名ID,或者是 表名_id。

郝斌 mysql_郝斌 SqlServer2005 学习笔记相关推荐

  1. tp5.0 mysql_《TP5.0学习笔记---对Mysql数据库的操作(一)》

    一.连接数据库 在ThinkPHP框架中,它为我们提供了非常方便的方式连接数据库,我们可以通过简单的修改配置文件就可以连接上我们的mysql/oracle/SQL Server. 在我们的PHP中,大 ...

  2. biee mysql_【Oracle BIEE学习笔记一】Oracle BIEE简介 | 学步园

    一.Oracle BIEE架构 两大任务: 1.解释逻辑SQL查询和对适当的数据源写入相应的物理查询: 2.对物理结果集进行变换和组合,并执行最终计算. 二.Oracle BI资料库中的三层结构 1. ...

  3. Java入门学习笔记——郝斌(一)概述及面向对象

    Java入门学习笔记--郝斌 1.Java概述 java的起源和发展 java的特点 java的应用领域 java学习目标 环境变量的设置 为什么要设置path? path的设置 有关classpat ...

  4. 【郝斌老师数据结构学习笔记 day 3】

    目录 前言 一.连续存储数组的算法演示 二.typedef 的用法 总结 前言 数据结构的学习笔记,记录第三天 一.连续存储数组的算法演示 线性结构[把所有的结点用一根直线穿起来] 连续存储[数组] ...

  5. 【郝斌老师数据结构学习笔记 day 6】

    目录 前言 一.算法 二.几种常见存储结构浅析 三.非循环单链表算法演示合集 总结 前言 数据结构的学习笔记,记录第六天 一.算法 算法: 狭义:算法和数据的存储方式密切相关 广义:算法和数据的存储方 ...

  6. 【郝斌老师数据结构学习笔记 day 7】

    目录 前言 一.栈的定义 二.栈的分类 三.栈的一些算法 四.栈的日常应用 总结 前言 数据结构的学习笔记,记录第七天 一.栈的定义 定义:一种可以实现 "先进后出" 的存储结构 ...

  7. 郝健: Linux内存管理学习笔记-第5节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 摘要 ...

  8. 郝健: Linux内存管理学习笔记-第6节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 郝健 ...

  9. 郝健: Linux内存管理学习笔记-第4节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 摘要 page cache free命令的详细解释 ...

  10. activiti7关联mysql_学习笔记:一个MySQL实例有多个Activiti数据库问题

    学习笔记:一个MySQL实例有多个Activiti数据库问题 使用SpringBoot + activiti6 搭建审批流项目,数据库使用的是MySQL.且我的数据库下存在多个activiti相关的数 ...

最新文章

  1. 63.不同的路径II
  2. 图灵奖大佬Hinton团队CV新作:用语言建模做目标检测,性能媲美DETR
  3. Nature今年首次撤稿给了微软:研究团队成员自曝删改不利数据,量子计算重大进展是假的...
  4. 混合APP开发框架资料汇总
  5. [codevs 1298] 凸包周长 [codevs 3201] 奶牛代理商 XI
  6. 【[SDOI2014]数数】
  7. [react] React根据不同的环境打包不同的域名?
  8. Gym - 100989J -(DFS)
  9. Linux 服务器拷贝远程文件 SCP
  10. spring MVC中获取request和response
  11. YTU 3003: 括号匹配(栈和队列)
  12. spring cloud config-server 高可用配置中心
  13. mysql数据库任务计划_MySQL计划任务(事件调度器) Event Scheduler介绍
  14. 《DirectX 9.0 3D游戏开发编程基础》-第一篇-VS2010下安装配置DirectX9 runtime和SDK
  15. 【设计模式】-状态模式->APP抽奖活动(源码与类图解析)
  16. 【小程序开发之制作首页】
  17. 计算机用户域怎么删除,如何删除域内非活动计算机账号?
  18. vue 二级路由嵌套和二级路由高亮问题
  19. g4560和二代i5_两款处理器奔腾G4560和i5-7400差距?
  20. 用AI语音机器人有哪些需要注意事项

热门文章

  1. 【超图+CESIUM】【基础API使用示例】34、超图|CESIUM - 绘制光流流光线段
  2. jszip在线解压压缩文件
  3. CCNA考试题库中英文翻译版及答案6
  4. SQL教程——常见的约束类型
  5. 专用控制芯片的步进电机运动控制系统的设计理念概括
  6. 综述---图像处理中的注意力机制
  7. SACD ISO镜像中提取DSDIFF(DFF)、DSF文件
  8. 2002年考研数学一解析pdf
  9. oracle awr 定期,Oracle 每天自动生成AWR报告
  10. OneNote 提示不能使用个人账户登录( 亲测可用)