SQL语法汇总

以下默认为mySQL与SQLsever都能使用SQLsever不能使用的另外标出来了

显示数据库
SHOW DATABASES;
进入其中一个数据库
USE students;
显示进入数据库中的所有表
SHOW TABLES;
显示学生表格式信息
DESC student;
查看学生表的所有列
SELECT * FROM student;
查看学生表NAME, class两列的信息
SELECT NAME,class FROM student;
选取学生性别列(取消重复行)
SELECT DISTINCT sex FROM student;
从表中选取id = 1这一行
SELECT * FROM student WHERE id = 1;
显示NAME = dingjian 和 class = 1711的这一行
SELECT * FROM student WHERE NAME = 'dingjian' AND class = 1711;
显示id=1或class = 1702班的人
SELECT * FROM student WHERE id = 1 OR class = 1702;
按年龄逆序显示学生名字
SELECT NAME FROM student ORDER BY OLD DESC;
按性别顺序显示学生性别,并按年龄顺序显示学生性别(学生性别顺序优先级高于年龄顺序)
SELECT sex FROM student ORDER BY sex, OLD;
以名字逆序,年龄顺序显示学生的全部属性
SELECT * FROM student ORDER BY NAME DESC, OLD ASC;
向表中插入NAME = xiaozhao, id = 4, class = 1712, sex = woman,OLD = 18的记录
INSERT INTO student VALUES(4, 'xiaozhao', 1712, 'woman', 18);
向指定两列NAME, class 插入NAME = xiaomei, class = 1711;
INSERT INTO student(NAME, class) VALUES('xiaomei', 1711);
更新表student中NAME = xiaomei id = 5, sex = woman, OLD = 19;
UPDATE student SET id = 5, sex = 'woman', OLD = 19 WHERE NAME = 'xiaomei';
在student表中删除id = 5的学生
DELETE FROM student WHERE id = 5;
删除表中所有行
DELETE FROM sutdent;

DELETE * FROM student;
显示表中前3条记录
SELECT * FROM student LIMIT 3;
显示student表中以NAME中不以d开头学生的记录
SELECT * FROM student WHERE NAME NOT LIKE 'd%';
显示id = 1, id = 2, id = 4 的学生记录
SELECT * FROM student WHERE id IN(1,2,4);
显示学生不在id = 2 到 3范围学生记录
SELECT * FROM student WHERE id NOT BETWEEN 2 AND 3;
以别名的stuname形式显示NAME,以别名的genter形式显示sex;
SELECT NAME AS stuname, sex AS genter FROM student;
SELECT * FROM student;
向学生表student添加id_c列
ALTER TABLE student ADD id_c INT;
从学生表student删除id_c列
ALTER TABLE student DROP COLUMN id_c;
将student表中id_c字段属性改为VARCHAR(2)属性
ALTER TABLE student MODIFY COLUMN id_c VARCHAR(2);
将student表中字段名id_s改变为id_c
ALTER TABLE student CHANGE COLUMN id_s id_c INT;
将stu表名改为student
ALTER TABLE stu RENAME TO student;
批量操作,将表student,id_c字段下值都变为1,一般最好不要这样做
UPDATE student SET id_c = 1;
更新表student,将id = 4的记录中的id_c的值改为4
UPDATE student SET id_c = 4 WHERE id = 4;
SELECT * FROM student;
SELECT * FROM course;
利用俩个表所共有的字段id_c连接俩个表student, course中的数据
SELECT student.name, student.class, course.cname FROM student, course WHERE student.id_c = course.id_c;
当表至少存在一个匹配时INNER JOIN返回行INNER JOIN 与 JOIN相同
SELECT student.name, student.class, course.cname FROM course INNER JOIN student ON student.id_c = course.id_c ORDER BY course.cname;
LEFT JOIN 会从左表course那里返回所有的行,即使右表student中没有匹配,RIGHT JOIN 反之;
SELECT student.name, student.class, course.cname FROM course LEFT JOIN student ON student.id_c = course.id_c;
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
UNION自动去除重复行
SELECT NAME FROM student UNION SELECT cname FROM course;
UNION ALL不去除重复行
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
SELECT NAME FROM student UNION ALL SELECT cname FROM course;
DESC student;
SHOW TABLES;


