SqlServer教程

SQL SERVER 2016 从入门到精通-学习笔记

本文主要是介绍SQL SERVER 2016 从入门到精通-学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SQL SERVER 2016 从入门到精通

第1章 初识SQL SERVER 2016

1.6 SSMS基本操作

1.6.1 SSMS的启动与连接

  1. 开始-->所有程序-->Microsoft SQL Server 2016
    1. 服务器类型:这里可能有多种不同的服务器类型,对于本书,将主要讲解数据库服务,所以这里选择【数据库引擎】
    2. 服务器名称:下拉列表框中列出了所有可以连接的服务器的名称,这里的WIN-VORN6APUOTD为笔者主机的名称,表示连接到一个本地主机;如果要连接到远程服务器,则需要输入服务器的IP地址。
    3. 身份验证:最后一个下拉列表框中指定连接类型,如果设置了混合验证模式,可以在下拉列表中使用SQL S身份登录,此时,将需要输入用户名和密码;在前面安装过程中指定使用Windows身份验证,因此这里选择【Windows身份验证】。
  2. 连接成功则进入SSMS的主界面,该界面显示了左侧的【对象资源管理器】窗口。
  3. 查看一下SSMS中的【已注册的服务器】窗口,选择【视图】|【已注册的服务器】菜单命令
  4. 如果用户需要注册一个其他的服务,可以右击【本地服务器组】结点,在弹出的快捷快捷菜单中选择【新建服务器注册】菜单命令。

第2章 数据库的操作

2.1 数据库组成

SQL Server数据库管理系统中的数据库文件是由数据文件和日志文件组成的,数据文件以盘区为单位存储在存储器中。

2.1.1 数据文件

    一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。
    一个数据库只能有一个主数据库文件。
    主数据文件是数据库的起点,指向数据库文件的其他部分,每个数据库都有一个主要数据文件,其扩展名为.mdf。
    次数据文件包含除主数据文件外的所有数据文件,一个数据库可以没有次数据文件,也可能有多个次数据文件,扩展名为.ndf。

2.1.2 日志文件

SQL Server 2016不强制使用.mdf、.ndf、.ldf作为文件的扩展名,但建议使用这些扩展名帮助标识文件的用途。SQL Server 2016中某个数据库中的所有文件的位置都记录在master数据库和该数制库的主数据文件中。

2.2 系统数据库

2.2.1 master数据库

    master是SQL Server 2016中最重要的数据库,是整个数据库服务器的核心。该数据库中包含下面一些内容:所有用户的登录信息、用户所在的组、所有系统的配置选项、服务器中本地数据库的名称和信息、SQL Server的初始化方式等。作为一个数据库管理员,应该定期备份master数据库。

2.2.2 model数据库

    model数据库是SQL Server 2016中创建数据库的模板,如果用户希望创建的数据库有相同的初始文件大小,则可以在model数据库中保存文件大小的信息;希望所有的数据库中都有一个相同的数据表,同样可以将数据表保存在model数据库中。因为将来创建的数据库以model数据库中的数据为模板,因此在修改model数据库之前要考虑到,任何对model数据库的数据的修改都将影响所有使用模板创建的数据库。

2.2.3 msdb数据库

    msdb提供运行SQL Server Agent工作的信息。SQL Server Agent是SQL Server中的一个Windows服务,该服务用来运行制定的计划任务。

2.2.4 tempdb数据库

    tempdb是SQL Server中的一个临时数据库,用于存放临时对象或中间结果,SQL Server关闭后,该数据库中的内容被清空,每次重新启动服务器之后,tempdb数据库将被重置。

2.3 创建数据库

2.3.2 使用Transact-SQL创建数据库

    创建一个数据库sample_db,该数据库的主数据文件逻辑名为sample_db,物理文件名称为sample.mdf,初始大小为5MB,最大尺寸为30MB,增长速度为5%,数据库日志文件的逻辑名称为sample_log,保存日志的物理文件名称为sample.ldf,初始大小为1MB,最大尺寸为8MB,增长速度为128KB。具体操作步骤如下。
  1. 启动SSMS,选择文件-->新建-->使用当前连接的查询。
  2. 在查询编辑器窗口中打开一个空的.sql文件,将下面的T-SQL语句输入到空白文档中
