sql基础

sql基础

练习

不区分大小写

常量区分大小写

1.1注释

1.1.1sql标准

/* */ //多行注释

-- //单行注释

1.1.2mysql注释

# //单行注释

COMMENT //为字段或列添加注释

1.2语句

1.2.1数据库

1.1创建

CREATE DATABASE [IF NOT EXISTS] db_name

​ [create_specification [, create_specification] …]

​ create_specification:

​ [DEFAULT] CHARACTER SET charset_name

​ [DEFAULT] COLLATE collation_name

[] //为可选内容:

  • IF NOT EXISTS //表示是否要检查以存在,如果数据库不存在则创建,否则不创建
  • create_specification //创建条件
  • CHARACTER SET //指定数据库采用的字符集
  • COLLATE // 指定数据库字符集的比较方式
  • DEFAULT //表示默认内容,即使没有指定该项,也有默认值
1.2显示

SHOW DATABASES //查看库

SHOW CREATE DATABASE db_name //查看库创建语句

1.3修改

ALTER DATABASE [IF NOT EXISTS] 数据库名 DEFAULT

1.4删除

DROP DATABASE [IF EXISTS] db_name

1.2.2数据表

1.1创建数据表

CREATE TABLE 表名{

​ 字段名1,数据类型[完整性约束条件],

​ …

​ 字段名n,数据类型[完整性约束条件]

};

1.2查看数据表

SHOW TABLES;

SHOW CREATE TABLE 表名;

1.3修改数据表
RENAME TABLE 表名 t0 新表名修改表名称
ALTER TABLE 表名 ADD 新字段 数据类型 [FIRST|AFTER已存在字段名]添加新的字段,FIRST //将新添加的字段放在第一个字段,AFTER //将新添加的字段放在已存在的字段之后
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型修改字段名称
ALTER TABLE 表名 MODIFY 字段名 新数据类型修改字段的数据类型
ALTER TABLE 表名 DROP 字段名删除字段
1.4删除数据表

DROP TABLE 表名

1.2.3数据

1.1添加数据

INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…)

1.2更新数据

UPDATE 表名 SET 字段名1=值1 [,字段名2=值1…]

1.3删除数据

DELETE FROM 表名 [WHERE 条件表达式]

1.2.3简单查询

SELECT 表名 from 库名 where

where常用表达式

运算符说明
比较运算符> < <= >= = <>大于,小于,小于等于,大于等于,不等于
BETWEEN …AND…显示在某一区间的值
IN(set)显示在in列表中的值
IS NULL判断是否为空
LIKE模糊查询 //%匹配任意长度字符,_匹配任意单字符
逻辑运算符and
or
not

1.2.4高级查询

内置函数

ORDER BY //排序,默认升序,asc升序,desc降序,常用

1.2.5多表查询

  • 交叉连接
  • 内连接
  • 外连接
  • 子查询
1.1IN

内层查询语返回数据列

1.2EXISTS

内层查询语相当于测试,不返回数据,返回true和false,返回为true时,外层才执行

1.3ANY

允许创建一个表达式对子查询的返回值进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询语句

1.4ALL

允许创建一个表达式对子查询的返回值进行比较,要求返回的结构同时满足所有内层查询条件才为true

带比较运算符的子查询

1.3数据类型

1.3.1mysql数据类型

1.1text类型
数据类型描述
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的长度,最多 255 个字符
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符,注释:如果值的长度大于 255,则被转换为 TEXT 类型
TINYTEXT存放最大长度为 255 个字符的字符串
TEXT存放最大长度为 65,535 个字符的字符串
BLOB用于 BLOBs (Binary Large OBjects),存放最多 65,535 字节的数据
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串
MEDIUMBLOB用于 BLOBs (Binary Large OBjects),存放最多 16,777,215 字节的数据
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串
LONGBLOB用于 BLOBs (Binary Large OBjects),存放最多 4,294,967,295 字节的数据
ENUM(x,y,z,etc.)允许你输入可能值的列表,可以在 ENUM 列表中列出最大 65535 个值,如果列表中不存在插入的值,则插入空值,注释:这些值是按照你输入的顺序存储的,可以按照此格式输入可能的值:ENUM(‘X’,‘Y’,‘Z’)
SET与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值
1.2number类型
数据类型描述
TINYINT(size)-128 到 127 常规,0 到 255 无符号*,在括号中规定最大位数
SMALLINT(size)-32768 到 32767 常规,0 到 65535 无符号*,在括号中规定最大位数
MEDIUMINT(size)-8388608 到 8388607 普通,0 to 16777215 无符号*,在括号中规定最大位数
INT(size)-2147483648 到 2147483647 常规,0 到 4294967295 无符号*,在括号中规定最大位数
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规,0 到 18446744073709551615 无符号*,在括号中规定最大位数
FLOAT(size,d)带有浮动小数点的小数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数
DOUBLE(size,d)带有浮动小数点的大数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数
DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点,
1.3date类型
数据类型描述
DATE()日期,格式:YYYY-MM-DD注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME()*日期和时间的组合,格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP()*时间戳,TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储,格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME()时间,格式:HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR()2 位或 4 位格式的年,注释:4 位格式所允许的值:1901 到 2155,2 位格式所允许的值:70 到 69,表示从 1970 到 2069

