第一阶段 Lesson 8 SQL(11.30) SQL(结构化查询语言) 4
² 名词解析(DB,DBMS,DBO,DBA,冗余,不一致) 4
2,逻辑结构划分(master,model,msdb,tempdb) 6
² 当前几种流行的数据库:(SQL,DB2,Oracle,MYSQL) 6
1. SQL语言的分类:(DDL,DQL,DCL,DML) 7
第一阶段 Lesson 9 SQL (12.5)数据库的建表,增改查 9
1. SQL中的数据类型有以下几种(数字,日期,字符串,Unicode字符串) 10
² SQL的约束:(实体,域,引用完整性,自定义完整性) 11
² 建立约束的模板(主键,检查,默认,外键,唯一约束) 13
第一阶段 Lesson10 SQL_3(12.8)表达查询,分组,汇总,函数 18
3,还有一个要注意的.如果 我要查询一个 hehe_haha ,hehe_xixi这个怎么查询呢? 19
² SQL关键字(top,between,not ,not between,in ,distinct ,like) 20
² 关于时间的函数,这个是最麻烦的.也是最难的.... 22
第一阶段 Lesson11 SQL_L4_12.26 多表查询和子查询 23
SQL 入门笔记
第一阶段 Lesson 8 SQL(11.30) SQL(结构化查询语言)
² 经验(重要,所有的经验都要掌握):
1,一个优秀的代码,全选后可以运行,不会报错 2, go的使用(有go 的话系统才可以知道这个上面时候运行..不然系统就默认当时间片轮转到才运行,所以go 要记得加) 3, 在SQL中null不可以用等号来判断...只能用is null \ is not null 4,当你要拷贝走数据库文件,又不想关闭数据库软件.就在那个数据库那里右键,分离,这样就Ok了...要在加载进来.就右键加载进来....
|
² 名词解析(DB,DBMS,DBO,DBA,冗余,不一致)
数据库(DB):不仅仅可以存放表,还可以存放视图,存储过程,管理... 数据库管理系统DBMS: 包括数据库(DB)还有数据库管理员(DBA).. DBO:数据库所有者 DBA:数据库管理员 冗余:数据重复 不一致:冗余产生数据的不一致
|
² 数据库文件的分类
1,物理文件划分(数据,日志文件)
1.1:数据文件 1.1.1:主要数据文件(*.mdf) 有且仅有一个 1.1.2:次要数据文件(*.ndf) 可以是没有.也可以有多个 1.2日志文件(*.ldf):可以一个或者多个
|
2,逻辑结构划分(master,model,msdb,tempdb)
2.1:master:核心组件->保证Sql正常运行 2.2:model:模板->有19个文件 2.3:msdb:警报警告(eg:存储的数据内容大小已经达到上限...) 2.4:tempdb:临时数据库->存放中间数据
|
² 当前几种流行的数据库:(SQL,DB2,Oracle,MYSQL)
1,MS(微软)公司的SQL --->SQL Server2008 -->.net 2,IBM: DB2 -->走大型垄断企业的数据库(eg:烟草...) 3,甲骨文:Oracle -->大型企业 (eg:银行,证劵...) 4,非商业 MYSQL(IBM)-->免费,在IBM,Oracle官网可以下载 -->应用于小型站点 过时的:access sysbase
|
=========================================
² SQL与C语言等编程语言的区别:
SQL只能用在数据库.... T-SQL :标准化SQL SQL-plus : 增强版SQL |
1. SQL语言的分类:(DDL,DQL,DCL,DML)
1,DDL(database define language):数据库定义语言:eg:create drop ... 2,DQL(database query language):数据库查询语言:eg:select 3,DCL(database contorl language):数据库控制语言: eg:权限管理 4,DML(database manage language):数据库操作语言 eg:insert update |
2. 数据库的发展历程:
1,人工管理阶段 2,文件管理接阶段 3,数据库管理阶段-->3.1:关系型数据库 -->SQL Server 3.2:关系-对象数据库 -->Oracle
|
3. 文件组:(mdf,ndf文件组)
1,主要文件组:*.mdf(存放的类型文件) 2,用户自定义文件组 *.ndf |
² 实例:创建一个数据库的良好代码(掌握)
下面我们来一个实例,就是创建数据库中比较好的一个代码:
--使用核心库 use master go --如果存放的文件目录不存在,就创建一个,如果存在就不执行...不会报错 --xp_cmdshell这个用不了,要在服务器右键->方面->外围应用配置器->xpcmdshellEnabled-->true exec xp_cmdshell 'md d:\1130' go --如果数据库存在,就删掉 if DB_ID('db_1130') is not null drop database db_1130 go --创建数据库的基本操作 create database db_1130 on primary( name='zhongxia', filename='D:\1130\zhongxia.mdf', --不写大小默认为MB,当然你可以写GB,TB... size =3, maxsize=5, filegrowth=10% )log on( name='zhongxia_log', filename='D:\1130\zhongxia_log.ldf', size =3, maxsize=5, filegrowth=10% )
|
第一阶段 Lesson 9 SQL (12.5)数据库的建表,增改查
² 经验(重要)
1,建表的时候最好考虑用什么数据,因为用不恰当的数据会浪费空间 2,每一个表都要有联系,没有联系的表是没有意义的.. 3,把做表和做约束分开来做...看起来清晰,容易理解 4,字段最好用 [ ] 扣起来 5.注意:主表中不能删除从表的外键约束,只有级联删除才可以,但是级联删除有一个弊端,就是删错数据就不好恢复. |
===========================================
² 知识点:
1. SQL中的数据类型有以下几种(数字,日期,字符串,Unicode字符串)
1,精确数字:tinyint(0~255),smallint(-32768~32767),int(2^31的大小),bigint 2,近似数字: real(10^-38) float(10^-308) 就是小数点后面的位数不一样, 记住SQL没有double这个类型 3,日期,时间:datatime(1953.11~9999.12.31,精确到0.003,0.007,0.000(比如0.002就会舍入到0.003)) datatime2(0000.1.1~9999.12.31)(精确到100纳秒) smalldatatime(1990.1.1~2079.6.6精确到分钟) 4,字符串: char(固定长度,1~8000个) varchar(可变长度1~8000个) 如果大于8000个用text 5,Unicode字符串(中文字符串):nchar,nvarchar 一个汉字占占两个字节,所以nchar(10)就占了20个字节, 而char(10)就占10个字节 在国际化开发软件中要用Unicode的字符串,不然无法显示中文......... |
2. 建表的的模板
create table 表名( |
² SQL的约束:(实体,域,引用完整性,自定义完整性)
1. 实体完整性约束(主键约束,唯一约束,标识列)
1,主键约束(PK):特点:不重复,不为空,每一个表都要有一个主键--primary key(...) 2,唯一约束(UK):特点:不重复,一个表可以有多个唯一约束,但是最多只能一个为空(两个为空就不唯一了.因为空==空) ..unique 3,标识列: 自动增长,种子N,增长量x ,只能用在整型中---identity(100,1) 初始值100,一次自增1 |
2. 域完整性(非空,默认约束,检查约束,外键约束)
1,非空 not null 2,默认约束(DF): default 值 for (列名) 3,检查约束(CK): check(条件) 4,外键(FK):外键创建在从表中,连接到主表中的主键----foreign key ..references .... |
3. 引用完整性约束
1,外键:还没讲
4. 自定义约束(下学期学--->触发器)
² 建立约束的模板(主键,检查,默认,外键,唯一约束)
alter table 表名 add constraint 约束名(名字开头用约束的字母打头 eg: PK_ID ,FK_ID) 具体的约束 go |
1. 自增
create table user_info |
2. 建立主键约束的模板
alter table StuInfo add constraint PK_SID primary key([SID]) go |
3. 建立默认约束
alter table StuInfo add constraint DF_Sex default 1 for [Sex] go |
4. 建立检查约束
alter table StuMark add constraint CK_Score ---------------------------------这个不会SQL的写法,可以用另外一个------check(Score>=0 and Score<=100) check(Score between 0 and 100)---这里必须从小到大.最好用这个 go |
5. 外键约束
alter table StuMark add constraint FK_ID foreign key( [ID] ) references StuInfo( [ID] ) go |
6. 唯一约束
alter table StuInfo add constraint CK_SFZ unique ( [SFZ] ) |
² DML:(增加,删除,修改)
1. 单条插入
insert into 表名 values(......表中所有的值(除了自动增长的))
eg: insert into StuInfo values('YL',default) 就算是默认的也要写default占位 |
2. 多条插入
insert into 表名 select 值1,.....值n union select 值1,.....值n union .... select 值1,.....值n go //注意这个多条插入不可以用默认值...就是不可以写default eg: insert into StuInfo select 'YL',1 union select 'ZX',0 go |
3. 从现有的表申城新的数据
select * into 新表名 from 旧表 [where 筛选] //这个代码要是运行两次就会出错,因为会显示新表已存在 |
4. 删除
delete from 表名 -----只是删除数据,不删除表,,删除表的用drop [where 筛选] |
5. 修改
update 表名 set 字段1=...,字段2=..... [where 筛选] eg: update StuMark set Score+=5 update StuMark where SName in('zs','yz','aaa'....) 当然也可以是 not in(除了这几个) |
第一阶段 Lesson10 SQL_3(12.8)表达查询,分组,汇总,函数
² 注意事项
1,where 和having的区别?
where是用于原始字段的过滤,(不是原始的字段就不行) having主要用于聚合函数的汇总过滤,虽然这个原始字段也是可以用的,但是不推荐,因为效率比where低 所以尽量少用having,能不用尽量不用(where 能实现的having 都能实现,但是效率低 ) |
2,count(*)和count(字段名)的差别
第一个会输出全部的行,,而第二个如果遇到为Null的,就不会数出来, |
3,还有一个要注意的.如果 我要查询一个 hehe_haha ,hehe_xixi这个怎么查询呢?
where name like 'hehe[ _ ]%' 要用这样,因为[ _ ] 这个代表的是一个下划线字符 |
今天教了挺多数据库的东西,很多都是我不懂得。所以这一章必须要好好学习。。。
² 查询
1. 模板
select 字段名..... from 表名 where 条件(这里只能是字段名才可以,不可以是别名) group by 分组 having 条件 order by 字段名/别名/字段名组合 desc(降序) 这些顺序固定式这样的,不可以改变,就比如,where不可以放在group by下面.要固定上面的顺序 |
2. 取别名的方法:
1,select 别名=原始字段/字段组合/聚合函数 from 表名 2,select 原始字段/字段组合/聚合函数 别名 from 表名 3,select 原始字段/字段组合/聚合函数 as 别名 from 表名(Oracle不能加 AS) |
3. 怎么连接两个字段的值,
eg: select 姓+名 as 姓名 from 基本信息表 然后加可以用,加减乘除都是可以的,(能运算的只有整型) 除了+ |
² SQL关键字(top,between,not ,not between,in ,distinct ,like)
top:取出查询出来的前几个值/前百分之几的值 用法: select top 3/top 30 percent * from tablename
between: 从n(小) and m(大) (范围打击) not:把这个条件取反
not between :不在..范围内(不单独使用)
in:在这几个值中的一个(定点打击) where name in('hehe','haha'....)
distinct:查询的时候,只输出不重复的字段 eg:select distinct Id from tablename
|
like:模糊查找.(只针对于字符串)
select * from table where name like 'hehe%' like中有几个通配符:
|
² 分组(难点)
这个是一个重点,.也是一个难点
1. 格式:
group by 分组 having 聚合函数的过滤 |
2. 注意事项:
1,select除了聚合函数外,其他字段都要跟在group by 分组中 2,对聚合函数进行过滤,用having 而不是用where |
3. 聚合函数:
1,MAX(字段/字段组合) ---取最大值 2,MIN(字段/字段组合) --- 取最小值 3,AVG(字段/字段组合) ---取平均值 4,SUM(字段/字段组合) ---求和 5,COUNT(字段/字段组合) --计算行数 |
² 排序
order by 字段名/字段组合 desc(降序,默认升序) |
² 关于时间的函数,这个是最麻烦的.也是最难的....
getdate() 获取当前时间 ------>不确定函数,因为每次运行的结果是不一样的 year(time) 返回年 month(time) 返回月 day(time) 返回天数
datediff(类型(返回天(dy)还是年(yy)?),开始时间,结束时间)
convert(转换出来的类型,表达式,类型(看帮组文档)) eg:convert(varchar(10), time,102(这个是YYYY.MM.DD))
datepart(类型,时间) 获取时间的一部分 这个类型可以查帮助文档 |
第一阶段 Lesson11 SQL_L4_12.26 多表查询和子查询
今天讲了一个SQL的多表查询和子查询
² 多表查询和子查询的关系?
多表查询可以做到的,子查询都可以做到,子查询思路比较符合正常人的思路,但是代码稍微长一点 |
² 多表查询(内部,外部,自链接查询)
1. 内部链接查询
: select * from 表名 a inner join 表名 b on a.XX = b.XX 内部链接的可以优化为以下这样----这个比较方便 select * from 表1 a,表2 b ,,, where a.XX = b.XX |
2. 外部链接查询(左右链接查询)
(1). 左链接查询: select * from 表名 a left join 表名 b on a.XX = b.XX
(2). 右链接查询 : select * from 表名 a right join 表名 b on a.XX = b.XX
|
3. 自链接查询
select * from 表 a join 表 b on a.XX = b.YY |
² 子查询(效率和多表查询差不多,但是思路清晰)
子查询的思路很清晰,解题的路子很明确.不易出错,但是会比较长一点..多表查询和子查询的效率差不多. |