SQL-Server数据库

第一课

1、什么是SQL Server?
它是微软公司推出的关系型数据库产品,而且是一个全面的数据库平台,使用集成的商业智能工具提供企业级的数据管理。
2、什么是数据?
数据(data)是描述事物的符号记录。
计算机时代,数据是非常重要的。
在计算机上数据的管理发展经历了三个阶段:
a、人工管理阶段
b、文件系统管理阶段
c、数据库管理系统(一直到现在)
数据库系统的三代发展:
a、网状和层次数据库系统
b、关系型数据库系统
c、以面向对象数据模型为主要特征的数据库系统
------------------------
数据库相关的概念
DB:数据库--》长期存储在计算机内有组织的、可共享的数据集合。
DBMS:数据库管理系统--》是操纵和管理数据库的大型软件,用于建立、使用和维护数据库,是数据库系统的核心。
DBS:数据库系统--》是计算机系统中应用数据库的系统。
----------------------
SQL Server 2012
微软公司推出的关系型数据库管理系统,包含有:
1、企业版(收费的,很贵的)
2、标准版(收费的,便宜一点)
4、商业智能版(收费的,更便宜一点)
5、web版(收费的,及其便宜)
6、开发版(免费的)/精简版
----------------------
安装SQL Server
1、先安装数据库
2、安装外围管理工具
一般软件的安装:
有两种:
1、windows模式的安装
setup.exe文件---》设置(安装)
install.exe文件---》安装
绿色版---》只需要解压到指定目录
2、手工配置安装(一般是要设置环境变量)
===============================
SQL Server 默认端口:1433
SQL Server 的主要服务程序是:SQL Server(MSSQLSERVR)
-------------------------
服务程序和普通的程序不一样的地方就是服务程序一般不会关闭。而且是运行在服务器(软/硬 件)
----------------------------------
网络配置
端口号和IP地址以及是否可访问。
SQL Server 2012配置管理器中可以对服务进行
启动、暂停、停止、设置启动模式
----------------------------
启动SQL Server Management Studio
在服务器名称这里有一个下拉,点击后选择本地服务器,然后点击加号展开,选中计算机名称(就是服务器名称)。
如果是外部的或是远程的则需要使用IP地址。
连接登录服务器
两种登录模式:
1、Windows身份验证模式
2、管理员验证模式(*)
---------------------
1、Windows验证模式
这种模式适合当前系统中对数据库进行管理和配置、开发。
这种方式不适合远程操纵数据。
2、管理员模式
适合远程和当前系统都可以。
--------------------------
当你不小心忘记了sa的密码时或者某种情况下sa账户被禁用了的时候,如何开启sa账户。
1、使用Windows账户登录
2、登录成功后---》安全性---》登录名(此时你可以看到sa账户)---》右键点击sa账户在弹出的菜单中选择属性---》弹出sa属性设置对话框
a、如果是sa账户被禁用了
左边的选择页下面点击“状态”,在右边的主页面上选择登录下面的启用,就可以激活sa账户,设置sa是否允许连接到数据库引擎
b、如果你只是忘记了sa的登录密码
在常规选项,右边的主页面中可以看到密码,去掉强制实施密码策略
(强制密码策略:密码中要求密码长度,还要求包含数字、字母、字符)
对于自己开发而言没有必要搞那么麻烦,因此去掉勾。

第二课

