RDBMS
RDBMS 指的是关系型数据库管理系统
RDBMS是SQL的基础,同样也是所有现代数据库系统的基础,比如MS SQL Server,IBM DB2,Oracle, MySQL以及Microsoft Access。
RDBMS中的数据存储在被称为表(tables)的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL DMI 和DDL
可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL)。
**SQL(结构化查询语言)**是用于执行查询的语法。但是SQL语言也包含用于更新、插入和删除记录的语法。
·select
·update
·delete
·insert into
SQL的数据定义语言(DDL)部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL中最重要的DDL语句:
·create database
alter database
create table
alter table
drop table
create index -创建索引(搜索键)
**drop index ** -删除索引
基础语法
select
select 列名称(,列名称,列名称) from 表名称
select * from 表名称
DISTINCT
搜索出来的值不重复
select distinct 列名称 from 表名称
where
select 列名称 from 表名称 where 列 运算符 值
ey:
select * from Persons where City = 'Beijing'
注:文本值要用'单引号'括起来,但是数值不用
=、<、>、 | 基础运算符 |
---|---|
between | 在某个范围内 |
– | – |
like | 搜索某种模式 |
and 和 or运算符
and 和 or 可在 where 子语句中把两个或多个条件结合起来。
结合起来and 和 or
select * from Persons where (FirstName='Thomas' OR FirstName='William') and LastName='Carter'
order by
order by 语句用于根据指定的列对结果集进行排序
order by 默认按照升序对记录进行排序
降序DESC
#以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
select Company,OrderNumber from Orders order by Company desc, OrderNumber asc
insert into
insert into 表名称 values (值1,值2,……)
insert into table_name (列1,列2,……) values (值1,值2,……)
insert into Persons values ('Gate','Bill','Xuanwumen 10','Beijing')
update
update 表名称 set 列名称 = 新值 where 列名称 = 某值
delete
#删除某行
delete from 表名称 where 列名称 = 值
#删除所有行
delete * from table_name
高级教程
top
top子句用于规定要返回的记录的数目。
例:选取5条信息
SELECT column_name(s)
FROM table_name
LIMIT number
(1)选取头两条信息
SELECT TOP 2 * FROM Persons
(2)选取前百分之多少
SELECT TOP 50 PERCENT * FROM Persons
like
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
**%**是通配符
其中也可以选择不像,即 NOT LIKE
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
SQL通配符
1.使用%通配符
搜寻名字中带有lond的城市
SELECT * FROM Persons
WHERE City LIKE '%lond%'
2.使用_通配符
搜寻第一个字符之后是"eorge"的城市
SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'
3.使用 [charlist] 通配符
我们希望从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
我们希望从上面的 “Persons” 表中选取居住的城市不以 “A” 或 “L” 或 “N” 开头的人:
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'
in
IN 操作符允许我们在 WHERE 子句中规定多个值
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
BETWEEN 操作符
操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
as
表的 SQL Alias 语法
SELECT column_name(s)
FROM table_name
AS alias_name
列的 SQL Alias 语法
SELECT column_name AS alias_name
FROM table_name
join 和 key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
引用两个表
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
SQL JOIN - 使用 Join
除了上面的方法,我们也可以使用关键词 JOIN 来从两个表中获取数据。
select Persons.LastName, Persons.FirstName, Orders.OrderNo
from Persons
inner join Orders
on Persons.Id_P = Orders.Id_P
order by Persons.LastName
除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。
join: 如果表中有至少一个匹配,则返回行
left join: 即使右表中没有匹配,也从左表返回所有的行
right join: 即使左表中没有匹配,也从右表返回所有的行
**full join **: 只要其中一个表中存在匹配,就返回行
union
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
**注释:**默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
select into
把所有的列/希望的列插入新表
select */column_name(s)
into new_table_name [in externaldatabase]
from old_tablename
向另一个数据库中拷贝表
select *
into Persons in 'Backup.mdb'
fromPersons
后面可以+where …
create database
create database databse_name
create table
create table 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
SQL约束 | |
---|---|
not null | |
unique | |
primary key | |
foreign key | |
check | |
default |
unique约束
create table Persons
(
Id_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
unique (Id_P)
#多个限制条件时
constraint uc_PersonID unique (Id_P,LastName)
)
当表已经被创建时,如需在“Id_P”列创建unique约束
alter table Persons
add unique (Id_P)
#多个约束时
add constraint uc_PersonID unique (Id_P,LastName)
撤销unique约束
alter table Persons
drop index uc_PersonID
key
key的联合索引
primary key
primary key 约束 唯一标识数据库表中的每条记录主键
必须包含唯一的值
主键列不能包含null值
每个表都应该有一个主键,并且
1.'最后加'primary key (Id_P)
2.Id_P int not null primary key
3.constraint pk_PersonID primary key (Id_P,LastName)
#表已经创建的时候
alter table Persons
add primary key (Id_P)
撤销primary key 约束
alter table Persons
drop primary key
foreign key
外键约束
foreign key 约束用于预防破坏表之间连接的动作
也能防止非法数据插入外键列,因为它必须是它指向的那个表的值之一。
create table Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
foreign key (Id_P) references Persons(Id_P)
)
在表已经存在的情况下
alter table Orders
add constraint fk_PerOrders
foreign key (Id_P)
references Persons(Id_P)
#删除的话
alter table Orders
drop foreign key fk_PerOrders
check约束
check约束用于限制列中的值的范围
如果对单个列定义check约束,那么该列只允许特定的值
如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。
create table Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
check (Id_P>0)
)
#如果需要多个约束
constraint chk_Person check (Id_P>0 AND City='Sandnes')
在表已经存在的情况下
alter table Persons
add check (Id_P>0)
#多个约束时
add constraint chk_Person check (Id_P>0 AND City='Sandnes')
撤销check约束
alter table Persons
drop chk_Person
default约束
default约束用于向列中插入默认值
如果没有规定其他的值,那么会将默认值添加到所有的新纪录
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) default 'Sandnes'
)
alter table Persons
alter City set default 'sandnes'
alter table Persons
alter City drop default
create index
索引
可以在表中创建索引,以便更加高效地查询数据
用户无法看到索引,他们只能被用来加速/查询
若是需要不重复的,则加一个unique
create (unique) index indx_name
on table_name (column_name desc)
不加东西默认为 自动升序 若是降序加desc
若是希望索引的不止一个列,可以在括号中列出这些列的名称
create index PersonIndex
on Person (LastName,FirstName)
drop
alter table table_name drop index index_name
#删除表
drop table 表名称
#删除数据库
drop database 数据库名称
#仅仅需要除去表内的数据,但并不删除表本身
truncate table 表名称
alter
alter table table_name
add column_name datatype
#删除
drop column column_name
#修改列的数据类型
alter column column_name datatype
– 新增流水号字段,修改类型的注释
ALTER TABLE cps
.cps_audit
MODIFY COLUMN audit_type
int(1) NULL DEFAULT NULL COMMENT ‘0 自助 1 远程 2 现场’ AFTER audit_status
,
ADD COLUMN sn
varchar(255) NULL COMMENT ‘流水号’ AFTER id
;
##int类型1个字节长度,可为空,且默认为空
int(1) NULL DEFAULT NULL
##在字段`audit_status`后增加字段
AFTER `id`
auto increment
P_Id int not null auto_increment,
alter table Persona auto_increment=100
comment列描述
列描述就是对每个字段进行注释,用来给程序员或DBA进行提示。使用comment进行定义
create table t2(
b varchar(32) comment '姓名'
);
ENGINE=InnoDB
代表使用innodb引擎,是MySQL的数据库引擎之一,为MySQL发布binary的标准之一。
default charset = utf8 数据库默认编码为utf-8
SQL Date
SQL Nulls
SQL isnull()
SQL 数据类型
SQL 服务器