CREATE DATABASE [sample_db] ON PRIMARY
(
NAME = 'sample_db',
FILENAME = 'C:\SQL Server 2016\sample.mdf',
SIZE = 5120KB,
MAXSIZE = 30MB,
FILEGROWTH = 5%,
)
LOG ON
(
NAME = 'sample_log',
FILENAME = 'C:\SQL Server 2016\sample_log.ldf',
SIZE = 1024KB,
MAXSIZE = 8192KB,
FILEGROWTH = 10%,
)
GO
  1. 输入完成后,单击【执行】命令,命令执行成功后,刷新SQL Server 2016中的数据库节点,可以在字节点中看到新建的名称为sample_db的数据库。
  2. 选择新建的数据库后右击,在弹出的快捷菜单中选择【属性】菜单命令,打开【数据库属性】窗口,选择【文件】选项,即可查看数据库的相关信息。

2.4 管理数据库

2.4.1修改数据库

  1. 使用ALTER DATABASE语句进行修改
    使用T-SQL语句修改sample_db数据库数据文件的初始大小
ALTER DATABASE sample_db
MODIFY FILE
(
  NAME = sample_db,
  SIZE = 15MB
);
GO

增加数据库容量

ALTER DATABASE sample_db
MODIFY FILE
(
  NAME = sample_db,
  MAXSIZE = 50MB
);
GO

缩减数据库容量

ALTER DATABASE sample_db
MODIFY FILE
(
  NAME = sample_db,
  MAXSIZE = 25MB
);
GO

2.4.5 查看数据库信息

SQL Server中可以使用多种方式查看数据库信息,例如使用目录视图、函数、存储过程等。
  1. 使用目录视图
  • 使用sys.filegroups查看有关数据库组的信息。
  • 使用sys.master_files查看数据库文件的基本信息和状态信息。
  • 使用sys.databases数据库和文件目录视图查看有关数据库的基本信息。
  1. 使用函数
    如果要查看指定数据库中的指定选项信息时,可以使用DATABASEPROPERTYES()函数,该函数每次只返回一个选项的信息。
    查看test数据库的状态信息,输入语句如下:
USE test
GO
SELECT DATABASEPROPERTYEX('test', 'Status')
AS 'test数据库状态'
  1. 使用系统存储过程
    除了上述的目录视图和函数外,还可以使用存储过程sp_spaceused显示数据库使用和保留的空间。
    sp_helpdb存储过程查看所有数据库的基本信息。
  2. 使用图形化的管理工具
    当然,用户也可以在SSMS中查看数据数据库信息,打开SSMS窗口之后,在【对象资源管理器】窗口中右击要查看信息的数据库节点,在弹出的快捷菜单中选择【属性】菜单命令,在弹出的【数据库属性】窗口中即可查看数据库的基本信息、文件信息、文件组信息和权限信息等。

2.4.6 数据库更名

使用T-SQL语句修改数据库名称
ALTER DATABASE sample_db2
  MODIFY NAME = sample_db;
GO

2.4.7 删除数据库

使用T-SQL语句删除数据库
    DROP DATABASE test;

第3章 数据表的操作

3.1 SQL Server 2016数据库对象

数据库对象是数据库的组成部分,数据表、视图、索引、存储过程以及触发器等都是数据库对象。

3.2 创建数据表

  1. 约束方法:唯一约束、主键约束、标识列
  2. 约束方法:外键约束
  3. 约束方法:检查约束、存储过程、触发器

3.2.1 数据类型