CREATE DATABASE teacher;
CREATE TABLE tea(id INT, NAME VARCHAR(20), class INT, sex VARCHAR(5), OLD INT, id_c INT);
DROP TABLE tea;
DROP DATABASE teacher;

NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 语句强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:

CREATE TABLE Persons
(
Id_P INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);


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

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:

CREATE TABLE Persons
(
Id_P INT NOT NULL,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
UNIQUE (Id_P)
);


如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
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 约束,请使用下列 SQL:

ALTER TABLE Persons
ADD UNIQUE (Id_P);

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

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

如需撤销 UNIQUE 约束,请使用下面的 SQL:

ALTER TABLE Persons
DROP INDEX uc_PersonID;

下面是sqlserver用法
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID;

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

主键必须包含唯一的值。

主键列不能包含 NULL 值。

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


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)
);

以下为sqlsever用法
CREATE TABLE Persons
(
Id_P INT NOT NULL PRIMARY KEY,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);

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)
);

注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

如果在表已存在的情况下为 "Id_P" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:

ALTER TABLE Persons
ADD PRIMARY KEY (Id_P);

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

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

如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:

ALTER TABLE Persons
DROP PRIMARY KEY

以下是sqlsever用法:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID;

下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:

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)
);

下面是sqlsever用法:

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 约束,请使用下面的 SQL 语法:

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)
);

如果在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

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


如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

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

如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders;

sqlsever用法
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders;

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

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用法:

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 约束,请使用下面的 SQL 语法:

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 约束,请使用下面的 SQL:


ALTER TABLE Persons
ADD CHECK (Id_P>0);

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

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

如需撤销 CHECK 约束,请使用下面的 SQL:

ALTER TABLE Persons
DROP CHECK chk_Person;


SQL sever用法:
ALTER TABLE Persons
DROP CONSTRAINT 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'
)

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES';

SQL sever用法:

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES';

如需撤销 DEFAULT 约束,请使用下面的 SQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT

SQL sever用法:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。


注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

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

本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:

CREATE INDEX PersonIndex
ON Person (LastName);

如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:

CREATE INDEX PersonIndex
ON Person (LastName DESC);


在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name
ON table_name (column_name);

假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX PersonIndex
ON Person (LastName, FirstName);

我们可以使用 DROP INDEX 命令删除表格中的索引。

ALTER TABLE table_name DROP INDEX index_name

(SQL sever用法)
DROP INDEX table_name.index_name;

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):

DROP TABLE 表名称

DROP DATABASE 语句用于删除数据库:

DROP DATABASE 数据库名称

如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?

请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):

TRUNCATE TABLE 表名称

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 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)
);

MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。

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

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

ALTER TABLE Persons AUTO_INCREMENT=100;
要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):


SQL sever使用 IDENTITY 关键字来执行 auto-increment 任务。

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

要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)

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 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注释:数据库的设计和结构不会受到视图中的函数、WHERE 或 JOIN 语句的影响。

SQL CREATE VIEW 语法


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

注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、JOIN 等等,我们可以向用户精确地提交我们希望提交的数据。

样本数据库 Northwind 拥有一些被默认安装的视图。视图 "Current Product List" 会从 Products 表列出所有正在使用的产品。这个视图使用下列 SQL 创建:

CREATE VIEW [Current Product LIST] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=NO;

我们可以查询上面这个视图:

SELECT * FROM [Current Product LIST]

Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:


CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products);

我们可以像这样查询上面这个视图:

SELECT * FROM [Products Above Average Price];

另一个来自 Northwind 数据库的视图实例会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:

CREATE VIEW [Category Sales FOR 1997] AS
SELECT DISTINCT CategoryName,SUM(ProductSales) AS CategorySales
FROM [Product Sales FOR 1997]
GROUP BY CategoryName;

我们可以像这样查询上面这个视图:

SELECT * FROM [Category Sales FOR 1997];

我们也可以向查询添加条件。现在,我们仅仅需要查看 "Beverages" 类的全部销量:

SELECT * FROM [Category Sales FOR 1997]
WHERE CategoryName='Beverages';

SQL 更新视图
您可以使用下面的语法来更新视图:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE CONDITION


现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:
CREATE VIEW [Current Product LIST] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=NO;

SQL 撤销视图
您可以通过 DROP VIEW 命令来删除视图。
DROP VIEW view_name;

猜你喜欢

转载自www.cnblogs.com/AGoodDay/p/10659870.html