SQL入门笔记

SQL 入门笔记 4

第一阶段 Lesson 8 SQL(11.30) SQL(结构化查询语言) 4

² 经验(重要,所有的经验都要掌握): 4

² 名词解析(DB,DBMS,DBO,DBA,冗余,不一致) 4

² 数据库文件的分类 5

1,物理文件划分(数据,日志文件) 5

2,逻辑结构划分(master,model,msdb,tempdb) 6

² 当前几种流行的数据库:(SQL,DB2,Oracle,MYSQL) 6

² SQL与C语言等编程语言的区别: 7

1. SQL语言的分类:(DDL,DQL,DCL,DML) 7

2. 数据库的发展历程: 7

3. 文件组:(mdf,ndf文件组) 8

² 实例:创建一个数据库的良好代码(掌握) 8

第一阶段  Lesson 9 SQL (12.5)数据库的建表,增改查 9

² 经验(重要) 10

² 知识点: 10

1.  SQL中的数据类型有以下几种(数字,日期,字符串,Unicode字符串) 10

2. 建表的的模板 11

² SQL的约束:(实体,域,引用完整性,自定义完整性) 11

1. 实体完整性约束(主键约束,唯一约束,标识列) 12

2. 域完整性(非空,默认约束,检查约束,外键约束) 12

3. 引用完整性约束 12

4. 自定义约束(下学期学--->触发器) 13

² 建立约束的模板(主键,检查,默认,外键,唯一约束) 13

1. 自增 13

2. 建立主键约束的模板 13

3. 建立默认约束 14

4. 建立检查约束 14

5. 外键约束 15

6. 唯一约束 15

² DML:(增加,删除,修改) 16

1. 单条插入 16

2. 多条插入 16

3. 从现有的表申城新的数据 17

4. 删除 17

5. 修改 17

第一阶段 Lesson10 SQL_3(12.8)表达查询,分组,汇总,函数 18

1,where 和having的区别? 18

2,count(*)和count(字段名)的差别 18

3,还有一个要注意的.如果 我要查询一个   hehe_haha ,hehe_xixi这个怎么查询呢? 19

² 查询 19

1. 模板 19

2. 取别名的方法: 19

3. 怎么连接两个字段的值, 20

² SQL关键字(top,between,not ,not between,in ,distinct ,like) 20

like:模糊查找.(只针对于字符串) 21

² 分组(难点) 21

1. 格式: 21

2. 注意事项: 22

3. 聚合函数: 22

² 关于时间的函数,这个是最麻烦的.也是最难的.... 22

第一阶段 Lesson11 SQL_L4_12.26 多表查询和子查询 23

² 多表查询和子查询的关系? 23

² 多表查询(内部,外部,自链接查询) 24

1. 内部链接查询 24

2. 外部链接查询(左右链接查询) 24

² 子查询(效率和多表查询差不多,但是思路清晰) 25

 

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
(user_id int primary key identity(1,1),     //主键初值为1,每次自增1,数值可变化,但要符合之前定义的类型
 user_name varchar(20) not null,
 ....
)

 

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, % 

代表任意个字符, 

 >=0

 'hehe%y'  

与hehe开头,与y结尾

 

 2, _ 

  代表一个字符  ,

  =1    

   'h_'    

 两个字节

 

   3, [] 

 代表括号内的一个

  =1   

  [1-9] 

 1-9中的一个数

 

 4,[^]  

代表不在括号内的一个

 =1     

 [^1,^3-9] 

不是1,不是3-9中的一个,(如果取反.两个都要加^这个符号,要取反的加)

 

                                                  

 

² 分组(难点)

这个是一个重点,.也是一个难点

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

 

² 子查询(效率和多表查询差不多,但是思路清晰)

子查询的思路很清晰,解题的路子很明确.不易出错,但是会比较长一点..多表查询和子查询的效率差不多.

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值