SQL教程
1 SQL简介
SQL(Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
1.1 RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
2 SQL语法
2.1 数据库表
一个数据库通常包含一个或多个表。每个表有一个名字标识,表包含带有数据的记录(行)。
SQL对大小写不敏感。
2.2 SQL语句后面的分号
某些数据库系统要求在每条 SQL 语句的末端使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
2.3 一些重要的SQL命令
-
select 从数据库中提取数据
-
update 更新数据库中的数据
-
delete 从数据库中删除数据
-
insert into 向数据库中插入数据
-
create database 创建新数据库
-
alter database 修改数据库
-
create table 创建新表
-
alete table 变更(改变)数据库表
-
drop table 删除表
-
create index 创建索引(搜索键)
-
drop index 删除索引
3 SQL select语句
select语句用于从数据库中选取数据。
3.1 select语法
select语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。
3.1.1 select 语法
select <字段名> from <表名>;
3.2 select distinct语句
select distinct 语句用于返回唯一不同的值。
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同的值。
distinct关键词用于返回唯一不同的值。
3.2.1 select distinct语句
select distinct <字段名> from <表名>;
3.3 Where 子句
Where 子句用于过滤记录。
3.3.1 where 子句
where子句用于提取那些满足指定条件的记录。
3.3.2 where 语法
select <字段名> from <表名> [where条件];
3.3.3 文本字段 与 数值字段
SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
如果是数值字段,请不要使用引号。
3.3.4 where 子句中的运算符
下面的运算符可以在where 子句中使用:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于,注释:在SQL的一些版本中,改操作符可以被写成!= |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
4、举例学习mysql
4.1 创建数据库RUNOOB
create database RUNOOB;
4.2 打开RUNOOB数据库
use RUNOOB;
4.3 创建Websites表
create table Websites (
id int(8) primary key,
name varchar(30),
url varchar(30),
alexa int(8),
country char(6)
);
4.4 在Websites表中输入数据
insert into Websites value (1,"Google","https://www.google.com/",1,"USA"),
(2,"淘宝","https://www.taobao.com/",13,"CN"),
(3,"菜鸟教程","https://www.runoob.com/",4689,"CN"),
(4,"微博","http://www.weibo.com/",20,"CN"),
(5,"Facebook","https://www.facebook.com/",3,"USA"),
(6,"百度","https://www.baidu.com/",2,"CN"),
(7,"stackoverflow","http://stackoverflow.com/",0,"IND");
4.5 查询Websites数据库
select * from Websites;
4.6 创建索引
create index 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
注:更新一个包含索引的表需要比更新一个没有索引的表花费更多时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上创建索引。
4.6.1 create index 语法
在表上创建一个简单的索引。允许使用重复的值:
create index index_name
on table_name (column_name);
4.6.2 create unique index 语法
在表上创建一个唯一的索引。不允许使用重复值:唯一的索引意味着两个行不能拥有相同的索引。
create unique index index_name
on table_name (column_name);
注:用于创建索引的语法在不同的数据库中不一样。
4.6.3 create index 实例
在Websites 表中的 “id,name。url” 列创建一个名为 “WIndex” 的索引:
create index WIndex
on Websites (id,name,url);
5 撤销索引、撤销表 以及 撤销数据库
通过使用 drop 语句,可以轻松地删除索引、表和数据库。
5.1 drop index 语句
drop index 语句用于删除表中的索引。
用于MS SQL server的drop index语法:
drop index table_name.index_name
用于DB2/Oracle 的drop index 语句:
drop index index_name;
用于MySQL 的 drop index语法:
alter table table_name drop index index_name
5.2 drop table 语句
drop table 语句用于删除表。
drop table table_name
5.3 drop database 语句
drop database 语句用于删除数据库。
drop database database_name
5.4 truncate table 语句
如果我们仅仅需要删除表中的数据,但并不删除表本身,那么我们应该使用下面的语法。
truncate table table_name
6 alter table语句
alter table 语句用于在已有的表中添加、删除或修改列。
6.1 alter table 语法
如果在表中添加列,请使用下面的语法进行添加:
alter table table_name
add column_name datatype
如果要删除表中的列,请使用下面的语法:
注意:某些数据库系统不允许在这种数据库中删除列的方式
alter table table_name
drop column column_name
6.2 改变表中的数据类型
如果要改变表中的数据类型,请使用如下方法:
SQL server/MS Access
alter table table_name
alter column column_name datatype
mysql/oracle
alter table table_name
modify column column_name datatype
7 auto increment 字段
auto_increment 会在新纪录插入表中时生成一个唯一的数字。
7.1 auto increment 字段
我们通常希望在每次插入新纪录时,自动地创建主键字段的值。
我们可以在表中创建一个auto-insrement字段。
7.2 用于 mysql 的语法
在 person表中把 “ID” 列定义为auto-insrement 主键字段:
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
其中:
mysql 使用的auto_insrement 关键字来执行 auto_insrement 任务。
默认地,auto_insrement 的开始值是1,每条新纪录递增1.
要让auto_insrement 序列以其他的只开始,请使用下面的SQL 语法:
alter table persons auto_increment=100
7.3 用于 SQL server 的语法
将 persons 表中 “id” 列定义为 auto-insrement 主键字段:
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MS sql server 使用 identity 关键字来执行 auto-insrement 任务。
在上面的实例中,identity 的开始值是1,每条新纪录递增1。
提示:要规定“ID”雷伊10起始切递增5,请把identity 改为identity(10.5)。
8 视图(views)
视图就是可视化的表。(如何创、更新和删除视图)
8.1 create view 语句
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真是的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
你可以向视图添加 SQL 函数、where 以及 join语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
视图的作用:
- 视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。
- 视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
- 从而加强了安全性,使用户只能看到视图所显示的数据。
- 视图还可以被嵌套,一个视图中可以嵌套另一个视图。
SQL create view 语法
create view view_name as
select column_name(s)
from table_name
where condition
注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的SQL语句重建数据。
8.2 更新视图
create or replace view 语法
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
8.3 撤销视图
可以通过 drop view 命令来删除视图。
drop view view_name