1、数据库的物理结构
主数据文件有且只能有一个
辅助数据文件可以有N个
事物日志文件至少有一个
2、数据库的逻辑结构
表、视图、索引、存储过程、触发器等等。
3、数据库的分类
系统数据库:
作用:
应用于协助系统共同完成对数据库的相关操作,同时也是SQL Server的运行的基础。
master,主数据库(极其重要)
model,是模板(产生各种模板供用户使用)
tempdb,临时数据库
msdb,代理数据库
用户数据库
用户根据实际的需求自己创建的数据库。
演练使用图形界面创建数据库
步骤:
1、登录服务器
2、在数据库右击在弹出的菜单中选择新建数据库
数据库的名称要符合命名规范
数据库其他包括有:
逻辑名称(一般和数据库名称一致,如果是日志则会自动加上log)
文件类型:
行数据,日志
文件组:
primary主要的
初始大小:
指的是数据库的大小,默认为5MB、8MB
日志文件默认大小1MB
数据库文件的增长:
按百分比,按MB----》增长方式
增长的限制:a、无限制。b、有限制
物理数据库文件存放的路径
文件组是可以创建的。默认情况下只有行数据和日志
==========================
目前来说使用默认选项即可,因为目前我们是没有可能用到复杂数据库和海量数据的存储。
============================
修改数据库
1、修改数据库名称(快捷键:选中后F2)
右击数据库,弹出的菜单中选择重命名
2、扩大数据库
通过数据库的属性中文件的修改大小来实现。
3、收缩数据库
右击数据库名称,选择任务--》收缩---》数据库
---》文件
4、删除数据库
右击数据库名称,在弹出的菜单中选择删除
在弹出的对话框中勾选,删除数据库备份和还原(就是连数据库的备份都删除)一般情况下,我们会将备份转移存储到其他位置
勾选关闭现有连接(防止有其他用户正在使用,情景:如果有其他用户正在使用这个数据库就会出现连接断开,并且无法再次连接这个数据库。)

5、分离数据库
将数据库从服务器上删除,但是并不是物理删除,只是将数据库的文件从服务器上删除掉,但是并不会损坏物理的数据库文件
友情提示:在进行分离数据库前最好先看看数据文件存放的路径

6、附加数据库
提示:数据文件默认是只读的,因此在附加数据库前最好看看数据文件的安全属性,选择组或用户中的Users用户,此时可以看到下面对于这个Users的权限是只读的,修改为完全控制即可
提示:附加数据库时可以先将数据文件放到一个文件夹中然后直接对文件夹进行安全设置,设置为Users完全控制,这样文件夹里面的数据文件会同样解除拒绝访问的错误

原因:数据库文件默认会被数据库保护,因此分离后数据库文件任然是属于文件保护状态,传递或剪切或复制到其他Windows目录中时文件的保护是任然存在,此时是由Windows来保护的,所以附加前需要修改文件的安全设置,改为Users可以完全控制即可

第三课

1、数据表
二维的表格,由行和列组成.表是数据库的最基本的组成对象。由于在计算机中是有数据类型的,因此数据表也同样有数据类型和C#数据类型大致相同,有一定的区别。
数据类型用于限制列存放的数据,数据类型是为了能够精确的存放数据。
在学习C#的时候我们学过二维数组,其中我们将二维数组就看做一张二维表。因此我们在遍历二维数组时先循环行再循环列。
一行就是一条记录(每行描述的就是一个对象的信息)
2、数据表的分类
分为:
a、系统表(默认生成的,不用我们管理)
b、临时表(临时使用,用完就丢,存放在tempdb中)
c、用户表(我们自己根据需要定义的表格)
-------------------
SQL Server数据类型分类
1、数字类型
这个类型主要描述各种数字
2、字符串类型
这个类型主要描述各种字符串
分为:定长(固定长度,包含固定数量的字符)、变长(包含的字符数量可以随时改变)
3、日期时间类型
这个类型主要描述各种时间
4、其他类型
这个主要描述一些不常用的数据
这个里面bit使用比较多,主要用于描述性别
---------------------------------
在图形界面下创建数据表
1、登录数据库服务器
2、展开用户数据库(如果没有用户数据库则必须先创建)
3、展开用户指定的数据库,选择表,右键点击表在弹出的菜单中选择新建数据表
4、创建数据列:列名称、列的数据类型、是否允许空值
5、保存数据表,并且为表创建名称,反键刷新数据库
--------------
在图形界面下修改数据表
1、重命名
2、修改列
注意:当修改表完成后进行保存时(如果是第一次建表并且没有做其他的设置时,就会出现“阻止保存要求重新创建表的更改”这样一个警告提示),
解决方法:
在SSMS的菜单中点击工具---》选项---》设计器---》去掉阻止保存要求重新创建表的更改前面的勾
3、删除列
在设计器中选中某列,直接del键,删除,然后ctrl+s保存
在对象资源管理器中选中表的某个列,直接del键(在弹出的提示框下点击确定即可),删除。
在对象资源管理器中选中表的某个列,右键点击---》删除,在弹出的提示框中点击确定即可
----------------------------------
在图形界面下删除数据表
1、图形界面下,选中要删除的表,按下del键,弹出的对话框中点击确定即可
2、图形界面下,右击要删除的表,在弹出的菜单中选中删除,弹出的对话框中点击确定即可
3、注意:直接删除数据库,被删除的数据库里面所有的表都会删除。