1.3.2sql server数据类型

1.1character字符串
数据类型描述
char(n)固定长度的字符串,最多 8,000 个字符
varchar(n)可变长度的字符串,最多 8,000 个字符
varchar(max)可变长度的字符串,最多 1,073,741,824 个字符
text可变长度的字符串,最多 2GB 字符数据
1.2unicode字符串
数据类型描述
nchar(n)固定长度的 Unicode 数据,最多 4,000 个字符
nvarchar(n)可变长度的 Unicode 数据,最多 4,000 个字符
nvarchar(max)可变长度的 Unicode 数据,最多 536,870,912 个字符
ntext可变长度的 Unicode 数据,最多 2GB 字符数据
1.3binary类型
数据类型描述
bit允许 0、1 或 NULL
binary(n)固定长度的二进制数据,最多 8,000 字节
varbinary(n)可变长度的二进制数据,最多 8,000 字节
varbinary(max)可变长度的二进制数据,最多 2GB 字节
image可变长度的二进制数据,最多 2GB
1.4number类型
数据类型描述
tinyint允许从 0 到 255 的所有数字
smallint允许从 -32,768 到 32,767 的所有数字
int允许从 -2,147,483,648 到 2,147,483,647 的所有数字
bigint允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字
decimal(p,s)固定精度和比例的数字,允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧),p 必须是 1 到 38 之间的值,默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0
numeric(p,s)固定精度和比例的数字,允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧),p 必须是 1 到 38 之间的值。默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0
smallmoney介于 -214,748.3648 和 214,748.3647 之间的货币数据
money介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据
float(n)从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据,参数 n 指示该字段保存 4 字节还是 8 字节,float(24) 保存 4 字节,而 float(53) 保存 8 字节,n 的默认值是 53
real从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据
1.5date类型
数据类型描述
datetime从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒
datetime2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒
smalldatetime从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟
date仅存储日期,从 0001 年 1 月 1 日 到 9999 年 12 月 31 日
time仅存储时间,精度为 100 纳秒
datetimeoffset与 datetime2 相同,外加时区偏移
timestamp存储唯一的数字,每当创建或修改某行时,该数字会更新,timestamp 基于内部时钟,不对应真实时间,每个表只能有一个 timestamp 变量
1.6其他数据类型
数据类型描述
sql_variant存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp
uniqueidentifier存储全局标识符
xml存储 XML 格式化数据,最多 2GB
cursor存储对用于数据库操作的指针的引用
table存储结果集,供稍后处理

1.4约束

1.4.1主键约束

PRIMARY KEY constraint

为唯一标识表中的记录,可以通过PRIMARY KEY来设置主键。主键列值不能为空,也不能重复,就好比人的身份证,用来标识人的身份,每个人都有,而且全都不重复。一个表只能有一个主键约束。主键约束可以分为两种:单字段主键,多字段主键

1.4.2非空约束

NOT NULL constraint

限制某列必须有值,不能为空,通过NOT NULL来设置非空约束

1.4.3唯一约束

UNIQUE constraint

限制某列不能重复,通过UNIQUE来设置唯一的约束

1.4.4默认约束

DEFAULT constraint

设置某列默认值,通过DEFAULT来设置默认约束

1.4.5外键约束

FOREIGN KEY constraint

设置一个表中的某列引用至另一个表中的某一列,通过FOREIGN KEY来设置外键约束

1.5索引

mysql通过建立索引来提高数据的搜索速度

  • 普通索引
  • 唯一索引
  • 全文索引
  • 空间索引

1.5.1创建索引

CREATE TABLE 表名(字段1类型,字段2类型,…

​ 字段名 数据类型 [UNIQUE|FULLTEXT|SPATIAL|INDEX|KEY]

​ [别名](字段名1[(长度)])[ASC|DESC]

)

1.5.2删除索引

ALTER TABLE 表名 DROP INDEX 索引名

1.6备份与还原

1.6.1自带功能

data export

data import

1.6.2mysqldump工具

mysqldump -u 用户名 -p 数据库名 > 文件名.sql //备份

mysqldump -u 用户名 -p 数据库名 < 文件名.sql //还原

source d:/文件名.sql# sql语句

sqlbolt.com //练习

不区分大小写

常量区分大小写

1.1注释

1.1.1sql标准

/* */ //多行注释

-- //单行注释