一. 系统数据类型

  1. 整数数据类型
  1. bigint,每个bigint存储在8字节中。
  2. int,每个int存储在4字节中,其中一个二进制位表示符号,其他31个二进制从头位表示长度和大小。
  3. smallint,每个smallint类型的数据占用了两个字节的存储空间,其中一个二进制位表示整数值的正负号,其他15个二进制位表示长度和大小,可以表示-2的15次方~2的15次-1范围内的所有整数。
  4. tinyint,每个tinyint类型的数据占用了一个字节的存储空间,可以表示0~255范围内的所有整数。
  1. 浮点数据类型
  1. real,占用4个字节的存储空间
  2. float[(n)],其中n为存储float数值尾数的位数(以科学记数法表示)。
  3. decimal[(p[,s])]和numeric[(p[,s])],带固定精度和小数位数的数值数据类型。p(精度)指定了最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。s(小数位数)指定小数点右边柳叶眉主存储的填制数字的最大位数。
  1. 字符数据类型
  1. char(n),每个字符和符号占用一个字节的存储空间。n表示所有字符所占用的存储空间,n的取值为1~8000,默认为1。
  2. varchar(n|max),n为存储字符的最大长度,取值范围为1~8000,但可以根据实际存储的字符数改变存储空间
  3. nchar(n),n个字符的固定长度的Unicode字符数据。n值必须有1到4000之间(含)。
  1. 日期和时间数据类型
  1. date,数据格式为:YYYY-MM-DD
  2. time,数据格式为:hh:mm:ss[.nnnnnnn]
  3. datetime,默认值为1900-01-01 00:00:00
  4. datetime2,datetime类型的扩展,其数据范围更大,默认的小数精度更高。
  5. smalldatetime,与datetime类型相似,只是其取值的满园是从1900-01-01到2079-06-06
  6. datetimeoffset,用于定义一个采用24小时制与日期相结合并可识别时区的一日内时间。默认格式是:YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]
  1. 文本和图形数据类型
  1. text
  2. ntext
  3. image
  1. 货币数据类型
  1. money
  2. smallmoney
  1. 位数据类型
    bit称为位数据类型,只取0或1为值,长度1字节。

  2. 二进制数据类型

  1. binary(n),长度为n字节的固定长度二进制数据,其中n是1~8000值。存储大小为n字节。
  2. varbinary(n|max),可变长度二进制数据。
  1. 其他数据类型
  1. rowversion,每个数据库都有一个计数器,当对数据库中包含rowversion列的表执行插入或更新操作时,该计数器值就会增加。
  2. timestamp,时间戳数据类型
  3. uniqueidentifier,16字节GUID(Globally Unique Identifier,全球唯一标识符),是SQL Server根据网络适配器地址和主机CPU时钟产生的唯一号码。
  4. cursor,游标数据类型
  5. sql_variant,用于存储除文本、图形数据和timestamp数据外的其他任何合法的SQL Server数据,可以方便SQL Server的开发工作。
  6. table,用于存储对表或视图处理后的结果集
  7. xml,存储xml数据的数据类型。

二. 自定义数据定义
SQL Server允许用户自定义数据类型,用户自定义数据类型是建立在SQL Server系统数据类型基础上的,自定义的数据类型使得数据库开发人员能够根据需要定义符合自己开发需求的数据类型。

3.2.3 使用Transact-SQL创建表

CREATE TABLE authors
(
  auth_id int PRIMARY KEY,  --数据表主键
  auth_name VARCHAR(20) NOT NULL unique,  --作者名称,不能为空
  auth_gender tinyint NOT NULL DEFAULT(1)  --作者性别:男(1),女(0)
);

3.3 管理数据表

3.3.1修改表字段

  1. 增加字段
    在T-SQL中使用ALTER TABLE语句在数据表中增加字段
ALTER TABLE authors
ADD auth_note VARCHAR(100) NULL
  1. 修改字段
ALTER TABLE authors
ALTER COLUMN auth_phone VARCHAR(15)
GO
  1. 删除字段
ALTER TALBE authors
DROP COLUMN auth_phone

3.3.4删除表

