SQL语法语句总结
一.SQL语句语法
ALTER TABLE
ALTER TABLE 用来更新已存在表的结构。
ALTER TABLE tablename
(ADD|DROP column datatype [NULL|NOT NULL] [CONSTRAINTS],
...
);
COMMIT
COMMIT 用来将事物写入数据库。
COMMIT [TRANSACTION];
CREATE INDEX
CREATE INDEX 用于在一个或多个列上创建索引。
CREATE INDEX indexname
ON tableanme (column,...);
CREATE PROCEDURE
CREATE PROCEDURE 用于创建存储过程。
CREATE PROCEDURE
AS
SQL statement;
CREATE TABLE
CREATE TABLE 用于创建新数据库表。更新已经存在的表的结构,使用ALTER TABLE。
CREATE TABLE tablename
(
column datatype [NULL|NOT NULL] [CONSTRAINS],
column datatype [NULL|NOT NULL] [CONSTRAINS], ...
);
CREATE VIEW
CREATTE VIEW 用于创建一个或多个表上的新视图。
CREATE VIEW viewname AS
SELECT columns, ...
FROM tables, ...
[WHERE ...]
[GROUP BY ...]
[HAVING ...];
DELETE
DELETE 从表中删除一行多多行。
DELETE FROM tablename
[WHERE ...];
DROP
DROP 永久删除数据库对象(表,视图,索引等)。
DROP INDEX|PROCEDURE|TABLE|VIEW
indexname|procedurename|tablename|viewname;
INSERT
INSERT 为表添加一行。
INSERT INTO tablename[(columns, ...)]
VALUES (values, ...);
INSERT SELECT
INSERT SELECTT 将SELECT结果插入到一个表。
INSERT INTO tablename [(columns, ...)]
SELECT columns, ... FROM tablename, ...
[WHERE ...];
ROLLBACK
ROLLBACK 用于撤销一个事物块。
ROLLBACK [TO savepointname];
SELECT
SELECT 用于从一个或多个表(视图)中检索数据。
SELECT columnname, ...
FROM tablename, ...
[WHERE ...]
[UNION ...]
[GROUP BY ...]
[HAVING ...]
[ORDER BY ...];
UPDATE
UPDATE 更新表中的一行或多行。
UPDATE tablename
SET columnname = value, ...
[WHERE ...];
二.SQL常用语句
检索数据
SELECT语句后面跟要检索的列,FROM后跟要检索的表,WHERE用于过滤需要的条件。ORDER BY用于排序(DESC用于降序,ASC用于升序)。SELECT *表示检索所有的列。
SELECT colunmname_1, columnname_2, clunmname_3, ...
FROM tablename
[WHERE ...]
[ORDER BY ... ASC|DESC];
过滤数据
WHERE用于过滤数据,后面可跟字句操作符,后跟 NOT 用于否定,后跟AND、OR和IN(完成与OR相同的功能)用于过滤多个条件,后跟LIKE用于通配符过滤(%表示任意字符出现任意次数,_表示匹配单个字符,[]用来指定一个字符集)。例如:
SELECT prod_id, prod_name, prod_price
FROM Products
WHERE NOT prod_price BETWEN 3.44 AND 5.88 AND prod_name LIKE '[JM]%';
下表为WHERE字句操作符:

拼接字段
MySQL数据库中用Concat来进行拼接字段。AS来取一个别名。RTRIM()来去掉字符串右边的空格,LTRIM()来去掉字符串左边的空格,TRIM()来去掉字符串左右两边的空格。例如:
SELECT Concat( vend_name, '(' ,RTRIM(vend_country), ')' )
AS vend_title
FROM Vendors
ORDER BY vend_name;
数据函数
常用数据的处理、汇总函数如下:



例如:
SELECT COUNT(*) AS num_cust
FROM Customers;
子查询
子查询,即嵌套在其他查询中的查询。例如:
SELECT cust_name,cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id=Customer.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
联结表
SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好的理解联结及其语法是学习SQL的极为重要的部分。创建联结表非常简单,指定要联结的所有表及关联它们的方式即可。例如:
SELECT vend_name,prod_name,prod_price
FROM Vendors, Products
WHERE Vendors.vend_id=Products.vend_id;
以上使用的联结称为内联结,也称为等值联结,它基于两个表之间的相等测试。下面的SELECT语句返回与前面例子完全相同的数据:
SELECT vend_name,prod_name,prod_price
FROM Vendor INNER JOIN Products
ON Vendor.vend_id=Products.vend_id;
组合查询
可用UNION操作符来组合多条SQL语句,在各条语句之间放上关键字UNION。UNION从查询结果集中自动去除重复的行,如果显示所有可用UNION ALL表示返回所有的匹配行。例如:
SELECT cust_name, cust_contact,cust_email
FROM Customers
WHERE cust_state IN('IL', 'IN' ,'MI')
UNION
SELECT cust_name, cust_contact,cust_email
FROM Customers
WHERE cust_name ='JACK';
插入数据
可用INSERT操作符对标进行插入操作,后面的INTO是可选的(建议加上)。例如:
INSERT INTO Students(id,name,age,tel)
VALUES(
'',
'JACK' ,
'' ,
'';
)
三.主键与外键
主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永远不改动。换句话说,表中的一列或多个列的唯一标识表中的每一行。这方便了直接或交互处理表中的行。没有主键,要安全的进行UPDATE和DELETE特定行而不影响其他行会非常困难。一种定义主键的方法是创建它,例如下面声明vend_id为主键:
CREATE TABLE Vendors
(
vend_id CHAR(10) NOT NULL PRIMARY KEY,
vend_name CHAR(50) NOT NULL,
vend_addr CHAR(50) NULL
);
外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的及其重要的部分。例如:
CREATE TABLE Orders
(
order_num INTEGER NOT NULL PRIMARY KEY,
order_data DATATIME NOT NULL,
cust_id CHAR(10) NOT NULL REFERENCES Customers(cust_id)
);
上面语句定义使用了REFERENCES关键字,它表示cust_id中的任何都必须是Customers表的cust_id中的值。
相同的工作也可以在ALTER TABLE语句中用CONSTRAINT语法来完成:
ALTER TABLE Orders
ADD CONSTRAINT
FROEIGN KEY (cust_id) REFERENCES Customers (cust_id)
四.数据类型
表4.1 字符串数字类型

表4.2 数值数据类型

表4.3 日期和时间数据类型

表4.4 二进制数据类型

以上是SQL相关的常用语法及语句结构,详情可查看SQL及DBMS相关文档。
参考文献
《SQL必知必会》,Ben Forta ,人民邮电出版社。
SQL语法语句总结的更多相关文章
- [转]MySQL 最基本的SQL语法/语句
MySQL 最基本的SQL语法/语句,使用mysql的朋友可以参考下. DDL-数据定义语言(Create,Alter,Drop,DECLARE) DML-数据操纵语言(Select,Delete ...
- 最基本的SQL语法/语句
DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOK ...
- SQL语法语句总结(《SQL必知必会》读书笔记)
一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...
- MySQL 最基本的SQL语法/语句
DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOK ...
- 面试必须要知道的SQL语法,语句
面试必须要知道的SQL语法,语句 收藏 asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用.SQL分类: DDL—数据定义语言(Create,Alter,D ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
- SQL语法基础之DROP语句
SQL语法基础之DROP语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看DROP帮助信息 mysql> ? DROP Many help items for yo ...
- SQL语法基础之ALTER语句
SQL语法基础之ALTER语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看ALTER的帮助信息 mysql> ? ALTER Many help items fo ...
- SQL语法基础之INSEART语句
SQL语法基础之INSEART语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看帮助信息 1>.查看INSERT方法的帮助信息 mysql> ? INSERT ...
随机推荐
- MySQL通过localhost无法连接数据库的解决
问题:一台服务器的PHP程序通过localhost地址无法连接数据库,但是如果设置为127.0.0.1则可以正常连接,连接其他数据库服务器也正常.MySQL的权限设置正确,且通过mysql命令行客户端 ...
- Java中的换行符
Java中的换行符 PrintWriter out = response.getWriter(); out.write("\r\n"); Java中的换行符"\r\n&q ...
- Django学习-22-Form
Form是Django的功能较强的验证组件,负责各种表单验证 input中的name属性值要和form中的字段名相同 from django import forms from django.form ...
- sourcetree的使用
sourcetree的使用 仓库 使用source tree自带的clone,用source tree生成密钥对进行免登录. 分支 从master出发,新建一个分支/从远程获取一个分支.在这个分支做开 ...
- BUAA软工第0次作业
第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我在大学之前甚至连一个萌新都算不上,根本没有任何一点计算机专业的基础. 因此在进入大学之前,计算机对于我 ...
- Splay入门解析【保证让你看不懂(滑稽)】
BST真是神奇的东西... 而且种类好多呀... 我这个蒟蒻只学会了splay orzCJ老爷,各种树都会 好好好,不说了,直接说splay. 不知道splay是啥,,你也要知道平衡树是啥... 平衡 ...
- [POI2007]ATR-Tourist Attractions [TPLY]
[POI2007]ATR-Tourist Attractions 题目链接(https://www.luogu.org/problemnew/show/P3451) 这种稠密图还是建议你不要跑spfa ...
- 【Luogu1345】奶牛的电信(网络流)
[Luogu1345]奶牛的电信(网络流) 题面 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成 ...
- [BZOJ3110][ZJOI2013]K大数查询(整体二分)
BZOJ Luogu sol 整体二分,其实很简单的啦. 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 ...
- 一年java工作经验的面试题总结(持续更新中)
本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习. 第一次面试 ①说下java类的加载 ② ...