SQL语法语句总结(《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语法语句总结(《SQL必知必会》读书笔记)的更多相关文章
- 0005 《SQL必知必会》笔记01-SELECT语句
1.SELECT基本语句: SELECT 字段名1,···,字段名n FROM 表名 2.检索所有字段,用"*"替换字段名,这会导致效率低下 SELECT * FROM 表名; 3 ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会12--联结表
12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...
- 《SQL必知必会》学习笔记(一)
这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...
- SQL 必知必会
本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- SQL 必知必会 总结(一)
SQL必知必会 总结(一) 第 1 课 了解SQL 1.数据库(database): 保存有组织的数据容器(通常是一个文件或一组文件). 2.数据库管理系统(DBMS): 数据库软件,数据库是通过 D ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
随机推荐
- Spring - Bean Definition Bean定义 给容易提供元数据的3方法
Spring Bean Definition https://www.tutorialspoint.com/spring/spring_bean_definition.htm The objects ...
- 前端~HTML~CSS~JavaScript~JQuery~Vue
HTML CSS JavaScript DOM文档操作 jQuery实例 Vue
- 自动化工具构建vue项目
其实之前对vue的话也有过一段时间的学习,博客园也是写了5篇vue的学习笔记.但是一直是通过CDN的方式在html文件头部引入vue.js,然后实例化vue对象绑定Dom,写组件写方法.就算是在实际项 ...
- iptables综述
1 概述 如下图所示,iptables共有Filter,Nat,Mangle和RAW共四个table,每个table还有若干个chain,每个chain中还包含若干个rule 1.1 Filter t ...
- 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树
EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...
- Exception in thread "main" java.lang.NoClassDefFoundError: scala/Product$class
在使用spark sql时一直运行报这个错误,最后仔细排查竟然是引入了两个scala library .去除其中一个scala的编译器即可 Exception in thread "main ...
- jenkins下搭建c++持续集成环境
运行环境为centos 5.8 1.下载tomcat,并解压 2.下载jenkins,把jenkins.war放到tomcat的webapp目录下 3.在tomcat的bin目录下执行./star ...
- E题:Water Problem(快速幂模板)
题目大意:原题链接 题解链接 解题思路:令x=x-1代入原等式得到新的等式,两式相加,将sin()部分抵消掉,得到只含有f(x)的状态转移方程f(x+1)=f(x)+f(x-2)+f(x-3),然后 ...
- 2017-2018-1 JaWorld 团队作业--冲刺2
2017-2018-1 JaWorld 团队作业--冲刺2 (20162314) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...
- Makefile解析(最简单的LED)
①led_sp.bin: start.o led.o #led_sp.bin是由 start.o 和 led.o 生成 ②arm-linux-ld -Ttext 0x0 -o led_sp.elf $ ...