SQL
SQL简介
SQL(Structured Query Language:结构化查询语言)是用于管理关系数据库管理系统。SQL的范围包括数据插入、查询、更新、和删除。数据库模式创建和修改,以及数据访问控制。
SQL能做什么?
- 面向数据库执行查询
- 可从数据库取回数据
- 可在数据库中插入新的记录
- 可更新数据库中的数据
- 可从数据库中删除记录
- 可创建新的数据库
- 可在数据库中创建新表
- 可在数据库中创建储存过程
- 可在数据库中创建视图
- 可以设置表、储存过程和视图的权限
RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access
RDBMS 中的数据存储在被称为表的数据库对象中
表是相关的数据项的集合,它由列和行组成。
SQL语法
数据库表
一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:“Websites”),表包含带有数据的记录(行)。
一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SQL 对大小写不敏感
SQL select 语句
SELECT 语句用于从数据库中选取数据。
SQL select 语法
select column_name, column_name from table_name
例如:从“Websites” 表中选取“name”和“country”列
select name,country from Websites;
SQL select distinct 语句
SELECT DISTINCT 语句用于返回唯一不同的值。在表中,一个列可能会包含多个重复值,此语句可以列出不同(distinct)的值。
SQL SELECT DISTINCT 语法
select distinct column_name, column_name from table_name;
例如:仅从 “Websites” 表的 “country” 列中选取唯一不同的值,也就是去掉 “country” 列重复值
select distinct country from Websites;
SQL where 子句
where 子句用于过滤记录,提取那些满足指定条件的记录。
SQL语法
secect column_name, column name from table_name where column name operator value;
例如从 “Websites” 表中选取国家为 “CN” 的所有网站:
select * from Websites where country = 'CN';
文本字段 vs. 数值字段
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)
在上个实例中 ‘CN’ 文本字段使用了单引号
如果是数值字段,不要使用引号。
例如:
SELECT * FROM Websites WHERE id=1;
SQL and & or 运算符
用于基于一个以上的条件对记录进行过滤
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
and 运算符实例
例如:从 “Websites” 表中选取国家为 “CN” 且alexa排名大于 “50” 的所有网站:
select * from Websites where country = 'CN' and alexa > 50;
or 运算符实例
例如从 “Websites” 表中选取国家为 “USA” 或者 “CN” 的所有客户:
select * from Websites where country = 'USA' or country = 'CN';
SQL order by 关键字
用于对结果集按照一个列或者多个列进行排序,默认按照升序排列,如果需要降序,则使用desc关键字,还可以按照列名进行排序。比如:
select from * Websites order by id;
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 column = value1, column = value2, ...
where some_column = some_value;
注意 SQL UPDATE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要更新。如省略了 WHERE 子句,所有的记录都将被更新!执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
实例:
假设要把 “菜鸟教程” 的 alexa 排名更新为 5000,country 改为 USA,使用下面的 SQL 语句:
update Websites
set alexa = '5000', country = 'USA'
where name = '菜鸟教程';
SQL delete 语句
delete 语句用于删除表中的记录(行)。
语法:
delete from table_name
where some_column = some_value;
请注意 SQL DELETE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要删除。如省略了 WHERE 子句,所有的记录都将被删除!
实例:
delete from websites
where name = 'facebook' and country = 'USA';
删除name为facebook并且country为USA的行
SQL SELECT TO
SELECT TOP 子句用于规定要返回的记录的数目,对于拥有数千条记录的大型表来说,是非常有用的。
注意: 并非所有的数据库系统都支持SELECT TOP语句。MySQL支持LIMT语句来选取指定的条数数据,Oracle可以使用ROWNUM来选取。
SQL Service / MS Access 语法
select top number \ percent column_name(s)
from table_name;
MySQL 语法
select column_name(s)
from table_name
limit number;
实例
select * from Persons limit 5;
Oracle 语法
select column_name(s)
from table_name
where rownum <= number;
实例
select * from Persons where rownum <= 5;
MySQL SELECT LIMIT 实例
从“Websites”表中选取头两条记录;
select * from Websites limit 2;
SQL SELECT TOP PERCENT 实例
在 Microsoft SQL Server 中还可以使用百分比作为参数,下面的 SQL 语句从 websites 表中选取前面百分之 50 的记录:
select top 50 percent * from Websites;