一.SQL语句语法

ALTER TABLE

  ALTER TABLE 用来更新已存在表的结构。

  1. ALTER TABLE tablename
  2. (ADD|DROP column datatype [NULL|NOT NULL] [CONSTRAINTS],
  3. ...
  4. );

COMMIT

  COMMIT 用来将事物写入数据库。

  1. COMMIT [TRANSACTION];

CREATE INDEX

  CREATE INDEX 用于在一个或多个列上创建索引。

  1. CREATE INDEX indexname
  2. ON tableanme (column,...);

CREATE PROCEDURE

  CREATE PROCEDURE 用于创建存储过程。

  1. CREATE PROCEDURE
  2. AS
  3. SQL statement;

CREATE TABLE

  CREATE TABLE 用于创建新数据库表。更新已经存在的表的结构,使用ALTER TABLE。

  1. CREATE TABLE tablename
  2. (
  3. column datatype [NULL|NOT NULL] [CONSTRAINS],
  4. column datatype [NULL|NOT NULL] [CONSTRAINS],
  5.  
  6. ...
  7. );

CREATE VIEW

  CREATTE VIEW 用于创建一个或多个表上的新视图。

  1. CREATE VIEW viewname AS
  2. SELECT columns, ...
  3. FROM tables, ...
  4. [WHERE ...]
  5. [GROUP BY ...]
  6. [HAVING ...];

DELETE

  DELETE 从表中删除一行多多行。

  1. DELETE FROM tablename
  2. [WHERE ...];

DROP

  DROP 永久删除数据库对象(表,视图,索引等)。

  1. DROP INDEX|PROCEDURE|TABLE|VIEW
  2. indexname|procedurename|tablename|viewname;

INSERT

  INSERT 为表添加一行。

  1. INSERT INTO tablename[(columns, ...)]
  2. VALUES (values, ...);

INSERT SELECT

  INSERT SELECTT 将SELECT结果插入到一个表。

  1. INSERT INTO tablename [(columns, ...)]
  2. SELECT columns, ... FROM tablename, ...
  3. [WHERE ...];

ROLLBACK

  ROLLBACK 用于撤销一个事物块。

  1. ROLLBACK [TO savepointname];

SELECT

  SELECT 用于从一个或多个表(视图)中检索数据。

  1. SELECT columnname, ...
  2. FROM tablename, ...
  3. [WHERE ...]
  4. [UNION ...]
  5. [GROUP BY ...]
  6. [HAVING ...]
  7. [ORDER BY ...];

UPDATE

  UPDATE 更新表中的一行或多行。

  1. UPDATE tablename
  2. SET columnname = value, ...
  3. [WHERE ...];

二.SQL常用语句

检索数据

  SELECT语句后面跟要检索的列,FROM后跟要检索的表,WHERE用于过滤需要的条件。ORDER BY用于排序(DESC用于降序,ASC用于升序)。SELECT *表示检索所有的列。

  1. SELECT colunmname_1, columnname_2, clunmname_3, ...
  2. FROM tablename
  3. [WHERE ...]
  4. [ORDER BY ... ASC|DESC];

过滤数据

  WHERE用于过滤数据,后面可跟字句操作符,后跟 NOT 用于否定,后跟AND、OR和IN(完成与OR相同的功能)用于过滤多个条件,后跟LIKE用于通配符过滤(%表示任意字符出现任意次数,_表示匹配单个字符,[]用来指定一个字符集)。例如:

  1. SELECT prod_id, prod_name, prod_price
  2. FROM Products
  3. WHERE NOT prod_price BETWEN 3.44 AND 5.88 AND prod_name LIKE '[JM]%';

  下表为WHERE字句操作符:

  

拼接字段

  MySQL数据库中用Concat来进行拼接字段。AS来取一个别名。RTRIM()来去掉字符串右边的空格,LTRIM()来去掉字符串左边的空格,TRIM()来去掉字符串左右两边的空格。例如:

  1. SELECT Concat( vend_name, '(' ,RTRIM(vend_country), ')' )
  2. AS vend_title
  3. FROM Vendors
  4. ORDER BY vend_name;

数据函数

  常用数据的处理、汇总函数如下:

  例如:

  1. SELECT COUNT(*) AS num_cust
  2. FROM Customers;

子查询

  子查询,即嵌套在其他查询中的查询。例如:

  1. SELECT cust_name,cust_state,
  2. (SELECT COUNT(*)
  3. FROM Orders
  4. WHERE Orders.cust_id=Customer.cust_id) AS orders
  5. FROM Customers
  6. ORDER BY cust_name;

  

联结表

  SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好的理解联结及其语法是学习SQL的极为重要的部分。创建联结表非常简单,指定要联结的所有表及关联它们的方式即可。例如:

  1. SELECT vend_name,prod_name,prod_price
  2. FROM Vendors, Products
  3. WHERE Vendors.vend_id=Products.vend_id;

  以上使用的联结称为内联结,也称为等值联结,它基于两个表之间的相等测试。下面的SELECT语句返回与前面例子完全相同的数据:

  1. SELECT vend_name,prod_name,prod_price
  2. FROM Vendor INNER JOIN Products
  3. ON Vendor.vend_id=Products.vend_id;

