SQL笔记

更多详细SQL:https://www.runoob.com/sql/sql-tutorial.html

1. SELECT:从数据库中选取数据

SELECT column_name,column_name
FROM table_name;
SELECT * FROM table_name;

2. SELECT DISTINCT:返回唯一不同的值

SELECT DISTINCT column_name,column_name
FROM table_name;

3. WHERE:过滤记录

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
operator描述
=等于
<>不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值

4. AND & OR:一个以上的条件对记录进行过滤

5. ORDER BY:对结果集进行排序

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

ASC为升序;DESC为降序

6. INSERT INTO:向表中插入新记录

INSERT INTO table_name
VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

7. UPDATE:更新表中的记录

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

8. DELETE:删除表中的记录

DELETE FROM table_name
WHERE some_column=some_value;

删除表中的所有记录:

DELETE FROM table_name;DELETE * FROM table_name;

9. SELECT TOP, LIMIT, ROWNUM:规定要返回的记录的数目

SQL Server / MS Access 语法:

SELECT TOP number|percent column_name(s)
FROM table_name;

MySQL 语法:

SELECT column_name(s)
FROM table_name
LIMIT number;

Oracle 语法:

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

10. LIKE:在 WHERE 子句中搜索列中的指定模式

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
pattern中的通配符描述
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或[!charlist]不在字符列中的任何单一字符

MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式

11. IN:在 WHERE 子句中规定多个值

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

12. BETWEEN:选取介于两个值之间的数据范围内的值

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

13. 别名:为表名称或列名称指定别名

列的 SQL 别名语法:

SELECT column_name AS alias_name
FROM table_name;

表的 SQL 别名语法:

SELECT column_name(s)
FROM table_name AS alias_name;

14. INNER JOIN:在表中存在至少一个匹配时返回行

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

15. LEFT JOIN:从table1所有的行,即使table2没有匹配

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

16. RIGHT JOIN:从table2返回所有的行,即使table1中没有匹配

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

17. FULL OUTER JOIN:只要table1和table2其中一个表中存在匹配,则返回行

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

MySQL中不支持 FULL OUTER JOIN

18. UNION:合并两个或多个 SELECT 语句的结果

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

19. SELECT INTO:一个表复制信息到另一个表

MySQL 数据库不支持 SELECT … INTO 语句,但支持 INSERT INTO … SELECT

SELECT *
INTO newtable [IN externaldb]
FROM table1;
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
CREATE TABLE 新表
AS
SELECT * FROM 旧表 

20. INSERT INTO SELECT:从一个表复制信息到另一个表

INSERT INTO table2
SELECT * FROM table1;
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

21. CREATE DATABASE:创建数据库

CREATE DATABASE dbname;

22. CREATE TABLE:创建数据库中的表

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。

size 参数规定表中列的最大长度。

23. NOT NULL 约束:强制列不接受 NULL 值

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);
ALTER TABLE Persons
MODIFY Age int NOT NULL;

删除 NOT NULL 约束:

ALTER TABLE Persons
MODIFY Age int NULL;

24. UNIQUE 约束:唯一标识数据库表中的每条记录

24.1. CREATE TABLE 时的 SQL UNIQUE 约束(新建表)

MySQL:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
);

24.2. ALTER TABLE 时的 SQL UNIQUE 约束(已有表)

ALTER TABLE Persons
ADD UNIQUE (P_Id);

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName);

24.3. 撤销 UNIQUE 约束

MySQL:

ALTER TABLE Persons
DROP INDEX uc_PersonID;

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID;

25. PRIMARY KEY 约束:唯一标识数据库表中的每条记录

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

25.1. CREATE TABLE 时的 SQL PRIMARY KEY 约束(新建表)

MySQL:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
);

注释:在上面的实例中,只有一个主键 PRIMARY KEY(pk_PersonID)。然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。

25.2. ALTER TABLE 时的 SQL PRIMARY KEY 约束(已有表)

ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);

如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName);

25.3. 撤销 PRIMARY KEY 约束

MySQL:

ALTER TABLE Persons
DROP PRIMARY KEY;

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID;

26. FOREIGN KEY 约束:一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)

26.1. CREATE TABLE 时的 SQL FOREIGN KEY 约束(新建表)

MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
);

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
);

26.2. ALTER TABLE 时的 SQL FOREIGN KEY 约束(已有表)

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id);

26.3. 撤销 FOREIGN KEY 约束

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

27. CHECK 约束:限制列中的值的范围

27.1. CREATE TABLE 时的 SQL CHECK 约束

MySQL:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)

27.2. ALTER TABLE 时的 SQL CHECK 约束

ALTER TABLE Persons
ADD CHECK (P_Id>0)

如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes');

27.3. 撤销 CHECK 约束

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

MySQL:

ALTER TABLE Persons
DROP CHECK chk_Person;

28. DEFAULT 约束:向列中插入默认值

28.1. CREATE TABLE 时的 SQL DEFAULT 约束

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
)

CREATE TABLE Orders
(
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    OrderDate date DEFAULT GETDATE()
)

28.2. ALTER TABLE 时的 SQL DEFAULT 约束

MySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

SQL Server / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City

Oracle:

ALTER TABLE Persons
MODIFY City DEFAULT 'SANDNES'

28.3. 撤销 DEFAULT 约束

MySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

29. CREATE INDEX:在表中创建索引

SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name
ON table_name (column_name)

在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

30. DROP INDEX:撤销索引

MS Access

DROP INDEX index_name ON table_name

MS SQL Server

DROP INDEX table_name.index_name

DB2/Oracle

DROP INDEX index_name

MySQL

ALTER TABLE table_name DROP INDEX index_name

31. DROP TABLE:删除表

DROP TABLE table_name

32. DROP DATABASE:删除数据库

DROP DATABASE database_name

33. TRUNCATE TABLE:删除表内的数据,但并不删除表本身

TRUNCATE TABLE table_name

34. 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;

35. AUTO INCREMENT:在新记录插入表中时生成一个唯一的数字

MySQL:

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)

默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。

要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法:

ALTER TABLE Persons AUTO_INCREMENT=100

SQL Server:

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

要规定 “ID” 列以 10 起始且递增 5,请把 identity 改为 IDENTITY(10,5)

Access:

CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

要规定 “ID” 列以 10 起始且递增 5,请把 autoincrement 改为 AUTOINCREMENT(10,5)

Oracle:

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

上面的代码创建一个名为 seq_person 的 sequence 对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。cache 选项规定了为了提高访问速度要存储多少个序列值。

要在 “Persons” 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

上面的 SQL 语句会在 “Persons” 表中插入一条新记录。“ID” 列会被赋值为来自 seq_person 序列的下一个数字。"FirstName"列 会被设置为 “Lars”,“LastName” 列会被设置为 “Monsen”。

36. CREATE VIEW:创建视图

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

37. CREATE OR REPLACE VIEW:更新视图

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

38. DROP VIEW:撤销视图

DROP VIEW view_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值