USE test
GO
DROP TABLE authors

第4章 Transact-SQL语言基础

4.1 Transact-SQL概述

可以将T-SQL语句分为4大类,分别为数据操作语句、数据定义语句、数据控制语句和一些附加的语言元素。

数据操作语句:
SELECT, INSERT, DELETE, UPDATE
数据定义语句:
CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE VIEW, DROP VIEW, CREATE INDEX, DROP INDEX, CREATE PROCEDURE, ALTER PROCEDURE, CREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER
数据控制语句:
GRANT, DENY, REVOKE
附加的语言元素:
BEGIN TRANSACTION/COMMIT, ROLLBACK, SET TRANSACTION, DECLARE OPEN, FETCH, CLOSE,EXECUTE
所有对数据库对象名的Transact-SQL引用将由4部分名称组成,格式如下:
server_name.[database_name].[schema_name].object_name
| database_name.[schema_name].[object_name]
| schema_name.object_name
| object_name

4.2 如何给标识符起名

SQL Server的所有对象,包括服务器、数据库及数据对象,如表、视图、列、索引、触发器、存储过程、规则、默认值和约束等都可以有一个标识符,对绝大多数对象来说,标识符是必不可少的。
SQL Server一共定义了两种类型的标识符:规则标识符和界定标识符。

规则标识符:规则标识符严格遵守标识符有关的规定
界定标识符:界定标识符是那些使用了如[]和' '等界定符号来进行位置限定的标识符。

4.4 变量

4.4.1 全局变量

引用全局变量时,必须以标记符"@@"开头  

4.4.2 局部变量

局部变量被引用时要在其名称前加上标志”@“,而且必须先用DECLARE命令声明才可以使用。定义局部变量的语法形式如下:
DECLARE {@local-variable  data-type} [...n]  

例如:
DECLARE @MyCount INT, @Name varchar(30);
如果想要设置局部变量的值,必须使用SELECT命令或SET命令。例如:
SELECT @MyCount = 100;

4.5.1 算术运算符

+ - * / %

4.5.2 运算符

= > < >= <= <> != !> !<

4.5.3 逻辑运算符

ALL AND ANY BETWEEN EXISTS IN LIKE NOT OR SOME

4.5.4 按位运算符

& | ^ ~

4.6 通配符

% 匹配任意长度的字符,甚至包括零字符
_ 匹配任意单个字符
[字符集合] 匹配字符集中的任何一个字符
[^]或[!] 匹配不在括号中的任何字符

4.7 Transact-SQL语言中的注释

  1. 单行注释
    --
  2. 多行注释
    /* */

第5章 轻松掌握Transact-SQL语句

5.1 数据定义语句

5.1.1 CREATE的应用

  1. 创建数据库
CREATE DATABASE test_db ON PRIMARY
(
NAME = test_db_data1,	--数据库逻辑名称
FILENAME='C:\SQL Server 2016\test_db_data.mdf',	--主数据文件存储位置
SIZE = 5120KB, 	--主数据文件大小
MAXSIZE = 20, 	--主数据文件最大增长空间为20MB
FILEGROWTH = 1 	--文件增长大小设置为1MB
);
  1. 创建数据表
USE test_db
CREATE TABLE tb_emp1
(
id INT PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptId VARCHAR(2) NOT NULL,
salary SMALLMONEY NULL
);

5.1.2 DROP的功能

  1. 删除数据表
USE test_db
GO
DROP TABLE dbo.table_emp
  1. 删除数据库
DROP DATABASE test_db

5.1.3 ALTER的功能

  1. 修改数据库
    修改数据库名称
ALTER DATABASE test_db
MODIRY NAME = company
  1. 修改表
    添加字段
USE company
GO
ALTER TABLE tb_emp1
ADD birth DATE NOT NULL

删除字段列

USE company
GO
ALTER TABLE tb_emp1
DROP COLUMN birth

5.2 数据操作语句

5.2.1 数据的插入

