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

转自: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 语句向空表写入数据。

W3CSCHOOL中的学习SQL




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


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等等,我们可以向用户精确地提交我们希望提交的数据。
数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值