1 SQL介绍

  SQL 是用于访问和处理数据库的标准的计算机语言。关于SQL的具体介绍,我们通过回答如下三个问题来进行。

  SQL 是什么?

  • SQL,指结构化查询语言,全称是 Structured Query Language。
  • SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。

  SQL 能做什么?

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

  虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

注释:除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的专有扩展!

  在网站上如何使用 SQL?

  要创建一个显示数据库中数据的网站,需要:

  • RDBMS 数据库程序(比如 MS Access、SQL Server、MySQL)
  • 使用服务器端脚本语言,比如 PHP 或 ASP
  • 使用 SQL 来获取您想要的数据
  • 使用 HTML / CSS

注释:RDBMS (Relational Database Management System)指关系型数据库管理系统。RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。RDBMS 中的数据存储在被称为表的数据库对象中。表是相关的数据项的集合,它由列和行组成。

2 SQL语句

  在数据库上执行的大部分工作都由 SQL 语句完成。我们先介绍几个有关SQL的注意事项,为我们接下来详细介绍每一条SQL做一个基础。

  1)SQL语句的大小写问题:
  SQL 对大小写不敏感:SELECT 与 select 是相同的。

  2)SQL 语句后面的分号问题:

  某些数据库系统要求在每条 SQL 语句的末端使用分号。

  分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。

  3)一些重要的 SQL 命令:

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

3 SQL SELECT语句

  SELECT 语句用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集。

  SQL SELECT 语法:

SELECT column_name,column_name
FROM table_name;

  与

SELECT * FROM table_name;

  本文中,我们使用众所周知的 Northwind 样本数据库进行举例介绍。下面是选自 "Customers" 表的数据:

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

  下面的 SQL 语句从 "Customers" 表中选取 "CustomerName" 和 "City" 列:

SELECT CustomerName,City FROM Customers;

  下面的 SQL 语句从 "Customers" 表中选取所有列:

SELECT * FROM Customers;

  在表中,一个列可能会包含多个重复值,有时也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。

  SQL SELECT DISTINCT 语法:

SELECT DISTINCT column_name,column_name
FROM table_name;

4 SQL WHERE语句

  WHERE 子句用于提取那些满足指定标准的记录。

  SQL WHERE语法:

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

  下面的 SQL 语句从 "Customers" 表中选取国家为 "Mexico" 的所有客户:

SELECT * FROM Customers
WHERE Country='Mexico';

  SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值字段,请不要使用引号。

SELECT * FROM Customers
WHERE CustomerID=1;

  WHERE 子句中的运算符

  下面的运算符可以在 WHERE 子句中使用:

运算符 描述
= 等于
<>

不等于。

注释:在 SQL 的一些版本中,该操作符可被写成 !=

> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

5 SQL AND与OR关键字

  AND & OR 运算符用于基于一个以上的条件对记录进行过滤。

  下面的 SQL 语句从 "Customers" 表中选取国家为 "Germany" 且城市为 "Berlin" 的所有客户:

SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';

  下面的 SQL 语句从 "Customers" 表中选取城市为 "Berlin" 或者 "München" 的所有客户:

SELECT * FROM Customers
WHERE City='Berlin'
OR City='München';

  下面的 SQL 语句从 "Customers" 表中选取国家为 "Germany" 且城市为 "Berlin" 或者 "München" 的所有客户:

SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');

6 SQL ORDER BY关键字

  ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

  ORDER BY语法:

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

  下面的 SQL 语句从 "Customers" 表中选取所有客户,并按照 "Country" 列升序排序:

SELECT * FROM Customers
ORDER BY Country;

  下面的 SQL 语句从 "Customers" 表中选取所有客户,并按照 "Country" 列降序排序:

SELECT * FROM Customers
ORDER BY Country DESC;

  下面的 SQL 语句从 "Customers" 表中选取所有客户,并按照 "Country" 和 "CustomerName" 列排序:

SELECT * FROM Customers
ORDER BY Country,CustomerName;

7 SQL INSERT INTO语句

  INSERT INTO 语句用于向表中插入新记录。

  INSERT INTO 语句可以有两种编写形式。第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

  第二种形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

  假如插入操作前的表如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland

  我们要向 "Customers" 表中插入一个新行。我们可以使用下面的 SQL 语句:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','','Norway');

  执行插入操作以后的表如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal Tom B. Erichsen Skagen 21 Stavanger 4006 Norway

