SQL server2008零基础学习

时间:2024-02-23 22:23:20

SQL 基础

数据库简介:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

数据库常见产品

clip_image002

SQLServer数据库

美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。

其主要特点如下:

(1)高性能设计,可充分利用WindowsNT的优势。

(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。

(3)强壮的事务处理功能,采用各种方法保证数据的完整性。

(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。 SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。

安装SQLServer

启用SA用户远程登录

设置密码

clip_image004

开启SA用户。

clip_image006

clip_image008

点击属性,启用远程连接。

clip_image010

重启服务,使其生效。

命令:services.msc

clip_image012

TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING

1433端口是开启的。当我们关闭服务后,端口也将关闭。

数据库语言

数据查询语言DQL

DQL:(Data Query Language) SELECT 数据查询语言

数据操纵语言DML

如insert,delete,update,select(插入、删除、修改、检索)

数据定义语言DDL

如drop,alter,truncate等都是DDL

数据控制语言DCL

DCL(Data Control Language)是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

创建第一个数据库

新建数据库

clip_image014

限制增长:

clip_image016

数据库的文件后缀

ydxx.mdf

日志文件后缀

ydxx _log.ldf

clip_image018

数据类型

clip_image020

第一大类:整数数据

bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte.

int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1.

smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1

tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1

第二大类:精确数值数据

numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化.

decimal:和numeric差不多

第三大类:近似浮点数值数据

float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308.

real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38

第四大类:日期时间数据

datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节.

smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节.

第五大类:字符串数据

char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上.

varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉.

text:长宽也是设定的,最长可以存放2G的数据.

第六大类:Unincode字符串数据

nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节.

nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节.

ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.

第七大类:货币数据类型

money:记录金额范围为:-92233720368577.5808至92233720368577.5807.需要8 个字节.

smallmoney:记录金额范围为:-214748.3648至214748.36487.需要4个字节.

第八大类:标记数据

timestamp:该数据类型在每一个表中是唯一的!当表中的一个记录更改时,该记录的timestamp字段会自动更新.

uniqueidentifier:用于识别数据库里面许多个表的唯一一个记录.

第九大类:二进制码字符串数据

binary:固定长度的二进制码字符串字段,最短为1,最长为8000.

varbinary:与binary差异为数据尾部是00时,varbinary会将其去掉

image:为可变长度的二进制码字符串,最长2G.

主键

在相续建立数据库

分离数据库表,表名:bj(班级的意思)

完善表单

基础查询

SQL 注释(不执行)

第一种:单行

select * from bj --select * from bj

clip_image022

第二种:多行

select * from bj /*select * from bj*/

clip_image024

查询所有:

Select * from 表名

select * from bj

clip_image026

查询指定列

select 列名,列名 from 表名

select name,sex,age from bj

clip_image028

条件查询 where字句

SELECT 列名 FROM 表名 where 条件

select*from bj where name=\'羊大仙\'

clip_image030

查年龄大于10岁的所有记录

select * from bj where age>10

clip_image032

查询所有人的数量(count 聚合函数)

select COUNT(*) from bj

clip_image034

范围查询(between)

select*from bj where id between 2 and 8

clip_image036

查询所有不等于23岁的记录

select * from bj where age<> 23

clip_image038

模糊查询(like)

1,百分号代表所有,但不包括空

select * from bj where address like\'%\'

clip_image040

2,匹配中间

select*from bj where phone like \'%22%\'

clip_image042

3.查询姓名中包含姓羊的

select * from bj where name like\'%羊%\'

clip_image044

4,查询电话号码中包含“9 ”的

select * from bj where phone like\'%9%\'

clip_image046

,5匹配开头(匹配电话号码前包含“1”的)

select*from bj where phone like \'1%\'

clip_image048

6.匹配结尾(匹配电话号码后结尾包含“4”的)

select*from bj where phone like \'%4\'

clip_image050

7,匹配开头和结尾(开头为“1”,结尾为“4”的)

select*from bj where phone like \'1%4\'

clip_image052

8,匹配单个字符(匹配一个后面为33的一个数)。

select*from bj where phone like \'_33%\'

clip_image054

9,匹配多个字符

select*from bj where phone like \'_[a-z-1-9]7%\'

1

clip_image056

10,不匹配

select*from bj where phone like \'_![8][!7]%\'

clip_image058

查询NULL

1,查询非null

select*from bj where phone is not null

clip_image060

2.查询null值

select*from bj where address is null

clip_image062

逻辑查询

1,AND查询

SELECT*FROM bj where name=\'羊大仙\' and sex=\'男\'

clip_image064

2,OR查询

SELECT*FROM bj where name=\'羊大仙\' or sex=\'女\'

clip_image066

3,OR进行查询

select * from bj where id=5 or id=7 or id=1

clip_image068

3,IN查询

select * from bj where id=5 or id=7 or id in(1,3,5,7)

clip_image070

4,NOT IN 查询

select * from bj where id not in(1,3,5,7)

clip_image072

TOP字句

1,查询前两行

SELECT TOP 3 * FROM BJ

clip_image074

2附加语句

2.1:查询前三行ID大于6 且ID不等于7不等于8的值

SELECT TOP 3 * FROM BJ where id>6 and id<>7 and id<>8

clip_image076

2.2:查询前三行ID大于6 且ID不等于7不等于8的值(优化版)

SELECT TOP 3 * FROM BJ where id>6 and id not in(7,8)

clip_image078

ORDER BY 语句

顺序语句

1,ACS(默认、正序)

SELECT * FROM BJ order by id ASC

select * from bj order by age,id

clip_image080

2,DESC(倒叙)

SELECT * FROM BJ order by id DESC

clip_image082

3,按照年龄从小到大查询

select * from bj order by age asc

clip_image084

4,按照年龄从大到小查询

select * from bj order by age desc

clip_image086

5.1,查询表的列(正确)

select * from bj order by 7

select * from bj order by 1,2,3,4,5,6,7

clip_image088

5.2,查询表的列(错误)只有7列

select * from bj order by 8

select * from bj order by 1,2,3,4,5,6,7,8

clip_image090

DISTINCT 去除重复数据

select distinct age from bj order by 1

clip_image092

数据库关系图

在数据库中,选择数据库关系图,右键 ,新建数据库关系图。然后进行选表

clip_image094

插入语句(INSERT INTO)

INSERT INTO bj (列1, 列2,...) VALUES (值1, 值2,....)

第一种:完整写法

insert into bj (id,name,sex,age,greadname,phone,address) values(\'14\',\'阿花\',\'女\',\'20\',\'九年级\',\'1878664624834\',\'重庆市南岸区南坪协信城\')

clip_image096

clip_image098

第二种:简单写法

(写法如下,但是id要是自动增长的情况是使用有效,id不是自动增长的话不能执行,本人id不是自动增长,所有无法执行,仅供参考参考)

insert into student values (\'小芳\',\'女\',\'18\',\'初中\',\'137694743\',\'北京市昌平区回龙观\');

clip_image100

更改列名显示名称(加as)

select COUNT(name) as\'姓名\' from bj where name=\'羊大仙\'

clip_image102

删除语句(DELETE 语句)

delete from bj where id=16

clip_image104

通过模糊查询删除姓胖的

delete from bj where name like \'胖%\'

语句执行前

clip_image106

语句执行后

clip_image108

clip_image110

修改语句(UPDATE)

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

将name为‘羊大仙’的修改为‘胖子’

update bj set name=\'胖子\' where name=\'羊大仙\'

执行语句前

clip_image112

执行语句后

clip_image114

clip_image116

clip_image118

or

clip_image120

把胖妹的的地址改成\'羊大仙的家里\'

update bj set address=\'羊大仙的家里\' where name=\'胖妹\'

语句执行前

clip_image122

语句执行后

clip_image124

clip_image126

把性别为男的年级全部改成学前班

update bj set sex=\'男\' where greadname=\'学前班\'

执行语句前

clip_image128

执行语句后

主外键

首先建立好两个数据库

第一个

clip_image130

第二个

clip_image132

开始建立主外键

clip_image134

clip_image136

clip_image138点击确认》然后关闭》最后shift+s保存 点击 》是

clip_image140

在右键数据库关系图》新建数据库关系图》选自己建立的哪啊两个表》添加》在自命名保存

clip_image142

查看数据库:yyyyy

clip_image144

查看数据库:ydxx

clip_image146

在数据库yyyyy中添加数据

clip_image148

查看(应该之前添加过数据有删除,所以这里的id从24开始增长的)

clip_image150

开始在ydxx表中插入外键关联

clip_image152

插入成功

clip_image154

查看

clip_image156

插入没有的id值

clip_image158

执行命令

clip_image160

结束。。。。。

更改列查询

select id as \'学好\',name as \'姓名\', age as \'年龄\',sex as \'性别\',gradeid as \'年龄\',address as \'地址\',phone as \'电话\' from ydxx

clip_image162

两表联查

第 一种:两表联查

select

ydxx.id as \'学号\',name as \'姓名\', age as \'年龄\',\'年龄\',address as \'地址\',phone as \'联系方式\',yyyyy.gradename as \'班级\'

from ydxx , yyyyy

clip_image164

子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。在此示例中,子查询用作 SELECT 语句中名为 MaxUnitPrice 的列表达式。

select

ydxx.id as \'学号\',name as \'姓名\', age as \'年龄\',sex as \'性别\',

address as \'地址\',phone as \'联系方式\',

(select gradename from yyyyy where yyyyy.id=ydxx.gradeid)

from ydxx

clip_image166

查询阿宗在那个班级

select yyyyy.gradename from yyyyy

where id = (select gradeid from ydxx where name = \'阿宗\')

clip_image168

查询二年级的所有学生

select name,age,sex,gradeid from ydxx where ydxx.gradeid=(select id from yyyyy

where

gradename=\'二年级\')

clip_image170

查询二年级的所有学生

select ydxx.name,ydxx.sex, ydxx.age from ydxx

where

ydxx.gradeid =(select id from yyyyy where gradename like \'二年级\')

clip_image172

嵌套子查询

select name,sex,(select (select 1+5)+2) as \'分数\' from ydxx

clip_image174

SQL 高级

SQL Top

SQL Like

SQL In

SQL Join

SQL Inner Join

SQL Union

SQL 函数

聚合函数

聚合对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用

聚合函数在什么地方才能使用

1、SELECT 语句的选择列表(子查询或外部查询)。

2、COMPUTE 或 COMPUTE BY 子句。

3、HAVING 子句

常用函数

SQL avg(平均)

SQL count(总数)

SQL first()

SQL last()

SQL max(最大)

SQL min(最小)

SQL sum(综合)

SQL Group By

SQL Having

SQL ucase()

SQL lcase()

SQL mid()

SQL len()

SQL round()

SQL now()

SQL format()

1、COUNT函数

1.1、查询所有班级总数,所有班级学生

select count(*) as \'学生总数\' from ydxx

select COUNT(*) as \'班级总数\'from yyyyy

clip_image176
2、MAX函数

2.1、查询班级里最大的年龄

SELECT MAX(ydxx.age)as \'最大年龄\' from ydxx

clip_image178

3、MIN函数

3.1 查询班级里最小的年龄

SELECT MIN(ydxx.AGE)AS \'最小年龄\' FROM YDXX

clip_image180

3.2、同时查询最大的年龄和最小的年龄

select MAX(ydxx.age) as \'最大年龄\',MIN(ydxx.age) as \'最小年龄\' from ydxx

clip_image182

4、AVG函数

4.1、查询平均年年

select AVG(ydxx.age) as \'平均年龄\' from ydxx

clip_image184

4.2、查询大于平均年年龄的学员

select name,age,sex,gradeid from ydxx where ydxx.age>(select AVG(ydxx.age) as \'平均年龄\' from ydxx)

clip_image186

5、SUM函数

5.1、查询所有学员年龄的总和

select sum(ydxx.age) as \'所有学员年龄的总和\' from ydxx

clip_image188

 

 

 

后带更新。。。。