SQL基础:SQL命令
Posted 古兰精
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL基础:SQL命令相关的知识,希望对你有一定的参考价值。
1、CREATE INDEX 语句
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 (column_name)
//注释:用于创建索引的语法在不同的数据库中不一样。因此,检查您的数据库中创建索引的语法。
//在 "Persons" 表的 "LastName" 列上创建一个名为 "PIndex" 的索引:
CREATE INDEX PIndex
ON Persons (LastName)
//如果希望索引不止一个列,可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)
2、 DROP 语句
DROP语句可以轻松地删除索引、表和数据库。
DROP INDEX 语句用于删除表中的索引。
//用于 MS Access 的 DROP INDEX 语法:
DROP INDEX index_name ON table_name
//用于 MS SQL Server 的 DROP INDEX 语法:
DROP INDEX table_name.index_name
//用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
//用于 mysql 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句用于删除表。语法:DROP TABLE table_name
DROP DATABASE 语句用于删除数据库。语法:DROP DATABASE database_name
TRUNCATE TABLE 语句:仅仅需要删除表内的数据,但并不删除表本身。语法:TRUNCATE TABLE table_name
3、ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
语法:
//如需在表中添加列,请使用下面的语法:
ALTER TABLE table_name
ADD column_name datatype
//如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
ALTER TABLE table_name
DROP COLUMN column_name
//要改变表中列的数据类型,请使用下面的语法:
//SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
//My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
//Oracle 10G 之后版本:
ALTER TABLE table_name
MODIFY column_name datatype;
请看 "Persons" 表:
现在,我们想在 "Persons" 表中添加一个名为 "DateOfBirth" 的列。我们使用下面的 SQL 语句:ALTER TABLE Persons ADD DateOfBirth date。新列 "DateOfBirth" 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。
现在,"Persons" 表将如下所示:
现在,我们想要改变 "Persons" 表中 "DateOfBirth" 列的数据类型。我们使用下面的 SQL 语句:ALTER TABLE Persons ALTER COLUMN DateOfBirth year。现在 "DateOfBirth" 列的类型是 year,可以存放 2 位或 4 位格式的年份。
接下来,我们想要删除 "Person" 表中的 "DateOfBirth" 列。我们使用下面的 SQL 语句:ALTER TABLE Persons DROP COLUMN DateOfBirth。现在加的DateOfBirth列就被删除了。
4、SQL NULL 值
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 值的处理方式与其他值不同。NULL 用作未知的或不适用的值的占位符。
注意:无法比较 NULL 和 0;它们是不等价的。
那么我们如何测试 NULL 值呢?无法使用比较运算符来测试 NULL 值,比如 =、< 或 <>。我们必须使用 IS NULL 和 IS NOT NULL 操作符。
SQL IS NULL:我们如何仅仅选取在 "Address" 列中带有 NULL 值的记录呢?我们必须使用 IS NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
//请始终使用 IS NULL 来查找 NULL 值。
SQL IS NOT NULL:我们如何仅仅选取在 "Address" 列中不带有 NULL 值的记录呢?我们必须使用 IS NOT NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL
5、SQL NULL 函数
ISNULL() 函数用于规定如何处理 NULL 值。
NVL()、IFNULL() 和 COALESCE() 函数也可以达到相同的结果。
//在这里,我们希望 NULL 值为 0。
//下面,如果 "UnitsOnOrder" 是 NULL,则不会影响计算,因为如果值是 NULL 则 ISNULL() 返回 0:
//SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
//Oracle:Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
//MySQL:MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。在 MySQL 中,我们可以使用 IFNULL() 函数,如下所示:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
//或者我们可以使用 COALESCE() 函数,如下所示:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
//如果alexa列为null值,则赋予0,否则,取原值
select id,name,url,ifnull(alexa,0)from websites;
select id,name,url,COALESCE(alexa,0) from websites;
6、数据类型
查检查文档
以上是关于SQL基础:SQL命令的主要内容,如果未能解决你的问题,请参考以下文章
以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?