数据库.SQL Sever.知识覆盖.职业技能
- 0. 目录
- 1. SQL Sever
- 1.1 SQL语句分类
- SQL
- SQL分类
- 基本书写规则
- 1.2 SQL数据库和表操作
- SQL数据库操作
- SQL表操作
- SQL常用数据类型
- 1.3 SQL数据操作
- SQL数据操作
- SQL查询
- SQL关联查询
- JOIN的几种类型缩写
- SQL合并查询
- SQL常用函数
- 1.4 SQL查询逻辑分析
- 逻辑查询处理的各个阶段
- 逻辑查询处理阶段简介
0. 目录
1. SQL Sever
1.1 SQL语句分类
SQL
- 概念:结构化查询语言
- 作用:存储,查询,更新数据和管理关系型数据库
SQL分类
- 数据定义语言(DDL):定义和管理
- 数据操纵语言(DML):增删改
- 数据控制语言(DCL):授予回收权限,控制事务时间和效果,实时监视
- 数据查询语言(DQL):查
基本书写规则
- ;
- 不区分大小写
关键字大写
,数据库名,表明和列名小写
,表中数据区分
- 半角字符
- 常数:字符串,日期,数字
- 单引号标识字符串
- 数字:无符号
- test,abc
1.2 SQL数据库和表操作
SQL数据库操作
- 创建数据库
CREATE DATABASE db_name
- 更改数据库名
ALTER DATABASE db_name MODIFY NAME = newname
- 删除数据库
DROP DATABASE db_name
SQL表操作
- 创建数据表
CREATE TABLE table_name(
no int NOT NULL identity(1,1) primary key,--主键自增列
name NVARCHAR(100),
sex bit,
dept NVARCHAR(100)
);
CREATE TABLE table_name1(
no int CONSTRAINT p_no FOREIGN KEY(no) REFERENCES table_name(no),--外键
subject NVARCHAR(100),
score int
);
- 更改表操作
- 表名修改
EXEC sp_rename 'table_name','new_name';
- 列名修改
EXEC sp_rename 'table_name.column_name','new_name','column_num';
- 新增列
ALTER TABLE table_name ADD column_name varchar(100) not null;
- 修改列
ALTER TABLE table_name ALTER COLUMN column_name nvchar(100);
- 删除列
ALTER TABLE table_name DROP COLUMN column_name;
- 删除数据表
DROP TABLE table_name;
SQL常用数据类型
- 字符串类型
- char,varchar(可变),nchar,nvarchar(可变)
-
date
:00010101-99991231;datetime
:17530101-99991231 -
bit
:0,1,null;int
:-2147483648-2147483647 -
decimal(p,s)
:-10^38 - 10^38 -1p
:1-38s
:0-p,0 - uniqueidentifier:存储全局标识符(GUID)
1.3 SQL数据操作
SQL数据操作
- 插入数据
INSERT INTO table_name VALUES(a,b,c);
INSERT INTO table_name SELECT a,b,c;
- 更新数据
UPDATE table_name SET column_name1=a,column_name2=b WHERE column_name=c;
- 删除数据
DELETE FROM table_name WHERE column_name=a;
- 空值判断
- 通过is null,is not null
WHERE column_name is null
WHERE column_name1 is not null
SQL查询
- 基础查询
SELECT * FROM table_name
SELECT column_name FROM table_name
- 关键字
-
DISTINCT
: 查寻结果去重 -
WHERE
: 查询条件 -
IN
: 满足一个或多个条件 -
BETWEEN
: 查询两个值之间的数据 -
LIKE
: 模糊查询 -
AND
和OR
:把多个查询连接起来 -
GROUP BY
:对数据集进行分组操作 -
TOP
:用于要返回的记录的数目 -
ORDER BY
:对指定列进行排序
SQL关联查询
- 内连接
INNER JOIN
: 返回两个表连接字段相等的行
SELECT * FROM table_name INNER JOIN table_name1 ON tn(简写).column_name=tn1.column_name;
- 左连接
LEFT JOIN
: 返回左表中所有记录和右表中连接字段相等的行
SELECT * FROM tn LEFT JOIN tn1 ON tn.column_name=tn1.column_name;
- 右连接
RIGHT JOIN
: 返回右表中所有记录和左表中连接字段相等的行
SELECT * FROM tn RIGHT JOIN tn1 ON tn.column_name=tn1.column_name;
- 完全连接
FULL JOIN
:返回两个表中匹配的所有行
左表匹配不到右表显示null
右表匹配不到左表显示null
SELECT * FROM table_name FULL JOIN tn1 ON tn.column_name=tn1.column_name;
JOIN的几种类型缩写
LEFT OUTER JOIN = LEFT JOIN
RIGHT OUTER JOIN = RIGHT JOIN
FULL OUTER JOIN = FULL JOIN
INNER JOIN = JOIN
CROSS JOIN = ,
SQL合并查询
- UNION/UNION ALL的特点
- 合并多个查询结果集为一个
- 合并表中的列的个数.数据类型必须相同或兼容
- UNION: 默认去掉重复值.
- UNION ALL: 允许有重复值使用
SQL常用函数
- 聚合函数
-
COUNT
: 返回数据函数 -
AVG
: 返回所有列值的平均值 -
SUM
: 返回所有列值的总和 -
MIN
: 返回指定列的最小值 -
MAX
: 返回指定列的最大值
- 字符串函数
-
REPLACE(str,a,b)
: 用b替换str中所有a -
LEFT(str ,x)
: 返回str中最左边的x个字符 -
RIGHT(str,x)
: 返回str中最右边的x个字符 -
LTRIM(str)
: 切掉str开头的空格 -
RTRIM(str)
: 切掉str尾部的空格 -
LEN(str)
: 返回字符串字符数 -
SUBSTRING(str,1,3)
: 截取从1开始长度为3的字符串
- 日期函数
-
GETDATE()
: 返回当前日期 -
DATEADD(datepart, number, date)
: 日期中 + 或 – 指定的时间间隔 -
DATEDIFF(datepart,startdate,enedate)
: 返回两个日期之间的时间
datepart: 年(yy/yyyy) 月(m/mm).日(dd/d) 小时(hh) 等 -
YEAR(). MONTH(). DAY()
: 返回年份,月份,日
1.4 SQL查询逻辑分析
逻辑查询处理的各个阶段
- SQL区别于其他编程特性是处理代码的顺序
- 每个步骤都会产生一个
虚拟表
,该虚拟表作为下一个步骤的输入.只有最后一步生成的表才会返回给调用者.
逻辑查询处理阶段简介
- FROM
FORM阶段标识出查询的来源表,处理表运算符
例如: 在联接运行中涉及的阶段笛卡尔积、ON筛选器和添加外部行(OUTER JOIN) - 笛卡尔积
对FROM涉及的两个表执行笛卡尔积(交叉连接),生成虚拟表VT1 - ON
对VT1应用ON筛选器,只有满足条件的行才被插入VT2 - OUTER JOIN
保留表中未找到的行添加到VT2,生成VT3 - WHERE
只有满足WHERE 条件的行才被插入到VT4 - GROUP BY
按照GROUP BY子句中指定的列名列表,对VT4进行分组,生成VT5. 每个分组只有一个结果行 - HAVING
对VT5应用HAVING筛选器,只有满足条件的才插入VT6 - SELECT
处理SELECT列表,生成VT7 - 计算表达式
计算SELECT列表中的表达式,生成VT8 - DISTINCT
将删除VT8中重复行,产生VT9 - ORDER BY
根据ORDER BY子句中指定的列名列表,对V10进行排序,返回游标VC11,也是唯一可以使用选SELECT列表中别名的步骤 - TOP
根据ORDER BY子句定义的逻辑排序,从VC9中选择指定数量或百分比的行,生成表VT10