SQL不完全手册(二):高级语句 下

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: SQL不完全手册(二):高级语句

11.索引的使用:sql create index

   在表中创建所以,以便更加快速高效的查询数据,用户无法看到索引,它们只能被用来加速搜索/查询。

   注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

创建索引

SQL CREATE INDEX语法

在表上创建一个简单的索引,语序使用重复的值

create index index_name on table_name(column_name)

SQL CREATE UNIQUE INDEX语法

在表上创建一个唯一的索引,唯一的索引意味着两个行不能有相同的索引值

create unique index index_name on table_name(cloumn_name)

实例

默认升序索引

create index aIndex on A(id)

降序索引

create index aIndex on A(id desc)

索引多个列

create index aIndex on A(id, name)

删除索引

microsoft SQLJet(以及Microsoft Access)的语法

drop index index_name on table_name

ms sql server

drop index table_name.index_name

ibm db2/oracle

drop index index_name

mysql

alter table table_name drop index index_name

12.修改表:ALTER TABLE

   用于在已有的表中添加、修改或删除列

添加列

alter table table_name
add column_name datetype

删除列

alter table table_name
drop column column_name

修改列的数据类型

alter table table_name
alter column column_name datatype

13.生成一个唯一的自增数字标识:SQL AUTOINCREMENT

mysql语法

create table demoAuto(
  id int not null auto_increment
  name varchar(255),
  primary key(id)
)

auto_increment的开始值是1,每条新纪录递增1,可修改起始值,如下:

alter table demoAuto auto_increment=100

插入新纪录是,没必要指定自增的id值

insert into demoAuto(name) values('yang')

sql server语法

my sql使用identity关键字来执行 auto-increment 任务。

create table demoAuto(
  id int primary key identity,
  name varchar(255)
)

图片.png

   若需要起始值为10,每隔20递增,则定义的时候使用identity(10,20)

access的语法

create table demoAuto(
  id int primary key autoincrement,
  name varchar(255)
)

oracle语法

   在oracle代码复杂,必须使用create sequence对创建auto-increment字段

CREATE SEQUENCE seq_auto
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

   上面代码,创建名为seq_auto的序列对象,以1起始,以1递增,缓存10个对象以提高性能。

14.视图:SQL VIEW

   视图是可视化的表,基于SQL语句的结果集的可视化表,视图包含行和列,就像一个真实的表,视图中的字段来自一个或多个数据库中真实的表中的字段(可使用别名替换显示),可向视图添加SQL函数、where以及join语句,也可以提交数据,就像某些来自于某个单一的表。

   注意:数据库的设计和结构不会受视图的中函数、where或join语句的影响。

创建视图

create view view_name as select_syntax

图片.png

 

更新视图

 

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

图片.png

撤销视图

sql drop view

drop view teacherView

15.日期数据类型:Date

表4:sql server 日期函数

函数

描述

getdate()

返回当前日期和时间

datepart()

返回日期/时间的单独部分

dateadd()

在日期中添加或减去指定的时间间隔

datediff()

返回两个日期之间的时间

convert()

用不同的格式显示日期/时间

sql server Date数据类型

date:格式 yyyy-mm-dd

dateTime:格式yyyy-mm-dd hh:mm:ss

smallDateTime:格式yyyy-mm-dd hh:mm:ss

timeStamp:唯一的数字

图片.png

表5:mysql重要的内建日期函数

函数

描述

now()

返回当前日的日期和时间

curDate()

返回当前的日期

curTime()

返回当前的时间

date()

提取日期或日期/时间表达式的日期部分

extract()

返回日期/时间按的单独部分

date_add()

给日期添加指定的时间间隔

date_sub()

从日期减去指定的时间间隔

datediff()

返回两个日期之间的天数

date_format()

用不同的格式显示日期/时间

16.sql的null值处理:SQL IS NULL,IS NOT NULL ISNULL()、NVL()、IFNULL()和COALESCE()

SQL IS NULL,IS NOT NULL

   如果表中的某个列是可选的,那么可以不向该列添加值,插入新纪录则该字段将以NULL值保存。

   NULL值得处理方式与其他值不同。

   NULL用作为止的或不适用的值的占位符。

注:无法比较NULL和0,它们是不等价的。

select * from student where birthday is null;
select * from student where birthday is not null;

SQL ISNULL()、NVL()、IFNULL()和COALESCE()函数

sql server/ms access

ISNULL定义如何处理null

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

oracle

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

mysql

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

17.数据库的数据类型

sql server的数据类型

Character字符串

数据类型

描述

存储

char(n)

固定长度的字符串,最多8000个字符

n

varchar(n)

可变长度的字符串,最多8000个字符

 

varchar(max)

可变长度的字符串,最多1073741824个字符

 

text

可变长度的字符串,最多2GB字符数据

 

unicode

数据类型

描述

存储

nchar(n)

固定长度的unicode数据,最多4000个字符

 

nvarchar(n)

可变长度的unicode数据,最多4000个字符

 

nvarchar(max)

可变长度的unicode数据,最多53687912个字符

 

ntext

可变长度的unicode数据,最多2GB字符数据

 

binary

数据类型

描述

存储

bit

允许0、1或NULL、

 

binary(n)

固定长度的二进制数据,最多8000字节

 

varbinary(n)

可变长度的二进制数据,最多8000字节

 

varbinary(max)

可变长度的二进制数,最多2GB字节

 

image

可变长度的二进制数据,最多2GB字节

 

number

数据类型

描述

存储

tinyint

允许从0到255的所有数字

1字节

smallint

允许从-32768到32767的所有数字

2字节

int

允许从-2147483648到2147483647的所有数字

4字节

bigint

允许介于-9223372036854775808和9223372036854775807之间的所有数字

8字节

decimal(p,s)

固定精度和比例的数字,允许从-10^38+1到10^38-1之间的数字。

p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值,默认是18。

s参数指标小数点右侧存储的最大位数,s必须是0到p之间的值,默认是0

5-17字节

numeric(p,s)

固定精度和比例的数字,允许从-10^38+1到10^38-1之间的数字。

p参数指示可以存储的最大位数(小数点左侧和右侧)。p必须是1到38之间的值,默认是18。

s参数指标小数点右侧存储的最大位数,s必须是0到p之间的值,默认是0

5-17字节

smallmoney

允许从-2147483648到2147483647的货币数据

4字节

money

许介于-9223372036854775808和9223372036854775807之间的货币数据

4字节

float(n)

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

4或8字节

real

从-3.04E+38到3.40E+38的浮动精度数字数据

4字节

date

数据类型

描述

存储

dateTime

从1753年1月1日到9999年12月31日,精度为3.33毫秒

8bytes

dateTime2

从1753年1月1日到9999年12月31日,精度为100纳秒

6-8bytes

smallDateTime

从1900年1月1日到2079年6月6日,精度为1分钟

4bytes

date

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

3bytes

time

仅存储事件。精度为100纳秒

3-5bytes

datetimeoffset

与dateTime2相同,外加时区偏移

8-10bytes

timestamp

存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp基于内部时钟,不对应真实事件

 

其他类型数据

数据类型

描述

sql_variant

存储最多8000字节不同数据类型的数据,除了text、ntext以及timestamp

uniqueIdentifier

存储全局标识符(GUID)

xml

存储xml格式化数据,最多2GB

cursor

存储对用于数据库操作的指针的引用

table

存储结果集,供稍后处理

 

 

 

SQL不完全手册(三):函数》:https://blog.csdn.net/qq21497936/article/details/80262309

 

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80242112

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL
SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法
SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录。下面是AND运算符的基本语法:
52 1
|
6月前
|
SQL 监控 关系型数据库
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
456 0
|
6月前
|
SQL 存储 关系型数据库
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
94 0
|
1月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
89 0
|
6月前
|
SQL 存储 关系型数据库
【MYSQL高级】Mysql的SQL性能分析【借助EXPLAIN分析】
【MYSQL高级】Mysql的SQL性能分析【借助EXPLAIN分析】
73 0
|
3月前
|
存储 SQL 关系型数据库
SQL联结表及高级联结
SQL联结表及高级联结
28 0
|
3月前
|
SQL OLAP Serverless
第五章:SQL高级处理---SQL学习笔记
第五章:SQL高级处理---SQL学习笔记
40 0
|
4月前
|
SQL 存储
百度搜索:蓝易云【高级SQL语句】
这些是SQL中一些常见的高级语句示例,它们可以帮助你处理更复杂的查询和数据操作需求。请根据具体情况选择适当的语句,并参考相关的SQL文档和教程来进一步了解和学习。
36 0
|
9月前
|
SQL Oracle 关系型数据库
SQL高级教程第三章(二)
SQL高级教程第三章(二)
79 0