SQL 语法大全
2017-09-27 16:47
211 查看
SQL语法
例表:“Persons”表
一:基础篇
"Persons" 表:
"Orders" 表:
二:高级教程
例表:“Persons”表
LastName | FirstName | Address | City | Year |
Adams | John | Oxford Street | London | 1970 |
Bush | George | Fifth Avenue | New York | 1995 |
Carter | Thomas | Changan Street | Beijing | 1980 |
Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
一:基础篇
关键字 | 描述 | 例子 |
SELECT | SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。 | 1.SELECT 列名 FROM 表名 2.SELECT * FROM 表名 |
DISTINCT | DISTINCT 用于返回唯一不同的值。 | 1.SELECT DISTINCT 列名 FROM 表名 |
WHERE | 如需有条件地从表中选取数据 | 1.SELECT 列名 FROM 表名 WHERE 列 运算符 2.查询 住在Beijing的人 SELECT * FROM Persons WHERE City=’ Beijing’ |
AND和OR | 用在AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 AND:都为真才为真 OR:其中一个为真才为真 | 1.查询 1985年住在Beijing的人 SELECT * FROM Persons WHERE City=’ Beijing’ AND Year = 1985 2.查询住在London或者New York的人 SELECT * FROM Persons WHERE City=’ London’ OR City = ‘New York’ |
ORDER BY | ORDER BY 语句用于根据指定的列对结果集进行排序。 | 1.以姓的字母顺序进行排列 SELECT*FROM Persons ORDER BY LastName 2.以Year 从大到小排序 SELECT*FROM Persons ORDER BY Year DESC 3.以Year 从小到大排序 SELECT*FROM Persons ORDER BY Year |
INSERT INTO | INSERT INTO 语句用于向表格中插入新的行。 | 1.将2017年有个姓Yuan 名Hong的住在ChongQing JieFangBei 记录在数据库 INSERT INTO Persons VALUES(‘Yuan’,’ Hong’,’ JieFangBei’,’ ChongQing’,2017) |
Update | Update 语句用于修改表中的数据。 | 1.2017年YuanHong搬家到GuanYinQiao 修改数据 Update Persons SET Adderss=’ GuanYinQiao’ WHERE LastName=’ Yuan’ AND FirstName=’ Hong’ |
DELETE | DELETE 语句用于删除表中的行 | 1.将YuanHong对应的数据删除掉。 DELETE FROM Persons WHERE |
Id_P | LastName | FirstName | Address | City |
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
"Orders" 表:
Id_O | OrderNo | Id_P |
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
二:高级教程
TOP | TOP 子句用于规定要返回的记录的数目。 | 1.我们希望从表中取前两条数据。 SELECT TOP(2) * FROM Persons 我们希望从表中取百分之五十的记录 SELECT TOP 50 PERCENT * FROM Persons |
LIKE | LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 | 1.我们希望查找姓的首字母为Y的人 SELECT * FROM Persons WHERE LastName LIKE ‘Y%’ 2.我们希望查找姓的尾字母为N的人 SELECT * FROM Persons WHERE LastName LIKE ‘%N’ 3.我们希望查找姓中含有A的人 SELECT * FROM Persons WHERE LastName LIKE ‘%A%’ |
通配符 | 1.%: 替代一个或多个字符 2_:仅替代一个字符3[charlist]:字符列中的任何单一字符 4[!charlist]:不在字符列中的任何单一字符 | 1.我们希望查找姓的首字母为Y的人 SELECT * FROM Persons WHERE LastName LIKE ‘Y%’ 2.我们希望查找姓的尾字母为N的人 SELECT * FROM Persons WHERE LastName LIKE ‘%N’ 3.我们希望查找姓中含有A的人 SELECT * FROM Persons WHERE LastName LIKE ‘%A%’ 4.我们希望选取一个人的姓的第一个字符之后是UAN的人 SELECT * FROM Persons WHERE LastName LIKE ‘_UAN’ 5.我们希望选取居住城市 以‘A’或‘C’开头的人 SELECT * FROM Persons WHERE City LIKE ‘[AC]%’ 6.我们希望选取居住城市 不以‘A’或‘C’开头的人 SELECT * FROM Persons WHERE City LIKE ‘[!AC]%’ |
IN | IN 操作符允许我们在 WHERE 子句中规定多个值。 | 1.我们希望选取姓氏为Adams 和 Carter 的人 SELECT * FROM Persons WHERE LastName IN(‘Adams’,’ Carter’) |
BETWEEN | 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 | 1.选取以字母顺序介于"Adams"(包括)和 "Carter"(不包括)之间的人 SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’ |
Alias | Alias 可以为列名称或者表名称指定别名 | 1.我们的表名是 Persons 我们可以把它取个别名(联表查询的时候常用) SELECT*FROM Persons AS P WHERE P.LastName BETWEEN ‘Adams’ AND ‘Carter’ |
INNER join | 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join.通过join多张表的数据 | 1.现在有两张表 Persons和Orders它们之间通过UserID进行关联的 我们要将两张表一起取出来 SELECT * FROM PersonsAS A INNER JOIN Persons AS B ON A.ID_P =B. ID_P ORDER BY A. LastName |
LEFT JOIN | LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 | 1.现在有两张表 Persons和Orders它们之间通过UserID进行关联的 我们要将两张表一起取出来 SELECT * FROM Persons AS A LEFT JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
RIGHT JOIN | RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。 | 1.现在有两张表 Persons和Orders它们之间通过UserID进行关联的 我们要将两张表一起取出来 SELECT * FROM Persons AS A RIGHT JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
FULL JOIN | 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。 | 1.现在有两张表 Persons 和Orders它们之间通过UserID进行关联的 我们要将两张表一起取出来 SELECT * FROM Persons AS A FULL JOIN OrdersAS B ON A. ID_P =B. ID_P ORDER BY A. LastName |
UNION | UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 | 1.现在我们数据库有两张表class1和class2分别是某年级的两个班的学生信息,假设该年级一共就这两个班,我们要获取该年级所有人的信息 SELECT Student FROM CLASS1 UNION SELECT Student FROM CLASS2 |
SELECT INTO | SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。 | 1拷贝备份复件 SELECT * INTO PersonsBackup FROM Persons 2.向另一个数据库中拷贝表 SELECT * INTO Persons IN ‘Backup.mdb’ FROM Persons 3.我们希望只拷贝某些域 LastName Adams’ SELECT LastName, Adams INTO Persons INTO PersonsBackup FROM Persons 4.我们在Persons表中提取居住在北京的人的信息,并创建一个带两个列的名是PersonsBackup的表 SELECT LastName, Firstname INTO Persons INTO PersonsBackup FROM Persons WHERE City=’BeiJing’ 5.其中包含了从 Persons 和 Orders 两个表中取得的信息 SELECT A.lastName,B.OrderNo INTO PersonsBackup FROM Persons AS A INNER JOIN Orders AS B ON A.ID_P=B.ID_P |
CREATE DATABASE | CREATE DATABASE 用于创建数据库。 | Create database 数据库名 |
CREATE TABLE | CREATE TABLE 语句用于创建数据库中的表。 | 1.创建表 例表Orders Create table Orders( Id_O INT, OrderNo INT, ID_P INT) |
SQL 约束 | NOT NULL 约束强制列不接受 NULL 值。 UNIQUE约束唯一标识数据库表中的每条记录。 PRIMARY KEY RIMARY KEY 约束唯一标识数据库表中的每条记录。 FOREIGN KEY一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 CHECK约束用于限制列中的值的范围。 DEFAULTDEFAULT 约束用于向列中插入默认值。 | 1.创建表 例表Orders Id_O不能为空 Create table Orders( Id_O INT NOT NUL , OrderNo INT, ID_P INT) 2.创建表 例表Orders Id_O不能为空 标记Id_P是在本表中只能存在唯一值 Create table Orders( ID_O INT NOT NUL , OrderNo INT, Id_P INT , UNIQUE(ID_P)) 3.创建表 例表Orders Id_O不能为空 标记Id_P和 Id_O Create table Orders( Id_O INT NOT NUL , OrderNo INT, Id_P INT , CONSTRAINT uc_PERSONID UNIQUE(Id_P, Id_O)) 4.创建表 例表"Orders" 表创建时在 "Id_O" 列创建 PRIMARY KEY 约束: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT ,) 5.创建表 例表"Orders" 表创建时在 "Id_P" 列创建 FOREIGN KEY约束: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT FOREIGN KEY REFERENCES PERSONS(Id_P)) 6..创建表 例表"Orders" 表创建时在 "Id_P" 列创建CHECK约束Id_P>0: Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT , CHECK (Id_P>0) 7创建表 例表"Orders" 表创建时在 "Id_P" 列创建DEFAULT 约束插入默认值0 Create table Orders( Id_O INT NOT NUL PRIMARY KEY, OrderNo INT, Id_P INT DEFAULT 0, ) |
CREATE INDEX | CREATE INDEX您可以在表中创建索引,以便更加快速高效地查询数据。 | 1.我们希望以Id_o从大到小排列 CREATE INDEX Id_o ON Orders(OrderNo, Id_P) |
DROP | DROP可以轻松删除索引、表、数据库 | 1.删除表 DEOP TABLE 表名 2.删除数据库 DEOP DATABASE 数据库名 |
ALTER TABLE | ALTER TABLE语句用于在已有的表中添加、修改或删除列。 | 1.在表Orders中添加列Birthday ALTER TABLE Orders ADD Birthday DATE 2.删除表Orders中列Birthday ALTER TABLE Orders DEOP COLUMN Birthday 3.修改表Orders 中列Birthday的数据类型 ALTER TABLE Orders ALTER COLUMN Birthday INT |
auto-increment主键 | 我们通常希望在每次插入新记录时,自动地创建主键字段的值,我们可以在表中创建一个 auto-increment 字段。 | 1.创建一个表 Orders 使Id_P 起始值为1每增加一条: CREATE TABLE Orders { Id_O INT NOT PRIMARY KEY IDENTITY(1,1), OrderNo INT, Id_P INT, } |
VIEW | 在 SQL 中,VIEW是基于 SQL 语句的结果集的可视化的表。 | 1.创建视图: CREATE VIEW [Current Product List] AS SELECT OrderNo, Id_P FRPM WHERE Discontinued=No 2.查询视图: SELECT * FROM [Current Product List] |
2017年9月27日 IT小狼狗 |