1.1.2mysql注释

# //单行注释

COMMENT //为字段或列添加注释

1.2语句

1.2.1数据库

1.1创建

CREATE DATABASE [IF NOT EXISTS] db_name

​ [create_specification [, create_specification] …]

​ create_specification:

​ [DEFAULT] CHARACTER SET charset_name

​ [DEFAULT] COLLATE collation_name

[] //为可选内容:

  • IF NOT EXISTS //表示是否要检查以存在,如果数据库不存在则创建,否则不创建
  • create_specification //创建条件
  • CHARACTER SET //指定数据库采用的字符集
  • COLLATE // 指定数据库字符集的比较方式
  • DEFAULT //表示默认内容,即使没有指定该项,也有默认值
1.2显示

SHOW DATABASES //查看库

SHOW CREATE DATABASE db_name //查看库创建语句

1.3修改

ALTER DATABASE [IF NOT EXISTS] 数据库名 DEFAULT

1.4删除

DROP DATABASE [IF EXISTS] db_name

1.2.2数据表

1.1创建数据表

CREATE TABLE 表名{

​ 字段名1,数据类型[完整性约束条件],

​ …

​ 字段名n,数据类型[完整性约束条件]

};

1.2查看数据表

SHOW TABLES;

SHOW CREATE TABLE 表名;

1.3修改数据表
RENAME TABLE 表名 t0 新表名修改表名称
ALTER TABLE 表名 ADD 新字段 数据类型 [FIRST|AFTER已存在字段名]添加新的字段,FIRST //将新添加的字段放在第一个字段,AFTER //将新添加的字段放在已存在的字段之后
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型修改字段名称
ALTER TABLE 表名 MODIFY 字段名 新数据类型修改字段的数据类型
ALTER TABLE 表名 DROP 字段名删除字段
1.4删除数据表

DROP TABLE 表名

1.2.3数据

1.1添加数据

INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…)

1.2更新数据

UPDATE 表名 SET 字段名1=值1 [,字段名2=值1…]

1.3删除数据

DELETE FROM 表名 [WHERE 条件表达式]

1.2.3简单查询

SELECT 表名 from 库名 where

where常用表达式

运算符说明
比较运算符> < <= >= = <>大于,小于,小于等于,大于等于,不等于
BETWEEN …AND…显示在某一区间的值
IN(set)显示在in列表中的值
IS NULL判断是否为空
LIKE模糊查询 //%匹配任意长度字符,_匹配任意单字符
逻辑运算符and
or
not

1.2.4高级查询

内置函数

ORDER BY //排序,默认升序,asc升序,desc降序,常用

1.2.5多表查询

  • 交叉连接
  • 内连接
  • 外连接
  • 子查询
1.1IN

内层查询语返回数据列

1.2EXISTS

内层查询语相当于测试,不返回数据,返回true和false,返回为true时,外层才执行

1.3ANY

允许创建一个表达式对子查询的返回值进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询语句

1.4ALL

允许创建一个表达式对子查询的返回值进行比较,要求返回的结构同时满足所有内层查询条件才为true

带比较运算符的子查询

1.3数据类型

1.3.1mysql数据类型

1.1text类型
数据类型描述
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的长度,最多 255 个字符
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符,注释:如果值的长度大于 255,则被转换为 TEXT 类型
TINYTEXT存放最大长度为 255 个字符的字符串
TEXT存放最大长度为 65,535 个字符的字符串
BLOB用于 BLOBs (Binary Large OBjects),存放最多 65,535 字节的数据
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串
MEDIUMBLOB用于 BLOBs (Binary Large OBjects),存放最多 16,777,215 字节的数据
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串
LONGBLOB用于 BLOBs (Binary Large OBjects),存放最多 4,294,967,295 字节的数据
ENUM(x,y,z,etc.)允许你输入可能值的列表,可以在 ENUM 列表中列出最大 65535 个值,如果列表中不存在插入的值,则插入空值,注释:这些值是按照你输入的顺序存储的,可以按照此格式输入可能的值:ENUM(‘X’,‘Y’,‘Z’)
SET与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值
1.2number类型
数据类型描述
TINYINT(size)-128 到 127 常规,0 到 255 无符号*,在括号中规定最大位数
SMALLINT(size)-32768 到 32767 常规,0 到 65535 无符号*,在括号中规定最大位数
MEDIUMINT(size)-8388608 到 8388607 普通,0 to 16777215 无符号*,在括号中规定最大位数
INT(size)-2147483648 到 2147483647 常规,0 到 4294967295 无符号*,在括号中规定最大位数
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规,0 到 18446744073709551615 无符号*,在括号中规定最大位数
FLOAT(size,d)带有浮动小数点的小数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数
DOUBLE(size,d)带有浮动小数点的大数字,在括号中规定最大位数,在 d 参数中规定小数点右侧的最大位数
DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点,
1.3date类型
数据类型描述
DATE()日期,格式:YYYY-MM-DD注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME()*日期和时间的组合,格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP()*时间戳,TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储,格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME()时间,格式:HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR()2 位或 4 位格式的年,注释:4 位格式所允许的值:1901 到 2155,2 位格式所允许的值:70 到 69,表示从 1970 到 2069