INSERT INTO teacher VALUES(1, '张三', '1978-02-14', '男', '0018611');

向teacher插入多条新记录

INSERT INTO teacher VALUES(2, '李四', '1978-11-21', '女', '0018624'),
(3, '王五', '1976-12-05', '男', '0018678'),
(4, '赵纤', '1980-6-5', '女', '0018699')

5.2.2 数据的更改——UPDATE

  1. 指定条件修改
UPDATE teacher
SET birthday = '1980-8-8', cellphon='0018600'  WHERE id=1;
  1. 修改表中所有记录
UPDATE teacher SET cellphone='01008611';

5.2.3 数据的删除——DELETE

  1. 按指定条件删除一条或多条记录
DELETE FROM teacher WHERE id=1;
  1. 删除表中所有记录
DELETE FROM teacher;

5.2.4 数据的查询——SELECT

  1. 基本SELECT查询
SELECT * FROM stu_info;
  1. 查询记录中指定字段
SELECT s_name, s_score FROM stu_info;
  1. 在查询结果中使用表达式

  1. 显示部分查询结果
SELECT TOP 3 * FROM stu_info;
  1. 带限定条件的查询
SELECT * FROM stu_info WHERE s_sex='男';
  1. 带AND的多条件查询
SELECT * FROM stu_info WHERE s_sex='男' AND s_score > 80;
  1. 带OR的多条件查询
SELECT * FROM stu_info WHERE s_score>80 OR s_age >18;
  1. 使用LIKE运算符进行匹配查询
SELECT * FROM stu_info s_name LIKE '马%';
SELECT * FROM stu_info s_name LIKE '[张王李]%';
  1. 使用BETWEEN AND进行查询
SELECT * FROM stu_info WHERE s_score BETWEEN 50 AND 90;
  1. 对查询结果排序
SELECT * FROM stu_info ORDER BY s_score DESC;

5.3 数据控制语句

5.3.1 授予权限操作——GRANT

GRANT UPDATE, DELETE, ON stu_info 
TO guest WITH GRANT OPTION

5.3.2 拒绝权限操作——DENY

DENY UPDATE ON stu_info TO guest CASCADE;

5.3.3 收回权限操作——REVOKE

REVOKE DELETE ON stu_info FROM guest;

第6章 认识函数

第7章 Transact-SQL查询

7.1.1 编辑查询

首先,打开SSMS并连接到SQL Server服务器。单击SSMS窗口左上部分的[新建查询]按钮,或者选择[文件] | [新建] | [使用当前连接查询]命令,打开新的[查询]窗口。

7.1.2 查询结果的显示方法

  1. 以文本格式显示结果
  2. 以网格格式显示结果
  3. 将结果保存到文件

7.2 使用SELECT进行查询

7.2.1 使用星号和列名

  1. 在SELECT语句中使用星号(*)通配符查询所有字段
SELECT * FROM  fruits;
  1. 在SELECT语句中指定所有字段
SELECT f_id, s_id, f_name, f_price FROM fruits;
  1. 查询指定字段
SELECT f_name, f_price FROM fruits;

7.2.2 使用DISTINCT取消重复

SELECT DISTINCT s_id FROM fruits;

7.2.3 使用 TOP 返回前 n 行

SELECT TOP (3) * FROM frutis;

7.2.4 修改列标题

  1. 使用 AS 关键字
SELECT f_name AS '名称' , f_price AS '价格' FROM fruits;
  1. 使用等号 =
SELECT '名称' = f_name, '价格' = f_price FROM fruits;

7.2.5 在查询结果集中显示字符串


7.2.6 查询的列为表达式

 SELECT f_name, f_price 原价, f_price * 0.8 折扣价 FROM fruits;

7.3 使用 WHERE 字句进行条件查询

操作符:
= <> < <= > >= BETWEEN AND

7.3.1 使用关系表达式查询