组合查询

  可用UNION操作符来组合多条SQL语句,在各条语句之间放上关键字UNION。UNION从查询结果集中自动去除重复的行,如果显示所有可用UNION  ALL表示返回所有的匹配行。例如:

  1. SELECT cust_name, cust_contact,cust_email
  2. FROM Customers
  3. WHERE cust_state IN('IL', 'IN' ,'MI')
  4. UNION
  5. SELECT cust_name, cust_contact,cust_email
  6. FROM Customers
  7. WHERE cust_name ='JACK';

插入数据

  可用INSERT操作符对标进行插入操作,后面的INTO是可选的(建议加上)。例如:

  1. INSERT INTO Studentsidname,age,tel
  2. VALUES(
  3. '',
  4. 'JACK' ,
  5. '' ,
  6. '';
  7. )

  

三.主键与外键

  主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永远不改动。换句话说,表中的一列或多个列的唯一标识表中的每一行。这方便了直接或交互处理表中的行。没有主键,要安全的进行UPDATE和DELETE特定行而不影响其他行会非常困难。一种定义主键的方法是创建它,例如下面声明vend_id为主键:

  1. CREATE TABLE Vendors
  2. (
  3. vend_id CHAR(10) NOT NULL PRIMARY KEY,
  4. vend_name CHAR(50) NOT NULL,
  5. vend_addr CHAR(50) NULL
  6. );

  外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的及其重要的部分。例如:

  1. CREATE TABLE Orders
  2. (
  3. order_num INTEGER NOT NULL PRIMARY KEY,
  4. order_data DATATIME NOT NULL,
  5. cust_id CHAR(10) NOT NULL REFERENCES Customers(cust_id)
  6. );

  上面语句定义使用了REFERENCES关键字,它表示cust_id中的任何都必须是Customers表的cust_id中的值。

  相同的工作也可以在ALTER  TABLE语句中用CONSTRAINT语法来完成:

  1. ALTER TABLE Orders
  2. ADD CONSTRAINT
  3. FROEIGN KEY (cust_id) REFERENCES Customers (cust_id)

四.数据类型

                                  表4.1 字符串数字类型

  

表4.2 数值数据类型

表4.3 日期和时间数据类型

表4.4 二进制数据类型

  以上是SQL相关的常用语法及语句结构,详情可查看SQL及DBMS相关文档。

参考文献

《SQL必知必会》,Ben Forta ,人民邮电出版社。

SQL语法语句总结(《SQL必知必会》读书笔记)的更多相关文章

  1. 0005 《SQL必知必会》笔记01-SELECT语句

    1.SELECT基本语句: SELECT 字段名1,···,字段名n FROM 表名 2.检索所有字段,用"*"替换字段名,这会导致效率低下 SELECT * FROM 表名; 3 ...

  2. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  3. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  4. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  5. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  6. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. SQL 必知必会 总结(一)

    SQL必知必会 总结(一) 第 1 课 了解SQL 1.数据库(database): 保存有组织的数据容器(通常是一个文件或一组文件). 2.数据库管理系统(DBMS): 数据库软件,数据库是通过 D ...

  9. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

随机推荐

  1. Solutions for common Android development problems with the Eclipse IDE- Tutorial

    Table of Contents 1. Solving typical Android development problems 1.1. Clean Project 1.2. android.co ...

  2. nginx详解之语法规则

    1.location [=|~|~*|^~] /uri/ { … } location  = / {   # 精确匹配 / ,主机名后面不能带任何字符串   [ configuration A ]  ...

  3. formset批量处理form表单数据

    Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据 class StudentStudyRecordModel( ...

  4. mysql 数据操作 单表查询 查询排序: order by

    如果不指定排序 默认是按照id字段 从小到大排序的  升序 mysql> select * from employee; +----+------------+--------+-----+-- ...

  5. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  6. 一个兼职DBA的数据库运维经验 小米科技 xx@xiaomi.com 2011

    一个兼职DBA的数据库运维经验 小米科技  xx@xiaomi.com 2011 内存扩容 16G->64G ,调大bp后,凌晨说监控物理内存有余量情况下,开吃swap,内存泄露措施1  定时 ...

  7. 深入理解Nginx

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  8. http之请求报文request

    https://blog.csdn.net/blueheart20/article/details/45174399 户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request ...

  9. KVM入门

    KVM KVM(Kernel-based Virtual Machine)是众多虚拟化技术之一,它是Linux内核中的一个模块,该模块依赖于CPU,如果CPU支持虚拟化,那么该模块才可以被加载.KVM ...

  10. 在Qt中如何编写插件,加载插件和卸载插件(转)

    Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库.由于在开发项目的过程中,要开发一套插件 ...