1.3.2sql server数据类型

1.1character字符串
数据类型描述
char(n)固定长度的字符串,最多 8,000 个字符
varchar(n)可变长度的字符串,最多 8,000 个字符
varchar(max)可变长度的字符串,最多 1,073,741,824 个字符
text可变长度的字符串,最多 2GB 字符数据
1.2unicode字符串
数据类型描述
nchar(n)固定长度的 Unicode 数据,最多 4,000 个字符
nvarchar(n)可变长度的 Unicode 数据,最多 4,000 个字符
nvarchar(max)可变长度的 Unicode 数据,最多 536,870,912 个字符
ntext可变长度的 Unicode 数据,最多 2GB 字符数据
1.3binary类型
数据类型描述
bit允许 0、1 或 NULL
binary(n)固定长度的二进制数据,最多 8,000 字节
varbinary(n)可变长度的二进制数据,最多 8,000 字节
varbinary(max)可变长度的二进制数据,最多 2GB 字节
image可变长度的二进制数据,最多 2GB
1.4number类型
数据类型描述
tinyint允许从 0 到 255 的所有数字
smallint允许从 -32,768 到 32,767 的所有数字
int允许从 -2,147,483,648 到 2,147,483,647 的所有数字
bigint允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字
decimal(p,s)固定精度和比例的数字,允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧),p 必须是 1 到 38 之间的值,默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0
numeric(p,s)固定精度和比例的数字,允许从 -10^38 +1 到 10^38 -1 之间的数字,p 参数指示可以存储的最大位数(小数点左侧和右侧),p 必须是 1 到 38 之间的值。默认是 18,s 参数指示小数点右侧存储的最大位数,s 必须是 0 到 p 之间的值,默认是 0
smallmoney介于 -214,748.3648 和 214,748.3647 之间的货币数据
money介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据
float(n)从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据,参数 n 指示该字段保存 4 字节还是 8 字节,float(24) 保存 4 字节,而 float(53) 保存 8 字节,n 的默认值是 53
real从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据
1.5date类型
数据类型描述
datetime从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒
datetime2从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒
smalldatetime从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟
date仅存储日期,从 0001 年 1 月 1 日 到 9999 年 12 月 31 日
time仅存储时间,精度为 100 纳秒
datetimeoffset与 datetime2 相同,外加时区偏移
timestamp存储唯一的数字,每当创建或修改某行时,该数字会更新,timestamp 基于内部时钟,不对应真实时间,每个表只能有一个 timestamp 变量
1.6其他数据类型
数据类型描述
sql_variant存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp
uniqueidentifier存储全局标识符
xml存储 XML 格式化数据,最多 2GB
cursor存储对用于数据库操作的指针的引用
table存储结果集,供稍后处理

1.4约束

1.4.1主键约束

PRIMARY KEY constraint

为唯一标识表中的记录,可以通过PRIMARY KEY来设置主键。主键列值不能为空,也不能重复,就好比人的身份证,用来标识人的身份,每个人都有,而且全都不重复。一个表只能有一个主键约束。主键约束可以分为两种:单字段主键,多字段主键

1.4.2非空约束

NOT NULL constraint

限制某列必须有值,不能为空,通过NOT NULL来设置非空约束

1.4.3唯一约束

UNIQUE constraint

限制某列不能重复,通过UNIQUE来设置唯一的约束

1.4.4默认约束

DEFAULT constraint

设置某列默认值,通过DEFAULT来设置默认约束

1.4.5外键约束

FOREIGN KEY constraint

设置一个表中的某列引用至另一个表中的某一列,通过FOREIGN KEY来设置外键约束

1.5索引

mysql通过建立索引来提高数据的搜索速度

  • 普通索引
  • 唯一索引
  • 全文索引
  • 空间索引

1.5.1创建索引

CREATE TABLE 表名(字段1类型,字段2类型,…

​ 字段名 数据类型 [UNIQUE|FULLTEXT|SPATIAL|INDEX|KEY]

​ [别名](字段名1[(长度)])[ASC|DESC]

)

1.5.2删除索引

ALTER TABLE 表名 DROP INDEX 索引名

1.6备份与还原

1.6.1自带功能

data export

data import

1.6.2mysqldump工具

mysqldump -u 用户名 -p 数据库名 > 文件名.sql //备份

mysqldump -u 用户名 -p 数据库名 < 文件名.sql //还原1

source d:/文件名.sq //还原2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值