SELECT f_name, f_price FROM fruits WHERE f_price = 10.2;
SELECT f_name, f_price FROM fruits WHERE f_name = 'apple';
SELECT f_name, f_price FROM fruits WHERE f_price < 10;

7.3.2 使用 BETWEEN AND 表示范围

SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2.00 AND 10.20;
SELECT f_name, f_price FROM fruits NOT WHERE f_price BETWEEN 2.00 AND 10.20;

7.3.3 使用 IN 关键字

SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN (101,102);
SELECT s_id, f_name, f_price FROM fruits WHERE s_id NOT IN (101,102);

7.3.4 使用 LIKE 关键字

LIKE关键字中使用的通配符
%
_
[]
[^]
  1. 百分号通配符“%”,匹配任意长度的字符,甚至包括零字符
SELECT f_id, f_name FROM fruits WHERE f_name LIKE 'b%';
SELECT f_id, f_name FROM fruits WHERE f_name LIKE '%g%';
SELECT f_name FROM fruits WHERE f_name LIKE 'b%y';
  1. 下划线通配符“_”,一次只能匹配任意一个字符
SELECT f_id, f_name FROM fruits WHERE f_name LIKE '____y';
  1. 匹配指定范围中的任何单个字符[]
SELECT * FROM fruits WHERE f_name LIKE '[abe]%';
  1. 匹配不属于指定范围的任意单个字符[^]
SELECT * FROM fruits WHERE f_name LIKE '[^abc]%';

7.3.5 使用 IS NULL 查询空值,IS NOT NULL 查询非空值

SELECT c_id, c_name, c_email FROM customers WHERE c_email IS NULL;
SELECT c_id, c_name, c_email FROM customers WHERE c_email IS NOT NULL;

7.3.6 使用 EXISTS 关键字

EXISTS 关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为TRUE,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是FALSE,此时外层语句将不进行查询。
SELECT * FROM fruits WHERE EXISTS (SELECT s_name FROM suppliers WHERE s_id =107);
SELECT * FROM fruits f_price > 10.2 AND EXISTS (SELECT * s_name FROM suppliers WHERE s_id=107);

7.3.7 使用 ORDER BY 排序

  1. 单列排序
SELECT f_name FROM fruits ORDER BY f_name;
  1. 多列排序
SELECT f_name, f_price FROM fruits ORDER BY f_name, f_price;
  1. 指定排序方向
SELECT f_name, f_price FROM fruits ORDER BY f_price DESC;

7.3.8 使用 GROUP BY 分组

  1. 创建分组
    GROUP BY 子句通常和聚合函数一起使用,例如:MAX()、MIN()、COUNT()、SUM()、AVG()。
SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;
  1. 多字段分组
SELECT s_id, f_name FROM fruits GROUP BY s_id, f_name;

7.3.9 使用 HAVING 对分组结果过滤

GROUP BY 可以和 HAVING一起限定显示记录所需的条件,只有满足条件的分组才会被显示。
SELECT s_id, COUNT(*) AS Total fruits GROUP BY s_id HAVING COUNT(*) > 1;

7.3.10 使用 UNION 合并查询结果集

利用 UNION 关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间用UNION 或UNION ALL 关键字分隔。UNION 不使用关键字ALL, 执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字ALL 的作用是不删除重复行也不对结果进行自动排序。  
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 
UNION ALL 
SELECT s_id, f_name, f_price FROM fruits WHERE s_id =101;

SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 
UNION
SELECT s_id, f_name, f_price FROM fruits WHERE s_id =101;

7.5 嵌套查询

嵌套查询是指一个查询语句嵌套在另一个查询语句内部的查询。在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。

7.5.1 使用比较运算符


7.5.2 使用 IN 关键字

IN 关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较。
SELECT s_name FROM suppliers WHERE s_id IN (SELECT s_id FROM fruits f_id='c0');

7.6 多表连接查询

    连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。
    SQL Server中的内连接有:等值连接和不等连接。

7.6.1 相等连接

    相等连接又叫等值连接:在连接条件中使用等于号(=)运算符比较被连接列的值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
