您的位置:首页 > 数据库

关于数据库的SQL入门,转载

2015-11-17 15:25 337 查看
转自:http://blog.sina.com.cn/s/blog_627002d10100zlh2.html

SQL:

1.结构化查询语言
2.使我们有能力访问数据库
3.ANSI的标准计算机语言

SQL能做什么?
1.面向数据库执行查询
2.可从数据库取回数据
3.可在数据库中插入新的记录
4.可更新数据库中的数据
5.可创建新数据库
6.可在数据库中创建新表

7.可在数据库中创建存储过程

8.可在数据库中创建视图

9.可以设置表、存储过程和视图的权限

RDBMS:关系型数据库管理系统

RDBMS中的数据存储在被称为表(tables)的数据库对象中。

表是相关的数据项的集合,它由列和行组成。

数据库表:

一个数据库通常包含一个或多个表。每个表由一个名字标识。表包含带有数据的记录(行)。

SQL语句:

select LastName from Persons;

SQL对大小写不敏感!SQL语句后尽量带上分号。

SQL可以分为两部分:数据操作语言(DML)和数据定义语言(DDL)

查询和更新指令构成了SQL的DML部分:

select - 从数据库中获取数据

update - 更新数据库表中的数据

delect - 从数据库表中删除数据

insert into - 向数据库表中插入数据

DDL部分让我们有能力创建或删除表格。我们也可以定义索引键,规定表之间的链接,以及施加表间的约束。

SQL最重要的DDL语句:

create database - 创建新数据库

alter database - 修改数据库

create table - 创建新表

alter table - 变更数据库表

drop table - 删除表

create index - 创建索引(搜索键)

drop index - 删除索引

select语句

select语句从表中选取数据,结果被存储在一个结果表中。

select 列名称 from 表名;

select * from 表名;

select FristName,LastName from Persons;

select distinct:表中可能会包含重复值,关键词distinct用于返回唯一不同的值。

select distinct Company from Orders;

where子句用于规定选择的标准

如需有条件从表中选择数据,可将where子句添加到select语句。

语法:

select 列名称 from 表名称 where 列 运算符 值

运算符包括:between在某个范围内,like搜索某种模式

select * from Persons where city = 'Beijing';//SQL使用单引号环绕文本值(大部分数据库系统也接受双引号)。如果是数值,不要使用引号。

and & or运算符

用于基于一个以上的条件对记录进行过滤。可在where子语句中把两个或多个条件结合起来。

select * from Persons where LastName = 'Bush' and FirstName = 'George';

select * from Persons where LastName = 'Bush' or FirstName = 'George';

and和or也可以结合起来(使用圆括号组成复杂的表达式):

select * from Persons where (FirstName = 'George' or FirstName = 'John') and LastName = 'Carter';

order by语句用于对结果集进行排序

order by语句默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,可以使用desc关键字。

select Company,OrderNumber from Orders order by Company;

select 列名,列名 from 表名 order by 列名;

select Company,OrderNumber from Orders order by Company desc;

//在最后加关键字desc则为降序排列

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC;

insert into语句:向表格中插入新的行

insert into 表名称 values(值1,值2);

insert into Persons values('Gates','Bill','Xuanwumen 10','Beijing');

也可以指定索要插入数据的列:

insert into table_name(列1,列2) values(值1,值2);

insert into Persons values(LastName,FirstName) values('Wilson','Champs-Elysees');

update语句:用于修改表中的数据

update 表名 set 列名=新值 where 列名=某值

update Person set FirstName='Fred' where LastName=‘Wilson’;

更新某一行中的若干列:

update Person set FirstName='Fred',City='Beijing' where LastName = 'Wilson';

delete语句:

用于删除表中的行。

delect from 表名称 where 列名称 = 值;

删除所有行

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:

delect * from Person;

mysql特有语法

limit子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表而言,limit子句非常有用。

select column_name(s) from table_name limit number;

select * from Persons limit 5;//从表Persons中取5条记录

like操作符用于在where子句中搜索列中的指定模式

语法:

select column_name(s) from table_name where column_name like pattern;

%可用于定义通配符

从表Persons中选取City以N开始的人:select * from Persons like 'N%';

从表Persons中选取City以g结尾的人:select * from Persons link '%g';

从表Persons中选取City中包含lon的人:select * from Persons like '%lon%';

从表Persons中选取City中不包含lon的人:select * from Persons not like '%lon%';

SQL通配符:

SQL通配符可以代替一个或多个字符。通配符必须与like运算符一起使用。

%:替代一个或多个字符

_:仅替代一个字符

select * from Persons where LastName like 'C_r_er';

[charlist]:字符列中的任何单一字符

