SQL温习笔记【SQL Server】

SQL温习笔记【SQL Server】

一些重要的DDL语句

CREATE DATABASE 数据库名 - 创建新数据库
ALTER DATABASE 数据库名 - 修改数据库
CREATE TABLE 表名(列1 数据类型,列2 数据类型...) - 创建新表
ALTER TABLE - 变更数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

注:truncate、delete和drop都是删除,但有不同:
truncate :仅删除表内的数据,不删除表本身,且不激活触发器,删除不能回滚。
delete :仅删除表内的数据,不删除表本身,激活触发器,删除可回滚。
drop:表的结构、属性、索引都将被删除,且不激活触发器,删除不能回滚。

select查询语句

从表里选取列的值:SELECT 列名称 FROM 表名称
注:列名处用星号( * )则选取所有列,且SQL 语句对大小写不敏感

从表的列中选取唯一、不同的值:SELECT DISTINCT 列名称 FROM 表名称

根据条件选取值:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
注:SQL中,文本值用单引号,数值不用

sql 复制代码
        运算符表
操作符	         描述
=		         等于
<>(!=)		 不等于
>		         大于
<		         小于
>=		         大于等于
<=		         小于等于
BETWEEN		     在某个范围内
LIKE	         搜索某种模式

对结果集排序:order by (默认按升序 asc,降序用desc关键字)

示例:

先按列1的逆序(降序)排列,如列1有相同值则按列2升序再排:
select 列1,列2,列3 from 表名 order by 列1 desc, 列2 asc

选取头几条记录:SELECT TOP 数字|百分比数 列名 FROM 表名

示例:

选头50%的记录:SELECT TOP 50 PERCENT * FROM 表名

搜索列中有指定模式的记录:SELECT 列名 FROM 表名 WHERE 列名 LIKE 'pattern'

"%"用于定义通配符(模式中缺少的字母)

示例:

以N开头的模式:like 'N%'

以N结尾的模式:like '%N'

包含LON的模式:like '%LON%'

搜索不包含指定模式的记录:NOT LIKE

sql 复制代码
                                通配符表
通配符(须与like一起用)	     描述                     示例
%	                         替代一个或多个字符
_	                         仅替代一个字符
[charlist]	                 字符列中的任何单一字符    '[ABC]%'以A或B或C开头的
[^charlist]或者[!charlist]   不在字符列中的任何单一字符     

在where子句中规定多个值:SELECT 列名 FROM 表名 WHERE 列名 IN (值1,值2,...)

选取介于两个值之间的数据范围:SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2

选取不介于两个值之间的数据范围:NOT BETWEEN
注:值可以是数值、文本或日期。不同的数据库对between...and的处理方式有差异,可能会列出值1、值2间但不包含值1、值2的数据,可能包含双边,也可能只包含单边

为表名指定别名:SELECT 列名 FROM 表名 AS 别名(简化SQL语句)

为列名指定别名:SELECT 列名 AS 别名 FROM 表名(改变列名的显示)

合并多个select语句的结果集:SELECT 列名 FROM 表1 UNION SELECT 列名 FROM 表2

注:union操作符会选取不同的值。若表1、表2里有A值,则结果集只会选取表1的A。

如允许重复的值出现在结果集,则用SELECT 列名 FROM 表1 UNION ALL SELECT 列名 FROM 表2

注:UNION 内部的 SELECT 语句必须拥有相同数量的列。列必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。结果集中的列名总是等于 第一个 SELECT 语句中的列名。

从当前数据库中的表选取数据插入新表中,常用于创建表的备份或者对记录进行存档(会创建新表):SELECT 列名 INTO 新表 FROM 旧表

向其他数据库中拷贝数据:SELECT 列名 INTO 新表 IN '数据库名.mdb' FROM 旧表

insert插入语句

插入新行:INSERT INTO 表名 VALUES (值1, 值2,....)

在指定列插入新一行数据:INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....)

update更新语句

修改(更新)表中的数据:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 某值

delete删除语句

删除行:DELETE FROM 表名 WHERE 列名 = 值

删除所有行的数据:DELETE FROM 表名DELETE * FROM 表名

join连接

inner join: 只查询匹配得上筛选结果的条件。

示例:select * from 表1 inner join 表2 on 条件

join:如果表中至少有一个匹配,则返回行。(效果等于 inner join 和 where)

left join:即使右表中没有匹配,也从左表返回所有的行。(=left outer join)

right join:即使左表中没有匹配,也从右表中返回所有的行。(=right outer join)

full join:返回左、右表所有的行,即使没有匹配。(=full outer join)

表约束constraints

可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

约束列不接受NULL值:create table 表名(列名 数据类型 not null,...)

约束唯一标识数据库表中的每条记录:create table 表名(列名 数据类型 unique,...)

为多个列定义unique约束:create table 表名(列1...,列2..., constraint 约束名 unique()数据类型 unique,...)

为已有的列加unique约束:alter table 表名 add unique(列名)

为已有的多个列加unique约束:alter table 表名 add constraint 约束名 unique(列1,列2...)

撤销unique约束:alter table 表名 drop constraint 约束名

