SQL学习笔记

数据操作语言DML和数据定义语言DDL
查询和更新指令构成了SQL的DML部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL的DDL部分使我们有能力创建或删除表格。我们也可以定义索引,规定表之间的链接,以及施加表间的约束。
SQL中最重要的DDL语句
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 修改数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引
DROP INDEX - 删除索引

SELECT语句
语法:
如:SELECT 列名称 FROM 表名称
如:SELECT 列名称,列名称 FROM表名称
如:SELECT * FROM 表名称
如:SELECT DISTINCT 列名称 FROM 表名称 相同列名称将只列出一个
如:SELECT 列名称 FROM 表名称 WHERE 运算符
例:SELECT FirstName FROM Persons 得到Persons表中只有FirstName列的子表。
例:SELECT FirstName,LastName FROM Persons 得到Persons表中只有FirstName和LastName列的子表。
例:SELECT * FROM Persons WHERE City='Beijing' 如果是字符串要用单引号环绕文本值,如果是数值则不需要。
AND和OR:运算符可以再WHERE子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则AND运算符显示一条记录。
如果第一个条件和第二个条件只要有一个成立,则OR运算符显示一条记录。
如:SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
如:SELECT * FROM Persons WHERE LastName='Bush' OR LastName='Carter'
也可以用圆括号将AND和OR结合起来组成复杂的表达式。
如:SELECT * FROM Persons WHERE (FirstName='Thomas'OR FirstName='William')AND LastName='Carter'
ORDER By:语句用于根据指定的列队结果集进行排序,默认为升序,可以用DESC关键字改变为降序。
如:SELECT Company,OrderNumber FROM Orders ORDER BY Company
如:SELECT Company,OrderNumber FROM Orders ORDER BY Company,OrderNumber 先根据Company排序,Company相同的再根据OrderNumber排序
如:SELECT Company,OrderNumber FROM Orders ORDER BY Company DESC
如:SELECT Company,OrderNumber FROM Orders ORDER BY Company DESC,OrderNumber ASC
TOP:用于规定要返回的记录的数目,对于大型数据库不用返回所有查询到的语句。
注:并非所有数据库都支持TOP语句。
如:SELECT TOP number|percent 列名称 FROM 表名称
注:MySQL中的LIMIT和Oracle中的ROWNUM与SQL中的TOP是等价的。
如:MySQL中,SELECT 列名称 FROM 表名称 LIMIT number
如:Oracle中,SELECT 列名称 FROM 表名称 ROWNUM <= number
LIKE:操作符用于在WHERE子句中搜索列中的指定模式。
如:SELECT 列名称 FROM 表名称 WHERE 列名称 LIKE pattern
如:SELECT * FROM Persons WHERE City LIKE 'N%' 搜索Persons表中City列中以N开头的行。
住:%为通配符,可以通配多个任意字符。
如:SELECT * FROM Persons WHERE City LIKE '%g' 搜索Persons表中City列中以g结尾的行。
NOT关键字与LIKE配合找出不包含模式
如:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
IN:操作符允许我们在WHERE子句中规定多个值
如:SELECT 列名称 FROM 表名称 WHERE 列名称 IN (值1,值2,...)
如:SELECT * FROM Persons WHERE LastName IN ('Adams','Carter') 搜索Persons表中LastName为Adams或Carter的行。
BETWEEN AND:操作符用于选取介于两个值之间的数据范围。这些值可以是数值、文本、日期。
如:SELECT 列名称 FROM 表名称 WHERE 列名称 BETWEEN 值1 AND 值2
如:SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
如:SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
注:不同的数据库对BETWEEN AND操作符的处理方式有差异,有的是介于两者之间不包括两者,有的是介于两者之间包括两者,有的而是介于两者之间包括前一个不包括后一个。
Alias:可以为列名称和表名称指定别名。
如:SELECT 列名称 FROM 表名称 AS 表别名 为表指定别名
如:SELECT 列名称 AS 列别名 FROM 表名称 为列指定别名
例:SELECT po.DrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John' 该实例等同于下面的语句
例:SELECT Prodect_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Prodect_Orders WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
Join和Key
UNION:操作符用于合并两个或多个SELECT语句的结果集。
UNION ALL:UNION选取不同的值,UNION ALL允许重复的值。
如:SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称
如:SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称
INNER JOIN:
LEFT JION:
RIGHT JION:
FULL JION:

SELECT INTO语句
语句从一个表中选取数据,然后把数据插入另一个表中。通常用于创建表的备份或者用于对记录进行存档。
如:SELECT * INTO 新表名称 [IN 数据库名] FROM 旧表名称
如:SELECT 列名称 INTO 新表名称 [IN 数据库名] FROM 旧表名称
如:SELECT * INTO Persons_backup FROM Persons
如:SELECT * INTO Persons IN 'Backup.mdb' FROM Persons 向另外一个数据库中拷贝表
如:SELECT LastName,FirstName INTO Persons_backup FROM Persons
如:SELECT LastName,FirstName INTO Persons_backup FROM Persons WHERE City='Beijing'

UPDATE语句
用于更新信息
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
如:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

DELETE语句
用于删除信息
语法:
DELETE FROM 表名称 WHERE 列名称 = 值
如:DELETE FROM Person WHERE LastName = 'Wilson'
如:DELETE FROM 表名称 此句删除该表中的所有行
或:DELETE * FROM 表名称

SQL通配符
SQL通配符必须与LIKE运算符一起使用。
%:替代一个或多个字符
-:仅替代一个字符
[charlist]:字符列中的任何单一字符
[^charlist]或[!charlist]:不再字符列中的任何单一字符
如:SELECT * FROM Persons WHERE City LIKE 'N%'
如:SELECT * FROM Persons WHERE City LIKE '%lond%'
如:SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
如:SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
如:SELECT * FROM Persons WHERE City LIKE '[ALN]%' 在Persons表中选取City以'A'或'L'或'N'开头的行
如:SELECT * FROM Persons WHERE City LIKE '[!ALN]%' 在Persons表中选取City不以'A'或'L'或'N'开头的行

CREATE DATABASE语句
用于创建数据库
如:CREATE DATABASE 数据库名

CREATE TABLE语句
用于创建表
如:CREATE TABLE 表名称 (列名称1 数据类型, 列名称2 数据类型,...)
如:CREATE TABLE Persons (Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), Citi varchar(255))
NOT NULL:约束
约束强制列不接受NULL值。约束强制字段始终包含值。如果不向字段添加值就无法插入新纪录或者更新记录。
如:CREATE TABLE Persons ( Id_p int NOT NULL, LastName varchar(255) NOT NULL, ...)
UNIQUE:约束
UNIQUE约束某列的每条记录都不重复。
UNIQUE和PRIMARY KEY约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY拥有自动定义的UNIQUE约束。
每个表可以有多个UNIQUE约束,但每个表只能有一个PRIMARY KEY约束。
没搞明白要约束什么,如就不写了
注:因为不同的数据库,在创建表时的UNIQUE用法不一样,而创建表后添加UNIQUE的用法一样,所以要使用UNIQUE最好是在创建表后再添加。
如:ALTER TABLE Persons ADD UNIQUE (Id_P)
如:ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE(Id_p,LastName)
如:ALTER TABLE Persons DROP INDEX uc_PersonID 这个是MySQL用于撤销约束
如:ALTER TABLE Persons DROP CONSTRAINT uc_PersonID 这个是SQL Server/Oracle/MS Access用于撤销约束
PRIMAR KEY:约束
PRIMAR KEY主键约束,被约束列成为主键。
主键必须包含唯一的值。
主键列不能包含NULL值。
每个表都应该有一个主键,并且每个表只能有一个主键。
注:与UNIQUE一样,在表创建好后再添加PRIMAR KEY约束。
如:ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
如:ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
UNIQUE和PRIMARY KEY以后再仔细学习吧
CHECK:约束
CHECK约束用于限制列中的值的范围。
如果对单个列定义CHECK约束,那么该列只允许特定的值。
如果对一个表定义CHECK约束,那么该约束会在特定的列中对值进行限制。
如上面两个约束一样,在创建完表后创建约束
如:ALTER TABLE Persons ADD CHECK (Id_P>0)
如:ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
如:ALTER TABLE Persons DROP CHECK chk_Person 用于MySQL撤销CHECK约束
如:ALTER TABLE Persons DROP CONSTRAINT chk_Person 用于SQL Server/Oracle/MS Access撤销约束
DEFAULT:
DEFAULT约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新纪录。
如:ALTER TABLE Persons ALTER City SET DEFAULT 'Sandnes' --MySQL
如:ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'Sandnes' --SQL Server/Oracle/MS Access
如:ALTER TABLE Persons ALTER City DROP DEFAULT --MySQL
如:ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT --SQL Server/Oracle/MS Access


数据类型
integer(size) 整数,括号内规定数字最大位数。
int(size)
smallint(size)
tinyint(size)
decimal(size,d)容纳带有小数的数字,size规定数字的最大位数。d规定小数点右侧的最大位数。
numeric(size,d)
char(size)容纳固定长度的字符串(可容纳字母、数字和特殊字符),size规定字符串长度。
varchar(size)容纳可变长度的字符串(字母、数字和特殊字符)
date(yyyymmdd)容纳日期。

CREATE INDEX语句
解:在表中创建索引,以便更加快速高效的查询数据库。
注:更新一个包含所有的表需要比更新一个没有所有的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列上面创建索引。
如:CREATE INDEX 索引名 ON 表名称 (列名称)
如:CREATE UNIQUE INDEX 索引名 ON 表名称 (列名称)
例:CREATE INDEX PersonIndex ON Person (LastName)
例:CREATE INDEX PersonIndex ON Person (LastName DESC)
例:CREATE INDEX PersonIndex ON Person (LastName, FirstName)

DROP INDEX语句
解:删除表格中的索引
如:DROP INDEX 表名称.索引名 -- MS SEL Server
如:DROP INDEX 索引名 ON 表名称 --SQLJet/Access
如:DROP INDEX 索引名 --IBM DB2/Oracle
如:ALTER TABLE 表名称 DROP INDEX 索引名

DROP TABLE语句
解:删除表(表的结构、属性和索引也会被删除)
如:DROP TABLE 表名称

DROP DATABASE语句
解:删除数据库
如:DROP DATABASE 数据库名

TRUNCATE TABLE语句
解:清除表中的数据,但不删除表
如:TRUNCATE TABLE 表名称

ALTER TABLE语句
解:在已有表中添加、修改或删除列
如:ALTER TABLE 表名称 ADD 列名称 数据类型 -- 添加列
如:ALTER TABLE 表名称 DROP COLUMN 列名称 -- 删除列
如:ALTER TABLE 表名称 ALTER COLUMN 列名称 数据类型 -- 改变列的数据类型

AUTO INCREMENT字段
解:创建该字段使得每次插入新纪录时自动创建主键字段的值。
省略

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值