select * from Persons where LastName like '[ALN]%';//以A或L或N开头

[^charlist]或者[!charlist]:不在字符列中的任何单一字符

select * from Persons where LastName like '[!ALN]%';//不以A或L或N开头

IN操作符:允许我们在where子句中规定多个值。

select column_name(s) from table_name where column_name in(value1,value2,...);

select * from Persons where LastName in('Adams','Carter');

between操作符在where子句中使用,作用是选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

select * from Persons where LastName between 'Adams' and 'Carter';不同数据库对操作符的处理方式会有些差异。

如需使用上面的例子显示范围之外,使用not操作符:

select * from Persons where LastName not between 'Adams' and 'Carter';

SQL Alias

表的SQL Alias语法:select column_name(s) from table_name as alias_name;

列的SQL Alias语法:select column_name as alias_name from table_name;

Alias实例:使用表名称别名

select po.OrderID,p.LastName,p.FirstName from Persons as p,Product_Orders as po where p.LastName = 'Adams' and p.FirstName = 'John';

不使用别名的select语句:

select Product_Orders.OrderID,Persons.LastName,Persons.FirstName from Persons,Product_Orders where Persons.LastName='Adams' and Persons.FirstName = 'John';

SQL join

用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

引用两个表:

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons,Orders where Persons.Id_p = Orders.Id_p;

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons inner join Orders on Persons.Id_p = Orders.Id_p;

SQL inner join关键字

在表中存在至少一个匹配时,inner join关键字返回行。

select column_name(s) from table_name1 inner join table_name2 on table_name1.column_name = table_name2.column_name;

inner join 与 join是相同的。

select Persons.LastName,Persons.FirstName,Persons.Address from Person inner join Orders on Persons.Id_p = Orders.Id_p order by Persons.LastName;

SQL left join关键字

从左表那里返回所有的行,即使在右表中没有匹配的行。

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons left join Orders on Persons.Id_p = Orders.Id_p order by Persons.LastName;

SQL right join关键字

从右表返回所有的行,即使在左表没有匹配的行。

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons right join Orders on Persons.Id_p = Orders.Id_p order by Persons.LastName;

SQL full join关键字

只要其中某个表存在匹配,full join关键字就会返回行。

select Persons.LastName,Persons.FirstName,Orders.OrderNo from Persons full join Orders on Persons.Id_p = Orders.Id_p order by Persons.LastName;

SQL union 和 union all操作符

union操作符用于合并两个或多个select语句的结果集。union内部的select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条select语句中的列的顺序必须相同。

默认地,union操作符选取不同的值,如果允许重复的值,使用union all。

select E_Name from Employees_China union select E_Name from Employees_USA;//union命令只会选取不同的值

union all命令会列出所有的值

select E_Name from Employees_China union all select E_Name from Employees_USA;//union all则会列出所有的值

select into 语句

从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。

select * into Persons_backup from Persons;

in子句可用于向另一个数据库中拷贝表:select * into Persons in 'Backup.mdb' from Persons;

select LastName,FirstName into Persons_backup from Persons;

select LastName,FirstName into Persons_backup from Persons where City = 'Beijing';

从一个以上的表中选取数据:select Persons.LastName,Orders.OrderNo into Persons_Order_Backup from Persons inner join Orders on Persons.Id_p = Orders.Id_p;

create database语句:用于创建数据库

create database my_db;

create table语句:用于创建数据库中的表

create table 表名称{

列名称 数据类型,

列名称 数据类型,

列名称 数据类型,

}

create table Persons{

Id_p int,

LastName varchar(255),

FirstName varchar(255),

Address varchar(255),

City varchar(255)

}

可使用insert into 语句向空表写入数据。





---------------------------------------------------------------------------------------------------------------------------

SQL约束(Constraints)
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过create table语句),或者在表创建之后也可以(通过alert table语句)

not null约束强制列不接受null值。not null约束强制字段始终包含值。如果不向字段添加值,就无法插入新记录或者更新记录。
create table Persons{
Id_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
}

unique约束唯一标识数据库表中的每条记录。unique和primary key约束均为列或列集合提供了唯一性的保证。
primary key拥有自动定义的unique约束。每个表可以有多个unique约束,但是每个表只能有一个primary key约束。

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)//创建在"Id_P"列创建unique约束
}

如果需要为多个列定义unique约束,使用以下语法:
constraint uc_PersonID unique (Id_P,LastName);

当表已经被创建时,如需在"P_Id"列创建unique约束,使用如下SQL:
alert table Persons add unique(P_Id);
如需命名unique约束,并定义多个列的unique约束,使用以下语法:
alert table Persons add constraint uc_PersonID unique (P_Id,LastName);