主键约束:唯一标识数据库表中的每条记录。主键列必须是唯一且不为空的值。每个表都应有且只能有一个主键。

创建表时创建主键约束:create table 表名(列名 数据类型 primary key,...)

为多个列定义主键约束:create table 表名(...,constraint 约束名 primary key(列1,列2,...))

为已存在的列创建主键约束:alter table 表名 add primary key(列名)

为已存在的多个列创建主键约束:alter table 表名 add constraint 约束名 primary key(列1,列2,...)

注:如果用 alter table语句添加主键,须把主键列声明为不含 NULL 值(在表首次创建时)。

数据类型

Character 字符串:

sql 复制代码
数据类型	              描述	                                   存储
char(n)   	    固定长度的字符串。最多 8,000 个字符。	            n
varchar(n)	    可变长度的字符串。最多 8,000 个字符。	 
varchar(max)	可变长度的字符串。最多 1,073,741,824 个字符。	 
text	        可变长度的字符串。最多 2GB 字符数据。

Unicode 字符串:

sql 复制代码
数据类型	              描述	
nchar(n)	    固定长度的 Unicode 数据。最多 4,000 个字符。	 
nvarchar(n)	    可变长度的 Unicode 数据。最多 4,000 个字符。	 
nvarchar(max)	可变长度的 Unicode 数据。最多 536,870,912 个字符。	 
ntext	        可变长度的 Unicode 数据。最多 2GB 字符数据。

Binary 类型:

sql 复制代码
数据类型         	  描述	
bit	            允许 0、1 或 NULL	 
binary(n)	    固定长度的二进制数据。最多 8,000 字节。	 
varbinary(n)	可变长度的二进制数据。最多 8,000 字节。	 
varbinary(max)	可变长度的二进制数据。最多 2GB 字节。	 
image	        可变长度的二进制数据。最多 2GB。

Number 类型:

sql 复制代码
数据类型	              描述	                                         存储
tinyint	        允许从 0 到 255 的所有数字。	                        1 字节

smallint	    允许从 -32,768 到 32,767 的所有数字。	2 字节

int	            允许从 -2,147,483,648 到 2,147,483,647 的所有数字。	4 字节

bigint	        允许介于 -9,223,372,036,854,775,808
                和9,223,372,036,854,775,807 之间的所有数字。	        8 字节

decimal(p,s)	固定精度和比例的数字。允许从-10^38+1到10^38-1之间的
                数字。p参数指示可以存储的最大位数(小数点左侧和右侧)。  5-17
                p必须是1到38之间的值。默认是18。s参数指示小数点右侧     字节
                存储的最大位数。s必须是0到p之间的值。默认是 0。          


numeric(p,s)    固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 
                之间的数字。p参数指示可以存储的最大位数(小数点左侧     5-17
                和右侧)。p必须是1到38之间的值。默认是18。s参数指示     字节
                小数点右侧存储的最大位数。s必须是0到p之间的值。默认是 0。
                
smallmoney	    介于-214,748.3648和214,748.3647之间的货币数据。	    4 字节
money	        介于-922,337,203,685,477.5808和
                922,337,203,685,477.5807 之间的货币数据。	        8 字节

float(n)	    从-1.79E+308到1.79E+308的浮动精度数字数据。参数n指
                示该字段保存4字节还是8字节。float(24)保存4字节,而     4 或 8
                float(53) 保存 8 字节。n 的默认值是 53。	            字节

real	        从-3.40E+38到3.40E+38的浮动精度数字数据。	            4 字节

Date 类型:

sql 复制代码
数据类型	              描述	                                        存储
datetime	    从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,       8 bytes
                精度为 3.33 毫秒。	

datetime2	    从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,     6-8 bytes
                精度为 100 纳秒。	                                

smalldatetime	从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,         4 bytes
                精度为 1 分钟。	

date	        从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。       3 bytes
                仅存储日期。

time	        仅存储时间。精度为 100 纳秒。	                    3-5 bytes

datetimeoffset	与 datetime2 相同,外加时区偏移。	               8-10 bytes

timestamp	    存储唯一的数字,每当创建或修改某行时,该数字会更新。
                timestamp 基于内部时钟,不对应真实时间。每个表只能
                有一个 timestamp 变量。	

其他数据类型:

sql 复制代码
数据类型	              描述
sql_variant	      存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及
                  timestamp。
uniqueidentifier  存储全局标识符 (GUID)。
xml	              存储 XML 格式化数据。最多 2GB。
cursor	          存储对用于数据库操作的指针的引用。
table	          存储结果集,供稍后处理。
相关推荐
XiaoH23344 分钟前
培训机构Day15
sql·mysql
车轮滚滚__1 小时前
uniapp对接unipush 1.0 ios/android
笔记
云边有个稻草人4 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
Hacker_LaoYi8 小时前
SQL注入的那些面试题总结
数据库·sql
Hacker_LaoYi10 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
独行soc10 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
冷眼看人间恩怨12 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
独行soc12 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
百度智能云技术站12 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
清平乐的技术专栏13 小时前
Hive SQL 查询所有函数
hive·hadoop·sql