简介
SQL数据库是什么?
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL语句结构
结构化查询语言包含6个部分:
- 数据查询语言(DQL)
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用 - 数据操作语言(DML)
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。 - 事务处理语言(TPL)
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK - 数据控制语言(DCL)
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。 - 数据定义语言(DDL)
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。 指针控制语言(CCL)
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。SQL数据类型
字符型
VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符 。VARCHAR会将字符串后面多余的空格删去。
当建立自己的站点时,不需要为剪掉你数据中多余的空格而操心。
VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。文本型
使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。//一个文本型字段中的数据通常要么为空,要么很大。
但是,无论何时,只要你能避免使用文本型字段,你就应该不使用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的磁盘空间。
一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。- 数值型(整数INT、小数NUMERIC、钱数MONEY)
MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。
SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。 - 逻辑型
如果你使用复选框(CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。
注意:在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。日期型(DATETIME 和 SMALLDATETIME)
一个 DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。
DATETIME型数据小,而且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。
(DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。)
SQL简介
SQL 是用于访问和处理数据库的标准的计算机语言。
SQL 是什么?
- SQL,指结构化查询语言,全称是 Structured Query Language。
- SQL 让您可以访问和处理数据库。
- SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。
在您的网站中使用 SQL
要创建一个显示数据库中数据的网站,您需要:
- RDBMS 数据库程序(比如 MS Access、SQL - Server、MySQL)
- 使用服务器端脚本语言,比如 PHP 或 ASP
- 使用 SQL 来获取您想要的数据
- 使用 HTML / CSS
RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL语句后面的分号
某些数据库系统要求在每条SQL语句的末端使用分号。
分号是在数据库系统中分隔语句的标准方法,这样可以在对服务器的相同请求中执行一条以上的SQL语句。
一些重要的SQL命令
- SELECT - 从数据库中提取数据
- UPDATE - 更新数据库中的数据
- DELETE - 从数据库中删除数据
- INSERT INTO - 向数据库中插入新数据
- CREATE DATABASE - 创建新数据库
- * ALTER DATABASE* - 修改数据库
- CRATE TABLE - 创建新表
- ALTER TABLR - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SQL SELECT语句
SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集
语法
SELECT column_name,column_name
FROM table_name;
与
SELECT * FROM table_name;
SQL SELECT DISTINCT 语句
SELECT DISTINCT用于返回唯一不同的值。
语法
SELECT DISTINCT column_name,column_name
FROM table_name;
SQL Where 子句
WHERE 子句用于过滤记录,提取那些满足指定标准的记录。
语法
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
或
SELECT * FROM table_name
WHERE value;
ps: SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
如果是数值字段,不要使用引号。
SELECT * FROM Customers
WHERE CustomerID=1;
SELECT * FROM Customers
WHERE Country='Mexico';
WHERE子句中的运算符
下面的运算符可以在WHERE子句中使用:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于(在SQL的一些版本中,也可写!=) |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种格式 |
IN | 指定针对某个列的多个可能值 |
SQL AND $ OR 运算符
如果第一个条件和第二个条件都成立,则AND运算符显示一条记录。
如果第一个条件和第二个条件只有一个 ,则OR运算符显示一条记录。
AND运算符实例
下面的 SQL 语句从 “Customers” 表中选取国家为 “Germany” 且城市为 “Berlin” 的所有客户:
SELECT * FROM Customers
WHERE Country = 'Germany'
AND City = 'Berlin';
OR运算符实例
下面的 SQL 语句从 “Customers” 表中选取城市为 “Berlin” 或者 “München” 的所有客户:
SELECT * FROM Customers
WHERE City = 'Berlin'
OR city = 'München';
结合AND & OR
下面的 SQL 语句从 “Customers” 表中选取国家为 “Germany” 且城市为 “Berlin” 或者 “München” 的所有客户:
SELECT * FROM Customers
WHERE Country = 'Germany'
AND (City = 'Berlin' OR City = 'München');
SQL ORDER BY关键字
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
语法
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC
实例
从 “Customers” 表中选取所有客户,并按照 “Country” 列排序:
SELECT * FROM Customers
ORDER BY Country;
实例(DESC)
SELECT * FROM Customers
ORDER BY Country DESC;
实例(ORDER BY Several Columns )
SELECT * FROM Customers
ORDER BY Country,CustomerName;
SQL INSERT INTO语句
用于向表中插入新纪录
语法
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name(column1,column2,column3,...)
VALUES (value1,value2,value3,...)
SQL UPDATE语句
UPDATE语句用于更新表中的记录。
语法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
SQL DELETE 语句
删除表中的行。
语法
DELETE FROM table_name
WHERE some_column=some_value;
SQL LIKE 操作符
用于在WHERE子句中搜索列中的指定模式。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
实例
选取 City 以字母 “s” 开始的所有客户
SELECT * FROM Customers
WHERE City LIKE 's%';
PS:”%” 符号用于在模式的前后定义通配符(缺省字母)。
选取 City 以字母 “s” 结尾的所有客户
SELECT * FROM Customers
WHERE City LIKE '%s';
通过NOT关键字,你可以选取不匹配模式的记录。
选取 Country 不包含模式 “land” 的所有客户
SELECT * FROM Customers
WHERE Country NOT LIKE '%land%';
SQL 通配符
可代替字符串中的任何其他字符。
在SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据
通配符
通配符 | 描述 |
---|---|
% | 代替0个或者多个字符 |
_ | 代替一个字符 |
[charlist] | 字符列中的任意单一字符 |
[^charlist] or [!charlist] | 不在字符列中的任何单一字符 |
SQL通配符
选取 取 City 以字母 “ber” 开始的所有客户
SELECT * FROM Customers
WHERE City LIKE 'ber%';
选取 City 包含模式 “es” 的所有客户
SELECT * FROM Customers
WHERE City LIKE '%es%';
用 SQL [charlist] 通配符
选取 City 以 “b”、”s” 或 “p” 开始的所有客户
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
选取 City 以 “a”、”b” 或 “c” 开始的所有客户
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
SQL 语句选取 City 不以 “b”、”s” 或 “p” 开始的所有客户
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
SQL _ 通配符
选取 City 以一个任意字符开始,然后是 “erlin” 的所有客户
SELECT * FROM Customers
WHERE City LIKE '_erlin';
下面的 SQL 语句选取 City 以 “L” 开始,然后是一个任意字符,然后是 “n”,然后是一个任意字符,然后是 “on” 的所有客户
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';