撤销unique约束
alert table Persons drop index uc_PersonID;

primary key约束
约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含null值。每个表都应该有一个主键,并且每个表只能有一个主键。
create table Persons {
Id_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
primary key(Id_P)
}
如果需要命名primary key约束,以及为多个列定义primary key约束,使用以下SQL语法:
create table Persons{
Id_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
constraint uc_PersonID primary key(Id_P,LastName)
}

如果在表已存在的情况下为"Id_P"列创建primary key约束,使用以下SQL:
alert table Persons add primary key(Id_p);

如果需要命名primary key约束,以及为多个列定义primary key约束,使用以下SQL语法:
add constraint pk_PersonID primary key(Id_P,LastName);
注释:如果使用alert table语句添加主键,必须把主键声明为不包含null值(在表首次创建时)

撤销primary key约束
如需撤销primary key约束,使用以下SQL:
alert table Persons drop primary key;

foreign key约束
一个表中foreign key指向另外一个表中的primary key
foreign key约束用于预防破坏表之间连接的动作。
foreign key约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

create table Orders{
O_Id int not null,
OrderNo int not null,
Id_p int,
primary key (O_id),
foreign key (Id_P) peferences Persons(Id_P)
}
如果需要命名foreign key约束,以及为多个列定义foreign key约束,使用以下SQL语法:
create table Orders{
O_Id int not null,
OrderNo int not null,
Id_p int,
primary key(O_Id),
constraint fk_PerOrders foreign key(Id_P) peferences Persons(Id_P)
}

撤销foreign key约束
alert table Orders drop foreign key fk_PerOrders;

SQL 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)
}
如果需要命名check约束,以及为多个列定义check约束,使用以下SQL语句:
create table Persons {
Id_P int not null,
LastName varchar(255) not null,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
constraint chk_Person check(Id_P>0 and City='Sandnes')
}

如果在表已经存在的情况下为"Id_p"列创建check约束,使用以下SQL语句:
alert table Persons;
add check(Id_P>0);
如果需要命名check约束,以及定义多个列定义check约束,使用以下SQL语句:
alert table Persons;
add constraint chk_Person check(Id_P>0 and City='Sandnes');

撤销check约束:
alter table Persons;
drop constraint chk_Person;

SQL 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'
}

如果在表已经存在的情况下为"city"列创建default约束,使用以下SQL语句:
alter table Persons;
alter City set default 'Sandnes';

撤销default约束
alter City drop default;

SQL create index语句
create index语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引:可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更需要时间。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

SQL create index语法:
create index index_name on table_name(column_name);//在表上创建一个简单的索引
create unique index index_name on table_name(column_name);//在表上创建唯一的索引。唯一的索引以为着两个行不能拥有相同的索引值。

create index实例:
create index PersonIndex on Person;
如果希望以降序索引某个列中的值,在列名称之后添加保留字desc:
create index PersonIndex on LastName desc;
加入索引不止一个列,列出这些列的名称,用逗号隔开:
create index PersonIndex on Person (LastName,FirstName);

SQL撤销索引、表以及数据库
通过使用drop语句,删除索引、表以及数据库。
SQL drop index语句:MySql:alter table_name drop index index_name;
SQL drop table语句:drop table table_name;
SQL drop database语句:drop database 数据库名称;
SQL truncate table语句(仅仅删除表格中的数据):truncate table 表名称;

alter table语句
用于在已有的表中添加、修改或删除列。
在表中添加列:alter table table_name add column_name datatype;
删除表中的列:alter table table_name drop column column_name;
改变列的数据类型:alter table table_name alter column column_name datatype;
例子:
alter table Persons add Birthday date;
alter table Persons alter column Birthday year;
alter table Persons drop column Birthday;

SQL atuo increment字段
会在新记录插入表中时生成一个唯一的数字。如希望在每次插入新记录时,自动创建主键字段的值,可以在表中创建一个auto-increment字段。
create table Persons{
P_Id int not null auto_increment,
LastName varchar(255) not null,
FirstName varchar(255) not null,
Address varchar(255),
City varchar(255),
primary key(P_Id)
}
MySql使用auto_increment关键字来执行auto-increment任务。默认地,auto-increment的开始值是1,每条新记录递增1。要让auto-increment序列以其他的值起始,用SQL语法:
alter table Persons auto_increment = 100;

视图是基于SQL语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个多个数据库中的真实的表中的字段。我们可以向视图添加SQL函数、where以及JOIN语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where和join语句的影响。
SQL create view语法:
create view view_name as select column_name from table_name where codition
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用SQL语句来重建数据。
实例:
可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join等等,我们可以向用户精确地提交我们希望提交的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: