SQL学习笔记----持续更新

通过该网站整理总结http://www.w3school.com.cn/sql/sql_view.asp
笔记比较适合小白,建议调整好格式打印出来练习的时候看!!!
重要事项
一定要记住,SQL 对大小写不敏感!
SQL 语句后面的分号?
如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。
SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 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 列名称 FROM 表名称
SELECT * FROM 表名称
在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 DISTINCT 用于返回唯一不同的值。SELECT DISTINCT 列名称 FROM 表名称
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
SELECT * FROM Persons WHERE (FirstName=‘Thomas’ OR FirstName=‘William’)AND LastName=‘Carter’

ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序,默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表名称 VALUES (值1, 值2,…)
指定所要插入数据的列:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)
Update 语句用于修改表中的数据: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE FROM 表名称 WHERE 列名称 = 值
TOP 子句用于规定要返回的记录的数目。对于拥有数千条记录大型表来说,TOP 子句是非常有用并非所有的数据库系统都支持 TOP 子句
SELECT TOP number|percent column_name(s)FROM table_name
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name(s)FROM table_nameWHERE column_name LIKE pattern
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。
% 替代一个或多个字符 _ 仅替代一个字符 [charlist] 字符列中的任何单一字符
[^charlist]或者 [!charlist] 不在字符列中的任何单一字符
IN 操作符允许我们在 WHERE 子句中规定多个值。SELECT column_name(s)FROM table_name WHERE column_name IN (value1,value2,…)

操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期
SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2
表的 SQL Alias 语法:SELECT column_name(s)FROM table_nameAS alias_name
列的 SQL Alias 语法:SELECT column_name AS alias_nameFROM table_name
实例:我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstNameFROM Persons AS p, Product_Orders AS po
WHERE p.LastName=‘Adams’ AND p.FirstName=‘John’
不使用别名的 SELECT 语句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_OrdersWHERE Persons.LastName=‘Adams’ AND Persons.FirstName='John‘
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据
实例:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
使用JION语句:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
不同的 SQL JOIN
除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
SELECT column_name(s) FROM table_name1 FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同
语法SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
语法 SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中,常用于创建表的备份复件或者用于对记录进行存档。
所有列插入新表:SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
只把希望的列插入新表:SELECT column_name(s) INTO new_table_name [IN externaldatabase]
FROM old_tablename
例子:创建被连接的新表
SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup FROM Persons
INNER JOIN Orders ON Persons.Id_P=Orders.Id_P
SQL CREATE DATABASE 语法:CREATE DATABASE database_name
CREATE TABLE 语句用于创建数据库中的表
CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,…)
仅容纳整数。在括号内规定数字的最大位数: integer(size) int(size) smallint(size) tinyint(size)
容纳带有小数的数字"size" 规定数字的最大位数。“d” 规定小数点右侧的最大位数。decimal(size,d) numeric(size,d)
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)在括号中规定字符串的长度。char(size)
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)在括号中规定字符串的最大长度。varchar(size)
容纳日期 date(yyyymmdd)
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)
NOT NULL 约束强制列不接受 NULL 值NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录
UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
MySQL::CREATE TABLE Persons (Id_P int NOT NULL, astName varchar(255) NOT NULL, irstName varchar(255),
Address varchar(255), ity varchar(255), NIQUE (Id_P))
SQL Server / Oracle / MS Access:CEATE TABLE Persons(Id_P int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, irstName varchar(255), Adress varchar(255), City varchar(255))
为多个列定义 UNIQUE 约束: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL,
FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName))
当表已被创建时,如需在 “Id_P” 列创建 UNIQUE 约束: ALTER TABLE Persons ADD UNIQUE (Id_P)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束: ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤销 UNIQUE 约束:
MySQL: ALTER TABLE Persons DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access: ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键
MySQL: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),
Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
SQL Server / Oracle / MS Access: CREATE TABLE Persons (Id_P int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255),City varchar(255) )
需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束
MySQL / SQL Server / Oracle / MS Access: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) )
在表已存在的情况下为 “Id_P” 列创建 PRIMARY KEY 约束,请使用下面的 SQL:ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束: ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
撤销 PRIMARY KEY 约束:
MySQL:ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access: ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
MySQL:CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
SQL Server / Oracle / MS Access: CREATE TABLE Orders( Id_O int NOT NULL PRIMARY KEY, OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )
命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
CREATE TABLE Orders( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
如需撤销 FOREIGN KEY 约束
MySQL: ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access: ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
**CHECK 约束用于限制列中的值的范围。**如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
My SQL: CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),
Address varchar(255), City varchar(255), CHECK (Id_P>0) )
SQL Server / Oracle / MS Access: CREATE TABLE Persons ( Id_P int NOT NULL CHECK (Id_P>0), LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
命名 CHECK 约束,以及为多个列定义 CHECK 约束
CREATE TABLE Persons( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT chk_Person CHECK (Id_P>0 AND City=‘Sandnes’))
在表已存在的情况下为 “Id_P” 列创建 CHECK 约束ALTER TABLE Persons ADD CHECK (Id_P>0)
需要命名 CHECK 约束,以及为多个列定义 CHECK 约束ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City=‘Sandnes’)
撤销 CHECK 约束: ALTER TABLE Persons DROP CONSTRAINT chk_Person
MySQL: ALTER TABLE Persons DROP CHECK chk_Person
DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),
Address varchar(255), City varchar(255) DEFAULT ‘Sandnes’ )
在表已存在的情况下为 “City” 列创建 DEFAULT 约束
MySQL: ALTER TABLE Persons ALTER City SET DEFAULT ‘SANDNES’
SQL Server / Oracle / MS Access: ALTER TABLE Persons ALTER COLUMN City SET DEFAULT ‘SANDNES’
撤销 DEFAULT 约束
MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access: ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT
更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
语法:CREATE INDEX index_name ON table_name (column_name)
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
SQL CREATE UNIQUE INDEX 语法:CREATE UNIQUE INDEX index_name ON table_name (column_name)
可以使用 DROP INDEX 命令删除表格中的索引:ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句用于删除表:DROP TABLE 表名称
DROP DATABASE 语句用于删除数据库:DROP DATABASE 数据库名称
TRUNCATE TABLE 命令(仅仅删除表格中的数据):TRUNCATE TABLE 表名称
ALTER TABLE 语句用于在已有的表中添加、修改或删除列
如需在表中添加列,请使用下列语法: ALTER TABLE table_name ADD column_name datatype
要删除表中的列,请使用下列语法:ALTER TABLE table_name DROP COLUMN column_name
某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。要改变表中列的数据类型,请使用下列语法:ALTER TABLE table_name ALTER COLUMN column_name datatype
改变数据类型实例:ALTER TABLE Persons ALTER COLUMN Birthday year
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
例:CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL,
FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) )
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1,要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:ALTER TABLE Persons AUTO_INCREMENT=100
MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务:
CREATE TABLE Persons ( P_Id int PRIMARY KEY IDENTITY, LastName varchar(255) NOT NULL, FirstName varchar(255),
Address varchar(255), City varchar(255) )
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
SQL CREATE VIEW 语法:CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值