学了将近一年的程序,却对数据库的知识掌握想当欠缺,今天下午趁有时间对数据库中的知识做个总结,充充电。以mysql数据库为例,其他数据库也大同小异,sql语句都是通用的。
站在数据库的高度看,数据库包括表、视图、存储过程、索引、函数、触发器,其中表、视图、存储过程、索引最常用的元素。
1、表
在数据库中,表是由数据按一定的顺序和格式构成的数据集合,是数据库的主要对象,其他一切对象都是建立在表的基础之上。每一行代表一条记录,每一列代表记录的字段。
对表的操作主要有,创建表、删除表、修改表。
创建表sql语句:create table table_name (字段名称 类型 [null | not null] [primary key|unique] [foreign key (column)]);多个字段之间用逗号分隔。如:
use database1 ;
create table table1(
学号 varchar(30) not null ,
课程号 varchar(30) ,
成绩 double(6,2),
学分 double(6,2),
primary key(学生号,课程号)
);
表创建以后,可以对表增加、删除、修改表的字段和表名称。如
#新增一个字段,默认值为0,非空,自动增长,主键
-
alter table tabelname add new_field_name field_type default 0 not null auto_increment ,add primary key (new_field_name);
-
- #增加一个新字段
-
-
alter table tableName add new_field_name field_type;
-
alter table tableName add new_field_name field_type not null default '0';
-
- #删除字段
-
-
alter table tableName drop column field_name;
-
- #重命名字段
-
-
alter table tableName change old_field_name new_field_name new_field_type;
-
- #改变字段的类型
-
-
alter table tableName change field_name field_name field_type;
- #重命名表
-
-
alter table table_old_name rename table_new_name;
-
- #加索引
-
alter table tablename add index 索引名 (字段名1[,字段名2 …]);
-
alter table tablename add index index_name(name);
-
- #设置主键
-
alter table tablename add primary key(field_name);
-
- #添加唯一索引
-
alter table tablename add unique index_name(field_name);
-
- #删除索引
-
alter table tablename drop index index_name;
2、视图
数据视图在程序里可以当一个表来处理.它就是把两个或多个表安一定的关系联系起来生成一个新的表.
比如:表1中有员工编号,表2中有员工姓名,电话... 用视图把这两个表联系起来,生成一个新的表:员工编号,员工姓名,电话...
但是,视图 一般只用于查询操作,而不利用视图进行数据的增、删、改操作
MySQL 视图的操作是在新版本数据库才支持的,视图操作的好处是可以简化数据库的查询,特别是一些
经常查询的数据表我们可以先创建一个视图,以后要在查询这个类式 的数据表时候,就可以直接查询该
视图。这样也可以提高查询的效率。 视图还有个好处就是,你如果改变了基数据表的字段或者值,视图表也会随着改 变,所以我们不用去担
心,改变基数据的字段值时候担心视图的数据不同步的问题。例如:创建视图,然后通过视图来查询。 create view v3 as SELECT b.sid, b.grade, c.cname FROM grade b, course c WHERE b.cid = c.cid
然后查询从视图中查询出一条数据 select sid,grade,cname from v3 where sid=200410001
这样是不是更好理解点,不要再一次使用联合查询去查询某条数据
3、存储过程
上篇文章对存储过程有详细介绍,这里举个例子说明
--删除存储过程
DROP PROCEDURE IF EXISTS proc_employee_findById;
--创建存储过程
CREATE PROCEDURE proc_employee_findById(in|out|inout n int)
BEGIN
SELECT * FROM employee where id=n;
END
--定义变量
SET @n=1;
--调用存储过程
CALL proc_employee_findById(@n);
操作存储过程时应注意:
1. 删除存储过程时只需要指定存储过程名即可,不带括号;
2. 创建存储过程时,不管该存储过程有无参数,都需要带括号;
3. 在使用SET定义变量时应遵循SET的语法规则;
SET @变量名=初始值;
4. 在定义存储过程参数列表时,应注意参数名与数据库中字段名区别开来,否则将出现无法预期的结果
4、其它一些主要的概念,包括左右连接、内连接、合并同类项、联合查询,一些主要的函数有计数count() 、汇总sum() 、最大值max()、最小值min(),分组group by、排序order by。
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。
内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。左连接即是把左边的表看成主表,将条件匹配的右边的表的数据连到左边的表上并查询出来。
right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。与左连接相似
而full join(全连接)顾名思义,左右表中所有记录都会选出来。
举例说明:
假设有A,B两个表。
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
PS:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误
注:left和right是外连接,Inner是内连接。
sql union用法
sql union在查询中可以将两个SQL 语句的结果合并起来。如果这样看的话, UNION 跟 JOIN 是相似的,两个指令都可以由多个表格中撷取资料。
sql union的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。
sql union只是将两个结果联结起来一起显示,并不是联结两个表,sql用法如下:
两个表格, StoreData_200903 表格 StoreData_200904,这两张表格的数据结构是完全一样的,只是存放了不同月份的数据库(注意:这样做是为了能够分表,而且可以按月存档数据),现在需要联合查询,就是从两个表中查询出数据,SQL 语句:
SELECT top 50 FROM StoreData_200903
UNION
SELECT top 50 FROM StoreData_200904
sql union all用法
sql union all这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 sql union all和 sql union不同之处在于 sql union all会将每一次符合条件的数据列出来,无论数据库有无重复。
用法也很简单:
SELECT top 50 FROM StoreData_200903
UNION ALL
SELECT top 50 FROM StoreData_200904
值得注意的是,sql union all的执行效率要比sql union效率要高很多,这是因为,使用sql union需要进行排重,而sql union All 是不需要排重的,这一点非常重要,因为对于一些单纯地使用分表来提高效率的查询,完全可以使用sql union All。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集
如
select id,name from A
union
select id,name from B
注意:两个select 参数的名称是否相同不重要,union只会按一个select 参数的顺序去链接另一个select的参数
这就要求,两个select的参数个数要相同,且相同位置的参数类型也要相同
union all 与union 的语法 一样,只是union all是结果集里准许有重复记录,而union的结果集里不准许有重复记录
JOIN 操作符拥有连接两张表,
JOIN: 如果表中有至少一个匹配,则返回行 (亦 inner join)
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
分享到:
相关推荐
**数据库MySQL基础知识总结** 在IT领域,MySQL是一个广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性而备受青睐。以下是对MySQL基础知识的详细总结: ### 1. MySQL基本概念 - **数据库(Database)*...
数据库是信息技术领域...总的来说,数据库基础知识涵盖了从数据的定义到数据库管理系统的设计和使用,以及SQL Server 2005的具体实现。理解和掌握这些概念对于任何涉及数据存储和处理的IT专业人士来说都是至关重要的。
学习Oracle数据库基础知识的六条总结: 1. 如果有一定的数据库基础知识,可以跳过基本概念的学习,直接学习Oracle的体系结构和基本概念。 2. 学习Oracle的体系结构,包括instance、数据文件、日志文件、参数文件、...
以上内容涵盖了Oracle数据库的基础知识、安装配置流程、数据库创建过程、管理工具使用方法等核心知识点。对于初学者而言,这些知识点是掌握Oracle数据库技术的关键,有助于构建坚实的技术基础。
数据库是存储和管理数据的核心工具,对于初学者来说,理解其基本概念和操作至关...了解并掌握数据库基础知识,是成为IT专业人士的必经之路。对于初学者而言,选择一个认证课程,结合实际操作,是学习数据库的最佳途径。
总结来说,这个压缩包文件提供了全面的数据库基础知识学习材料,结合萨王珊和师煊的课后习题,可以帮助学习者从理论到实践,系统地掌握数据库的基础知识。无论是对于计算机科学的学生,还是想要提升数据库技能的专业...
"Oracle数据库基础知识" Oracle数据库基础知识是指Oracle数据库的基本概念、原理和操作技术。Oracle数据库是一种关系型数据库管理系统,提供了强大的数据存储、管理和检索功能。本文档将对Oracle数据库基础知识进行...
数据库基础知识是学习数据库原理的第一步,其中包括了数据、数据库、数据库管理系统和数据库系统的概念。数据是数据库中的基础信息,可以是数字、文字、图像等。数据库(DB)是用来存储数据的系统,它能够帮助我们...
### 数据库基础 #### 1. 数据库的概念 数据库(Database,简称DB)是长期存储在计算机内的、有组织的、可共享的数据集合。这些数据按一定的结构和规则组织,独立于应用程序,具有较小的冗余度、较高的数据独立性和易...
【数据库学习总结-总集】 在信息技术领域,数据库是存储和管理数据的核心工具,它扮演着数据仓库的角色,为各种应用程序提供数据支持。本总结旨在深入探讨数据库的基础知识、主要类型、设计原则以及最佳实践,帮助...
Oracle数据库知识点总结 章节目录 一、Oracle数据库概述 二、Oracle数据库架构与组件 三、SQL语言基础 四、PL/SQL编程 五、数据库对象管理 六、数据备份与恢复 七、性能优化与安全管理 八、如何学习Oracle数据库 九...
数据库系统的基础知识是IT领域的重要组成部分,它涵盖了数据的存储、管理和访问。在这个PPT学习教案中,我们首先探讨了数据库的发展历程。 1. 数据库的发展可以分为三个主要阶段: - 人工管理阶段:在20世纪50年代...
总结来说,数据库基础知识包括了对数据库及其相关技术的全面认识,从数据库的定义、结构、管理,到数据模型的构建和数据库系统的组成,都是数据库学习者必须掌握的核心内容。随着技术的进步,数据库系统也在不断发展...
数据库学习总结可用.pdf 数据库学习总结是指通过学习数据库应用教程获取的知识总结。本文主要总结了数据库学习的重要性、数据库技术的特点、数据库学习的难点、数据库学习的重要性等内容。 数据库学习的重要性:...
总结来说,数据库基础知识涵盖了从数据存储、数据管理到系统架构等多个方面,理解这些知识点对于设计、开发和维护高效可靠的数据库系统至关重要。数据库技术的不断发展和创新,使得数据管理和分析的能力不断提升,为...
### 数据库基础学习知识点 根据提供的标题“数据库基础学习”及描述“SQL SLQ数据库 数据库”,本篇文章将深入解析数据库的基本概念、SQL语言的基础应用以及通过具体的代码示例来理解如何创建表、修改表结构以及...
总结,通过学习这个数据库基础知识概述,你应该能够了解数据库系统的概念,熟悉其组成,掌握如何安装数据库系统,创建数据库,以及进行基本的管理操作。同时,你也将具备使用数据库语言进行开发的能力,包括创建和...
Oracle数据库是世界上最流行的数据库管理系统之一,尤其在企业级应用中...理解和掌握这些概念对于有效管理和优化Oracle数据库至关重要,特别是对于初学者,这些基础知识构成了进一步学习和操作Oracle数据库的坚实基础。