SQL学习笔记|四

SQL CREATE INDEX 语句(索引,在不读取整张表的情况下,索引使得数据库应用程序可以更快地查找数据)

更新一个包含索引的表笔更新一个不包含索引的表需要更多的时间,这是由于索引本身也需要更新时间。

因此,最理想的索引是创建在被搜索列上的。

允许重复行

CREATE INDEX index_name

ON table_name (column_name)

不允许重复行

CREATE UNIQUE INDEX index_name

ON table_name (column_name)

创建降序索引

CREATE INDEX PersonIndex ON Person (LastName DESC)

创建包含多列的索引

CREATE INDEX PersonINdex ON Person (LastName, FirstName)

SQL撤销索引、表以及数据库

SQL DROP INDEX 语句

用于Microsoft SQLJet(以及Microsoft Acess)的语法:

DROP INDEX index_name ON table_name

用于MS SQL Server的语法:

DROP INDEX table_name.index_name

用于IBM DB2 和 Oracle语法:

DROP INDEX index_name

用于MYSQL的语法:

ALER TABLE table_name DROP  INDEX index_name

SQL DROP TABLE 语句

DROP TABLE 表名称

SQL DROP DATABASE 语句

DROP TABLE 数据库名称

SQL TRUNCATE(本意截断,我觉得应该翻译为清空) TABLE语句

truncate table 表名称

 

SQL ALTER TABLE语句

用于在已有表中进行添加、修改、删除

在表中添加列

ALTER TABLE table_name ADD column_name datatype

删除表中的列

ALTER TABLE table_name DROP COLUMN  column_name

更新表中列的数据类型

ALTER TABLE table_name ALTER COLUMN column_name datatype

 

SQL AUTO INCREMENT 字段

用于MySQL的语法(让P_ID自增):

CREATE TABLE Persons(

P_Id int NOT NULL AUTO_INCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

City varchar(255),

PRIMARY KEY(P_Id)

为序列添加起始值

ALERT TABLE Persons AUTO_INCREMENT=100

不必为“P_Id”列规定值

INSERT INTO Persons (FirstName,LastName)

VALUES ('Bill','Gates')

用于SQL Server的语法:

CREATE TABLE Persons(

P_Id int PRIMARY KEY  IDENTITY(初始值,递增值),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

City varchar(255),

用于Access的语法

CREATE TABLE Persons(

P_Id int PRIMARY KEY AUTOINCREMENT(初始值,递增值),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

City varchar(255),

用于Oracle的语法:

CREATE SEQUENCE seq_person

MINVALUE 1

START SWITH 1

INCREMENT BY 1

CACHE 10

更新记录的时候的区别:

INSERT INTO Persons (P_Id,FirstName,LastName)

VALUES(seq_persons.nextval,'Lars','Monsen')

 

SQL VIEW(视图)

什么是视图?

在SQL中,视图是基于SQL语句的结果集可视化的表

创建视图

CREATE VIEW view_name AS

SELECT clumn_name(s)

FROM tabel_name

WHERE  condition

更新视图

SQL CRAETE OR REPLACE VIEW Syntax

CREATE OR REPLACE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE  condition

SQL撤销视图

DROP VIEW Syntax(有秩序的排序)

DROP VIEW view_name

 

SQL Date 函数

MySQL Date 函数

下面的表格列出了 MySQL 中最重要的内建日期函数:

函数描述
NOW()返回当前的日期和时间
CURDATE()返回当前的日期
CURTIME()返回当前的时间
DATE()提取日期或日期/时间表达式的日期部分
EXTRACT()返回日期/时间按的单独部分
DATE_ADD()给日期添加指定的时间间隔
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期之间的天数
DATE_FORMAT()用不同的格式显示日期/时间

SQL Server Date 函数

下面的表格列出了 SQL Server 中最重要的内建日期函数:

函数描述
GETDATE()返回当前日期和时间
DATEPART()返回日期/时间的单独部分
DATEADD()在日期中添加或减去指定的时间间隔
DATEDIFF()返回两个日期之间的时间
CONVERT()用不同的格式显示日期/时间

SQL Date 数据类型

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: 唯一的数字

SQL 日期处理

如果不涉及时间部分,那么我们可以轻松地比较两个日期!

假设我们有下面这个 "Orders" 表:

OrderIdProductNameOrderDate
1computer2008-12-26
2printer2008-12-26
3electrograph2008-11-12
4telephone2008-10-19

现在,我们希望从上表中选取 OrderDate 为 "2008-12-26" 的记录。

我们使用如下 SELECT 语句:

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

结果集:

OrderIdProductNameOrderDate
1computer2008-12-26
3electrograph2008-12-26

现在假设 "Orders" 类似这样(请注意 "OrderDate" 列中的时间部分):

OrderIdProductNameOrderDate
1computer2008-12-26 16:23:55
2printer2008-12-26 10:45:26
3electrograph2008-11-12 14:12:08
4telephone2008-10-19 12:56:10

如果我们使用上面的 SELECT 语句:

SELECT * FROM Orders WHERE OrderDate='2008-12-26'

 

SQL NULL值

空值运算符的运算不能只用常规的运算符,必须是IS NULL 或者 IS NOT NULL来实现。

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

如果我们执行是下面的语句

SELECT ProductName,UnitPrice*(UnitsINStock+UnitsONOrder) FROM Products

如果UnitsOnOrder里面n包含空值,那么你将会得到空值。

SQL Server / MS Access

SELECT ProductName,UnitPrice*(UnitsINStock+ISNULL(UnitsOnOder,0)) FROM Products

Oracle

SELECT ProductName,UnitPrice*(UnitsINStock+NVL(UnitsOnOder,0)) FROM Products

MySQL

SELECT ProductName,UnitPrice*(UnitsINStock+IFNULL(UnitsOnOder,0)) FROM Products

或者

SELECT ProductName,UnitPrice*(UnitsINStock+COALESCE(UnitsOnOder,0)) FROM Products

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值