注释:我们无需插入CustomerID列,它是自动更新的。

  我们也可以在指定的列插入数据。

  下面的 SQL 语句将插入一个新行,但是只在 "CustomerName"、"City" 和 "Country" 列插入数据(CustomerID 字段会自动更新):

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

  插入后的表如下所示:

CustomerID CustomerName ContactName Address City PostalCode Country
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal null null Stavanger null Norway

注释:没有复制的列被自动填充为null。

8 SQL DELETE语句

  DELETE 语句用于删除表中的行。

  SQL DELETE 语法:

DELETE FROM table_name
WHERE some_column=some_value;

请注意 SQL DELETE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

  假设我们要从 "Customers" 表中删除客户 "Alfreds Futterkiste"。我们使用下面的 SQL 语句:

DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste' AND ContactName='Maria Anders';

  您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE FROM table_name;

or

DELETE * FROM table_name;

注释:在删除记录时要格外小心!因为不能重来!

9 SQL UPDATE语句

  UPDATE 语句用于更新表中已存在的记录。

  SQL UPDATE语法:

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
请注意 SQL UPDATE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

  假设我们要把客户 "Alfreds Futterkiste" 更新为一个新的联系人和城市。

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany

  我们使用下面的 SQL 语句:

UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';

更新后结果:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Hamburg 12209 Germany

10 参考内容

  [1] W3CSCHOOL SQL教程

[SQL] SQL学习笔记之基础操作的更多相关文章

  1. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  2. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  3. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

  4. mybatis学习笔记之基础框架(2)

    mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...

  5. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  6. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  7. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  8. 笔记-flask基础操作

    笔记-flask基础操作 1.      前言 本文为flask基础学习及操作笔记,主要内容为flask基础操作及相关代码. 2.      开发环境配置 2.1.    编译环境准备 安装相关Lib ...

  9. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

随机推荐

  1. Entity Framework 6 with MySql

        MySQL Connector/Net 6.8.x MySQL Server 5.1 or above Entity Framework 6 assemblies .NET Framework ...

  2. 一次ie8模式下click无反应的小事

    想起了小学时候数不尽的一件小事,哎,那夕阳下的奔跑,是我逝去的青春啊. 言归正传,先上图: <select id="cardNoList" size="4" ...

  3. 浅谈Oracle权限体系

    对于数据库来讲,安全性的重要程度不言而喻,今天我们就来聊一聊Oracle的权限体系. 1.账户管理 在此之前,先解释下一个容易混淆的概念:模式.所谓模式,指的是用户账户所拥有的一组对象(比如表,索引, ...

  4. http status 状态码汇总

    常见HTTP状态码 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redirect 400 Bad Req ...

  5. vi快捷键

    /** * eclipse内置快捷: * * * 导入包:Ctrl+Shift+O * Ctrl+T 查看一个类的继承关系树,是自顶向下的,再多按一次Ctrl+T, 会换成自底向上的显示结构. 提示: ...

  6. jquery的curCSS方法

    核心思想是用getComputedStyle获取样式,如果没有获取到就判断是不是动态创建的元素,如果是则用style获取行内样式.看重点(注释部分)代码吧! curCSS = function( el ...

  7. 基数树与RCU锁

    基数树是一种用空间换时间的数据结构,通过空间的冗余减少时间上的消耗.radix tree很适合稀疏的结构! 自从把RCU机制引入到基树中来,这里就有了个协议叫做:lockless的page-cache ...

  8. 验证LeetCode Surrounded Regions 包围区域的DFS方法

    在LeetCode中的Surrounded Regions 包围区域这道题中,我们发现用DFS方法中的最后一个条件必须是j > 1,如下面的红色字体所示,如果写成j > 0的话无法通过OJ ...

  9. Chrome开发者工具详解

    http://www.cnblogs.com/LibraThinker/p/5948448.html http://www.cnblogs.com/LibraThinker/p/5981346.htm ...

  10. 读书笔记---PMBOK第五版官方中文版

    以下是为了准备PMP考试时学习<PMBOK第五版官方中文版>这本书的笔记和摘要,目的是为了以后可以快速的抓住本书的核心重点复习. 引论 PMPOK的目的 收录了项目管理知识体系中被普遍认可 ...