第四课

1、什么是数据完整性?
所谓数据完整性其实就是确保数据的准确性和一致性。确保表内的数据不相矛盾,关联性不被破坏。
它的目的是为了更好的去管理数据,更准确的去搜索数据。
2、数据完整性的分类
实体完整性
域完整性
参照完整性
用户自定义完整性
3、完整性的实现
完整性的实现是通过约束实现(constraint)
约束的种类分为:
IDENTITY--->自增约束,指定的列中的值自动输入
PRIMARY KEY--->主键约束,每行中的唯一标识
UNIQUE--->唯一值约束,每行中的列不能重复
以上的三种约束是实体完整性
CHECK--->检查约束,指定的列可以接受的值
NOT NULL--->非空约束,指定的列中不能接受的空值
DEFAULT--->默认值约束,指定的列中如果没有值插入,则使用预先订好的默认值
以上的三种是域完整性
FOREIGN KEY--->外键约束,匹配另一张表的主键
以上的一种约束是参照完整性

第五课

回顾一下:
使用图形化界面维护数据库和数据表
可以创建数据库
可以重命名数据库
可以扩大和收缩数据库
可以附加ndf辅助数据库文件
可以删除数据库
可以分离附加数据库
==============
可以创建表
可以修改表
可以删除表
可以为表和表之间建立联系
可以为表增加完整性的约束
================================
接下来学习使用DDL管理数据库和数据表
1、什么是T-SQL
一种基于SQL的交互查询语言
T-SQL分类:
数据定义语言(DDL):CREATE、ALTER、DROP
数据操纵语言(DML):INSERT、UPDATE、DELETE
数据查询语言(DQL):SELECT
数据控制语言(DCL):REVOKE、DENY、GRANT
T-SQL的注释:
单行:--
多行:/* */
T-SQL的语法约定
约定了很多符号和写法,有一些和C#差不多的。
使用DDL语言创建数据库
语法:CREATE DATABASE 数据库名称
完全的语法示例:
USE [master]--使用master数据库
GO --开始

CREATE DATABASE [Student]--修改数据库名称
CONTAINMENT = NONE
ON PRIMARY --主要数据库
--下面的名称必须和数据库名称一致,里面的N代表国际编码
(
NAME = N‘Student‘,--数据库名称
FILENAME = N‘g:\Student.mdf‘ , --数据文件名称和物理路径
SIZE = 4160KB , --初始大小
MAXSIZE = UNLIMITED, --最大大小限制,这是无上限
FILEGROWTH = 1024KB --这个是增长量
)
LOG ON --日志文件
(
NAME = N‘Student_log‘, --日志文件名称
FILENAME = N‘g:\Student_log.ldf‘ , --日志文件物理路径
SIZE = 1040KB , --初始大小
MAXSIZE = 2048GB , --最大大小
FILEGROWTH = 10% --增长量
)
go--开始
================================
教你一招:
右键选中某一个已有的数据库,在弹出的菜单中,选择:
编写数据库脚本为-----》CREATE到-----》新查询编辑器窗口
此时SSMS会根据数据库逆推出标准的脚本代码
这时候你就可以挑选有用的代码,将无用的代码给去掉,从而得到标准的创建代码,然后进行一些修改即可
可选参数可以以任意顺序写,而不仅是上面显示的顺序。
创建数据库就到这里
========================================
删除数据库
语法:
DROP DATABASE 数据库名称
示例:
--删除数据库
drop --进行删除操作
database --需要删除的类型
Student --要删除的对象
-------------------
删除数据库就到这里
=======================
使用DDL管理数据表
创建数据表的语法:
CREATE TABLE 表名
(
列名1 数据类型 约束,
列名2 数据类型 约束,
[.....n]
)
注意:
表一定是存放在数据库里面,因此创建数据表时必须先选定数据库,否则会将表创建到其他的数据库中。
示例:
use [Student]--使用Student
go
--创建学生信息表
create table StudentInfo
(
StudentID --列名
int--数据类型
primary key--主键约束
identity(1,1)--自动增长约束
not null,--非空约束
StudentName nvarchar(20),
Birth date
)
go
注意:创建表时候一定要注意数据库,如果说你不确定那么可以使用use [数据库名称]
在SQL语法中没有 双引号(“”)
注意:代码编辑器中,选中哪段代码就会执行哪段代码。不选就全部执行
----------------------------
DROP TABLE 表名
注意:删除有关联的表时一定要先删除从表然后删除主表,因为从表存在的依据就是主表,所以如果先删除了主表则从表就没有了依据。

第六课

1、什么是DML
用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
DML包括三条语句:
INSERT---》用于向数据表插入数据
UPDATE---》用于更新数据表中已有的数据
DELETE---》用于删除数据表中已有的数据
--------------------
插入数据到数据表
语法:
INSERT INTO 表名(字段1,...字段n)VALUES(值1,...值n)
注意:值和字段一定要一一对应
INSERT INTO 表名 VALUES(值1,...值n)
注意:这就表示全部的字段都要插入数据,否则就会不匹配出错。(除了自动增长的标识列外)
--------------------------
UPDATE 更新数据
语法:
UPDATE 表名 SET 字段1=值1...字段n=值n [更新的条件]
[更新的条件] ----》[WHERE 修改条件表达式]
-----------------------------------------
DELETE 删除数据
语法:
DELETE [FORM] 表名 [删除条件表达式] -- 如果没有删除条件表达式则全部数据都将删除
注意:删除数据时要格外小心,不然可能会造成巨大损失。
--------------------
删除所有记录的语法:
保留日志的删除: DELETE [FORM] 表名
不保留日志的删除: TRUNCATE TABLE 表名
区别:
保留日志的删除执行后,日志中会有记录,当再次插入新记录时自动增长会继续累加(例如:删除前自动增长的数字是6,那么新纪录插入时。自动增长的数字就是6+1,会继续增长)
不保留日志的删除执行后,日志没有记录,当再次插入新纪录时自动增长会从头开始。

第七课复习

1、SQL SERVER 2012
微软公司推出的数据库产品。
基本术语:
数据:描述事物的各种符号、图像、图形、语音等都称为数据。
数据库(DB):是长期存储在计算机内有组织的可共享的数据集合。
数据库管理系统(DBMS):是操纵和管理数据库的大型软件、用于建立、使用和维护数据库,是数据库系统的核心。
数据库系统(DBS):是在计算机系统中应用数据库后的系统。
数据库管理员(DBA):是从事数据库管理系统的人员职位
使用SQL SERVER配置工具
数据库的服务状态有四种:启动、停止、暂停、重新启动
使用服务管理器
打开服务管理器的命令:services.msc
服务的启动类型:自动、自动(延迟)、手动、禁用
SQL SERVER 安装成功后的检测方式:
1、查看SQL SERVER 配置管理器,看看有没有SQL SERVER的服务(并且看看服务是否已经启动)
2、查看服务管理器,看看有没有SQL SERVER的服务(并且看看服务是否已经启动)
3、是用SSMS图形界面管理器登录SQL SERVER 在服务器名称中去浏览,查看本地服务
-----------------------------
SQL SERVER 登录有两种方式:
1、Windows身份验证(适合本机使用)
2、SQL SERVER 身份验证(常规使用模式)
---------------------------------
T-SQL
T-SQL语言按功能划分的分类有哪些?
DDL:数据库定义语言(CREATE,DROP,ALTER)
DML:数据操纵语言(INSERT,UPDATE,DELETE)
DQL:数据查询语言(SELECT)
DCL:数据库控制语言(REVOKE、DENY、GRANT)
T-SQL语言中的标识符、关键字。和C#里面差不多的
T-SQL语言中的注释
1、单行注释:--
2、多行注释:/**/
T-SQL语言中的数据类型、运算符。
T-SQL中的数据类型:
1、数字类型
2、字符串类型
3、日期时间类型
4、其他类型
T-SQL运算符:
1、比较运算符
2、算术运算符
3、关系运算符(AND和OR)
------------------------------
数据库的物理结构:
主数据文件有且仅有一个,扩展名是mdf
辅助数据文件可以有N个,扩展名是ndf
日志文件至少有一个,扩展名是ldf
数据库的逻辑结构
表、视图、索引、存储过程以及触发器、用户、角色等数据库对象
----------------------------
数据库的分类
1、系统数据库
master--主数据库
model--模板数据库
tempdb--临时数据库
msdb--代理数据库
2、用户数据库
用户根据需要自己定义的数据库
------------------
创建数据库
指定数据库的名称(必须自己指定)、
文件类型、初始大小、增长方式、保存位置等信息
创建方式:
1、使用图形界面创建
2、使用DDL创建
语法:
创建默认数据库
CREATE DATABASE 数据库名称
创建标准的数据库
CREATE DATABASE [数据库名称]
CONTAINMENT = NONE
ON PRIMARY
(
NAME = N‘数据库名称‘,
FILENAME = N‘主数据文件保存路径‘ ,
SIZE = 初始大小 ,
MAXSIZE = 最大大小,
FILEGROWTH = 增长量
)
LOG ON
(
NAME = N‘日志文件名称‘,
FILENAME = N‘日志文件保存路径‘ ,
SIZE = 初始大小 ,
MAXSIZE = 最大大小 ,
FILEGROWTH = 增长量
)
-----------------------------
维护数据库
修改、删除、分离、附加
图形界面下进行操作。
删除数据库使用DDL
DROP DATABASE 数据库名称
删除数据库时要注意断开连接
-----------------------------
数据表
是一张二维表包含行和列
每一个列就是一个字段
每一个行就是一条数据
数据表是在数据库中的逻辑对象
数据表可分为:
系统表、临时表、用户表(根据需要用户自己定义的)
使用图形界面创建数据表
要注意的是:
1、创建表时要注意所选择的数据库,不然就会将数据表建立到其他的数据库中
2、创建表时要注意列的数据类型和约束
3、保存时要注意表名要符合规范(见名之意,单词首字母大写)
使用DDL创建数据表
语法:
CREATE TABLE <表名>
(
{<列名> <数据类型> [约束]}, [,…n]
)
GO
使用DDL删除数据表
DROP TABLE 表名

----------------------------------
数据管理主要使用DML进行
1、INSERT
三种语法:
INSERT INTO表名(字段1,字段2,…,字段n) VALUES(值1,值2,…,值n)
INSERT INTO表名 VALUES(值1,值2,…,值n)
INSERT INTO表名 VALUES(值1,值2,…,值n),(值1,值2,…,值n),....
注意:值和列数量匹配(除了自动增长标识列外),值和列的数据类型一定要一致
2、UPDATE
UPDATE 表名 SET 字段1=新值,字段2=新值,…,字段n=新值) [WHERE 修改条件表达式]
注意:如果不加条件就会更新所有数据,因此在使用更新时一定要注意过滤条件
3、DELETE
DELETE 表名 [WHERE 删除条件表达式]
注意:如果不加过滤条件就会导致所有数据全部删除。
三种情况:
1、指定删除数据 (DELETE [FROM] 表名 WHERE 过滤条件表达式)
2、保留日志删除所有数据(DELETE [FROM] 表名)
3、不保留日志删除所有数据(TRUNCATE TABLE 表名 )

第八课

1、DQL是什么?
是T-SQL中数据查询语言
语句关键字:SELECT
语法:
SELECT [ALL|DISTINCT] select_list FROM tab_name
[WHERE <search_condition>]
[GROUP BY <group_by_expression>]
[HAVING <search_condition>]
[ORDER BY <order_expression>]
说明:
其中的[]里面是可有可无,<>里面的是一定要有
2、不带条件的查询
a、查询部分列的值
语法:
SELECT 列1,列2.。。。列n FROM 源表名
b、查询所有列的值
语法:
SELECT * FROM 源表名
c、为指定列添加别名(就是给列换一个好看的名称,但是不改变表的列名)
语法:
SELECT 列1 [AS] 别名,.... FROM 源表名
SELECT 列1 别名,.... FROM 源表名
------------------------------
简单条件的查询
语法:
SELECT [*|列名列表] FROM 源表名 WHERE 查询条件
比较条件查询
语法:
SELECT 查询列表 FROM 源表名 WHERE 表达式1 比较运算符 表达式2
逻辑条件
逻辑运算符的关键字:
AND,OR
当有多个条件进行过滤时使用逻辑运算符将这些条件连接起来。
语法:
SELECT 查询列表 FROM 源表名 WHERE 条件表达式1 AND|OR 条件表达式2
------------------------
列表条件
用于查询值是否属于或不属于指定的集合
关键字:
IN
NOT IN
语法:
SELECT 查询列表 FROM 源表名
WHERE 表达式[NOT] IN 值的列表

第九课

1、范围查询
在where子句中使用范围条件查询指定范围内的数据。
语法:
SELECT 查询列表 FROM 源表名
WHERE 表达式 [NOT] BETWEEN 值1 AND 值2
参数说明:
值1:范围下限
值2:范围的上限,值2必须大于值1
2、空值条件查询
在where子句中使用 is null关键字可以查询数据表中为null 的字段,反过来是is not null查询不为null的值
语法:
SELECT 查询列表 FROM 源表名
WHERE 表达式 IS [NOT] NULL
注意:
IS NULL 不能用=NULL替换,IS NOT NULL不能用!=NULL替换
NULL 不是‘‘ ,它就是一个空对象
3、消除重复项查询
在SELECT语句中使用关键字DISTINCT消除重复项,保证每个值只出现一次。
语法:
SEELCT DISTINCT 列名 FROM 表名
使用DISTINCT后,会在结果集中消除某一列的数据重复项,这种在统计一些数据时能够避免重复计算非常有用。
4、返回前N行数据的查询
在SELECT语句中可以使用TOP子句返回结果集中前N行数据
语法:
SELECT TOP N [PERCENT] 查询列表 FROM 源表名
说明:
其中,N是一个正整数,指定返回的行数,如果未指定PERCENT,N就是返回的行数,如果指定了PERCENT,N就是返回结果集的百分比。
5、查询排序
排序一般是两种:
正序:从小到大
倒序:从大到小
语法:
ORDER BY 排序表达式 [ASC|DESC]
ASC:正序
DESC:倒序
默认情况下:查询结果是正序显示
注意:查询结果本身不能也不会更改数据,正序和倒序仅仅是显示的结果
多个字段进行排序
主要参考第一个字段,当第一个字段排完后再进行第二字段排序。。。
注意:
排序必须在整条查询语句的最后出现。
和其他的联合使用
1、排序和TOP联合
2、并列显示
关键词:WITH TIES

第十课

1、模糊查询
就是当对条件不是非常准确或精确时,使用的一种查询方式。
使用情况:
例如:商品查询(手机),人名查询
语法:
SELECT 查询列表 FROM 源表名
WHERE 表达式 LIKE ‘匹配表达式字符串‘--PS:SQL 中没有双引号的
通配符:
“%” 可以匹配0个到多个任意字符
“_”只能匹配一个字符
“[]”匹配括号中的字符或范围中的一个
“[^]”匹配括号中没有的字符或范围
--------------------------------------
2、聚合函数查询
SUM--求和
AVG--求平均值
MAX--求最大值
MIN--求最小值
COUNT--求总记录数

第十一课

1、什么是分组查询
就是将相关的字段作为一个同组的数据进行查询。
语法:
GROUP BY 分组的依据
分组的依据就是要分组的字段(列名),如果是多个字段则用逗号隔开。
多个字段分组,分组的顺序左到右,先按第一个字段分组,在根据第二字段分组,以此类推。
注意:
GROUP BY 后面分组依据只能写原始列名,不允许写别名,也不能写聚合函数
2、分组后在过滤
HAVING子句,这个作用是在分组后进行再次过滤
HAVING 条件表达式
如果在分组或排序时要用条件来进行限制结果集时,where条件一定是在分组、having、排序之前。
注意:HAVING子句后面的条件表达式不允许出现列的别名
order by 可以用别名
--------------------------
HAVING和WHERE的区别
1、WHERE 是针对数据行进行过滤,HAVING是针对数据分组后在过滤的。
2、WHERE 关键字不能和聚合函数一起使用,HAVING语句可以,而且一般都是和聚合函数一起使用
3、WHERE关键字在分组前对数据过滤,HAVING子句只过滤分组后的数据,HVAING 语句通常都是和GROUP BY语句结合使用
-------------------------------
注意:使用分组查询时不能在查询列中使用*号,除非是count聚合函数中使用*,
聚合函数要么就单独使用,如果查询中出现了非聚合列和聚合列那么就一定要使用分组
如果分组时查询列中使用了* 则必须在聚合函数中进行计算或者所有列除聚合函数外的都要出现在group by子句中

第十二课

1、什么是多表连接查询
是因为数据表在设计时会根据存储的对象的不同而设计不同的表进行存储。
这就是分类存储。
因此当查询数据涉及到多个表时就会产生多表连接查询。
通俗的说就是多个表一起查询。
多表连接查询分为:
1、内连接查询
2、自连接查询
3、外连接查询
4、交叉连接查询
------------------
内连接查询
语法:
SELECT 查询列表 FROM 源表1 [INNER] JOIN 源表2 ON 源表1.列 = 源表2.列 [其他子句]
参数说明:
查询列表:源表1和源表2中的列
源表1 [INNER] JOIN 源表2:将两张表进行内连接
ON 源表1.列 = 源表2.列:两张表的连接条件(通常是两张表相关联的主外键)
[其他子句]:就是对结果集进行过滤的各种条件,按需要使用
多表连接查询在连接完成后还可以使用WHERE 子句进行结果过滤。
注意:使用WHERE条件进行过滤时一定是在表连接之后
-----------------------
做连接查询时为了避免表名称过长的问题,可以为表指定一个别名
------------------
内连接在表不多时可以使用简洁形式
SELECT 查询列表 FROM 表1,表2 WHERE 表1.列=表2.列
-----------
自连接查询
把一张表模拟为多张表
原理:
将表使用不同的别名,模拟为两张独立的表,之后和多表连接操作一样。
使用场景:自连接在查询无限分级的表数据时可以有重要的作用。
---------------------
外连接对于内连接而言的,此时会有左右之分
其实就是主从之分
因此外连接分为:
左外连接:以左边的表为主表
右外连接:以右边的表为主表
全外连接:不分主从,没有左右之分
------------
左外连接语法:
SELECT 查询列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 表1.列=表2.列 [其他子句]
-------------
右外连接语法:
SELECT 查询列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 表1.列=表2.列 [其他子句]
-------------
全外连接语法:
SELECT 查询列表 FROM 表1 FULL [OUTER] JOIN 表2 ON 表1.列=表2.列 [其他子句]
-----------------
交叉连接语法:
SELECT 查询列表 FROM 表1 CROSS JOIN 表2 ON 表1.列=表2.列 [其他子句]

第十三课复习

复习要点 ?
巩固SELECT语句基本结构?
巩固WHERE条件子句?
巩固ORDER BY子句?
巩固聚合函数对数据进行统计?
巩固GROUP BY和HAVING子句的使用?
巩固多表连接查询
-------
SELECT 查询列表 FROM 源表名--》基本结构
[WHERE 条件]
[GROUP BY 分组子句][HAVING 过滤子句]
[ORDER BY 排序子句][ASC|DESC]
-------------
WHERE条件子句
比较条件 (关系[=、(!=|<>)、>、<、>=、<=、!>、!<])
逻辑条件(AND|OR)
列表条件(IN|NOT IN)
范围条件(BETWEEN|NOT BETWEEN)
空值条件(IS NULL|IS NOT NULL)
模糊条件(LIKE[‘%‘,‘_‘,[],[^]])
-------------------
ORDER BY 子句 排序[ASC|DESC]
升序(默认)、降序
排序一定出现在查询语句的末尾(倒数第一位置)
排序时可以根据多个字段进行
例如:字段1 升序,字段2 降序,。。。。
---------------------
常用聚合函数SUM函数:
SELECT SUM(SCORE) 总分 FROM 源表名
AVG函数:
SELECT AVG(SCORE) 平均分 FROM 源表名
MAX函数:
SELECT MAX(SCORE) 最高分 FROM 源表名
MIN函数:
SELECT MIN(SCORE) 最低分 FROM 源表名
COUNT函数:
SELECT COUNT(*) 总记录数 FROM 源表名
-------------------
GROUP BY 子句和HIVING 子句
通过某种规则进行分组
HIVING用于分组后再过滤
SELECT className 班级,AVG(SCORE) 平均分 FROM 源表名,。。。
GROUP BY className
SELECT className 班级,AVG(SCORE) 平均分 FROM 源表名,。。。
GROUP BY className
HIVING AVG(SCORE)>80
------------------
多表连接
内联(自联):
SELECT * FROM 源表名1 [INNER] JOIN 源表名2
ON 源表名1.列=源表名2.列--连接条件
外联:
1、左外连接
以连接的关键字区分,关键字左边的表为主表,右边的表为从表
SELECT * FROM 源表名1 LEFT JOIN 源表名2
ON 源表名1.列=源表名2.列--连接条件
注意:主表完全匹配,从表是部分匹配因此会出现NULL值
2、右外连接
以连接的关键字区分,关键字左边的表为从表,右边的表为主表
SELECT * FROM 源表名1 RIGHT JOIN 源表名2
ON 源表名1.列=源表名2.列--连接条件
注意:主表完全匹配,从表是部分匹配因此会出现NULL值
3、全外连接
SELECT * FROM 源表名1 FULL JOIN 源表名2
ON 源表名1.列=源表名2.列--连接条件
交叉
SELECT * FROM 源表名1 CORSS JOIN 源表名2
交叉连接会产生“笛卡尔积”,将每行所有匹配的可能都显示出来

第十四课

招聘数据采集分析系统数据库设计
工作任务设计招聘数据采集分析系统的数据库和数据表结构
使用DML语句维护数据使用DQL模拟业务流程查询数据以便给程序提供数据支持
--------------------
技能目标
使用SQL Server创建数据库、建立表结构及各种约束
使用INSERT、DELETE操作数据
使用SELECT语句查询统计数据
------------------------------
技术需求
使用DDL语句建库、建表及其约束
使用DML语句对数据进行插入和删除
使用SELECT语句进行基本查询
使用LIKE子句进行模糊查询
使用聚合函数对数据进行统计
使用GROUP BY子句进行分组查询
使用表连接查询

相关推荐