SELECT suppliers.s_id, s_name, f_name, f_price FROM fruits INNER JOIN suppliers ON fruits.s_id = suppliers.s_id;

7.6.2 不等连接

不等连接:在连接条件中使用除等于运算符以外的其他比较运算符,比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<、<>。
SELECT suppliers.s_id, s_name, f_name, f_price
FROM fruits INNER JOIN suppliers
ON fruits.s_id <> suppliers.s_id;

7.6.3 带选择条件的查询

SELECT fruits.s_id, suppliers.s_city
FROM fruits INNER JOIN suppliers 
ON fruits.s_id = suppliers.s_id AND fruits.s_id = 101;

7.6.4 自连接

如果在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
SELECT f1.f_id, f1.f_name FROM fruits AS f1, fruits AS f2
WHERE f1.s_id = f2.s_id AND f2.f_id = 'a1';

7.7 外连接

外连接分为左外连接和右外连接。
  • LEFT JOIN(左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
  • RIGHT JOIN(右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

7.7.1 左外连接

SELECT student.s_id, stu_detail.addr 
FROM student LEFT OUTER JOIN stu_detail 
ON student.s_id = stu.detail.s_id;

7.7.2 右外连接

SELECT student.name, stu_detail.s_id 
FROM student RIGHT OUTER JOIN stu_detail 
ON student.s_id = stu_detail.s_id

7.7.3 全外连接

全外连接又称为完全外连接,该连接查询方式返回两个连接中所有的记录数据。根据匹配条件,如果满足匹配条件时,则返回数据;如果不满足匹配条件时,同样返回数据,只不过在相应的列中填入空值,全外连接返回的结果集中包含了两个完全表的所有数据。全外连接使用关键字 FULL OUTER JOIN。
SELECT student.name, stu_detail.addr 
FROM student FULL OUTER JOIN stu_detail
ON student.s_id = stu_detail.s_id;

第8章 数据的更新

8.1 插入数据——INSERT

8.1.1 插入单行数据

  1. 为表中所有字段插入数据
INSERT INTO person (id, name, age, info) VALUES(1, 'Green', 21, 'Lawyer');
INSERT INTO person VALUES(3, 'Mary', 24, 'Musician');
  1. 为表的指定字段插入数据
INSERT INTO person(id, name, info) VALUES(4, 'Willam', 'sports man');
INSERT INTO person(id, name) VALUES(5, 'Laura');

8.1.2 插入多行数据

INSERT INTO person(id, name, age, info)
VALUES(6, 'Evans', 27, 'secretary'),
(7, 'Dale', 22, 'cook'),
(8, 'Edison', 28, 'singer')
SELECT * FROM person;
INSERT还可以将SELECT语句查询的结果插入到表中。person_old表中现在有两条记录。接下来将person_old表中所有的记录插入到person表中,T-SQL语句如下:
INSERT INTO person(id, name, age, info)
SELECT id, name, age, info FROM person_old;
SELECT * FROM person;

8.2 修改数据——UPDATE

8.2.1 修改单行数据

UPDATE person SET age = 15, name= 'LiMing' WHERE id=10;

8.2.2 修改多行数据

  1. 修改部分记录的字段数据
UPDATE person SET info='student' WHERE age BETWEEN 19 AND 22;
  1. 修改所有记录的字段数据
UPDATE person SET info='vip';

8.3 删除数据——DELETE

8.3.1 删除部分数据

DELETE FROM person WHERE age = 22;

8.3.2 删除表中所有数据

DELETE FROM person;

第9章 规则、默认和完整性约束
第10章 创建和使用索引
第11章 事务和锁
第12章 游标
第13章 存储过程和自定义函数
第14章 视图操作
第15章 触发器
第16章 SQL-SERVER的安全机制
第17章 数据库的备份与恢复
第18章 开发企业人事管理系统

这篇关于SQL SERVER 2016 从入门到精通-学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!