数据库和SQL语句

数据库分类:

关系型数据库

关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

目前主流的关系型数据库有Oracle,Mysql,SqlServer

非关系型数据库

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL数据库分类

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。[3]  举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

列存储数据库。

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。[2]  如:Neo4J, InfoGrid, Infinite Graph.

NoSQL数据库的使用场景

NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

SQL语句

SQL(structed query language) 结构化的查询语言:

DDL(Data Definition Language) 数据定义语言,命令:CREATE, DROP,ALTER 等

DML(Data Manipulation Language) 数据操纵语言,命令:INSERT、UPDATE、DELETE

DQL(Data Query Language) 数据查询语言,命令:SELECT

CRUD操作,指在做计算处理时的增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)

DDL是针对数据库和表结构的,其它的是针对表中的数据的。

创建数据库

CREATE DATABASE [IF NOT EXISTS]  db_name

[DEFAULT]  CHARACTER SET charaset_name  指定数据库采用的字符集

[DEFAULT]  COLLATE  collation_name            指定数据库字符集的比较方式

字符集的支持分为四个层次:

服务器(server),数据库(database),数据表(table)和连接(connection):

character_set_server:这是设置服务器使用的字符集

character_set_client :这是设置客户端发送查询使用的字符集

character_set_connection :这是设置服务器需要将收到的查询串转换成的字符集

character_set_results :这是设置服务器要将结果数据转换到的字符集,转换后才发送给客户端

显示数据库语句

SHOW DATABASES

显示数据库创建语句

SHOW CREATE DATABASE db_name

修改数据库

ALTER DATABASE db_name   character  set  utf8

数据库删除语句

DROP DATABASE [IF EXITS] db_name

同时修改列名和列的数据类型的方法:通常可以写成 alter table 表名 change column 旧列名 新列名 新的列类型

创建表(基本语句)

CREATE TABLE table_name        注意:创建表前,要先使用use db语句使用库。

(

field1 datatype,

field2 datatype,

field3 datatype,

field4 datatype,

….

)character  字符集 collate 校对规则

显示所有表

SHOW TABLES

显示表的创建语句

SHOW CREATE TABLE table_name

显示表的结构

DESC table_name

删除表

DROP TABLE table_name

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.

ALTER TABLE table

ADD (column datatype [DEFAULT expr]

[ , column datatype]….);

ALTER TABLE table

MODIFY (column datatype [DEFAULT expr]

[ , column datatype]….);

ALTER TABLE table

DROP (column);

修改表的名称:Rename table 表名 to 新表名

修改表的字符集:alter table student character set utf8

C(create增加数据) Insert语句

INSERT INTO  table [(column [, column…])]

VALUES (value [, value…]);

插入的数据应与字段的数据类型相同。数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。在values中列出的数据位置必须与被加入的列的排列位置相对应。字符和日期型数据应包含在单引号中。插入空值,不指定或insert into table value(null)

U(update更新数据) Update语句

UPDATE  tbl_name

SET col_name1=expr1 [, col_name2=expr2 …]

[WHERE where_definition]

UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行

D(drop删除数据) Delete语句

delete from tbl_name

[WHERE where_definition]

如果不使用where子句,将删除表中所有数据。Delete语句不能删除某一列的值(可使用update)使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

R(Retrieve查找数据) Select语句

SELECT [DISTINCT] *|{column1, column2. column3..}

FROM   table;

Select 指定查询哪些列的数据。column指定列名。*号代表查询所有列。From指定查询哪张表。DISTINCT可选,指显示结果时,是否剔除重复数据

在select语句中可使用表达式对查询的列进行运算

SELECT *|{column1|expression, column2|expression,..}

FROM  table;

在select语句中可使用as语句

SELECT column as 别名 from 表名;

使用order by 子句排序查询结果

SELECT column1, column2. column3..

FROM  table;

order by column asc|desc

Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。Asc 升序、Desc 降序ORDER BY 子句应位于SELECT语句的结尾。

使用group by 子句对列进行分组

SELECT column1, column2. column3.. FROM  table;

group by column

使用having 子句过滤

SELECT column1, column2. column3..

FROM  table;

group by column having …

Having和where均可实现过滤,但在having可以使用合计函数,having通常跟在group by后,它 作用于组。

SQL函数:

合计函数-count

Count(列名)返回某一列,行的总数

Select count(*)|count(列名) from tablename

[WHERE where_definition]

合计函数-SUM

Sum函数返回满足where条件的行的和

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

合计函数-AVG

AVG函数返回满足where条件的一列的平均值

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

合计函数-MAX/MIN

Max/min函数返回满足where条件的一列的最大/最小值

Select max(列名) from tablename

[WHERE where_definition]

    原文作者:烎__xx
    原文地址: https://www.jianshu.com/p/23137a1cf56b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