sql数据库学习

时间:2024-04-07 22:02:30编辑:奇事君

数据库系统原理:第一章 数据库系统概述

第一节 数据库基本概念 1. 数据:描述事物的符号记录,是指用物理符号记录下来的,可以鉴别的信息。 2. 数据库:存储数据的仓库,是指长期存储在计算机中,有组织可共享的数据集合。 3. 数据库管理系统:是指专门用于建立和管理数据库的软件,介于应用程序和操作系统之间。 数据库管理系统主要功能: (1)数据定义功能。 (2)数据操纵功能。 (3)数据库的运行管理功能。 (4)数据库的建立和维护。 (5)数据组织、存储和管理功能。 4. 数据库系统:一个完整的数据库系统包括 数据库、数据库管理系统以及相关使用工具、应用程序、数据管理员和用户等。 第二节 数据管理技术的发展 1.人工管理阶段 20世纪50年代中期以前,基本上都是依靠手工方式来进行。 特点:1 数据不保存 2 应用程序管理数据 3 数据面向应用。 2.文件系统阶段 20世纪50年代以后到60年代中期。 特点:数据可以长期保存 可以专门管理,提供了物理数据的独立性。不能在记录或数据项级实现数据的共享,存在大量的数据冗余。 3.数据库系统阶段 20世纪0年代后期。出现数据库管理系统。 特点:(1)数据集成(最大成俗共享、且冗余小)。(2)数据共享性高 (3)数据冗余小(4)数据一致性(5)数据独立性高(6)实施统一管理与控制(7)减少应用程序开发与维护的工作量 第三节 数据库系统结构 一、数据库系统的三级模式结构 由模式、外模式、和内模式三级结构重组成。 模式:也为概念模式或者逻辑模式 外模式:也成为子模式或者用户模式 内模式:也成为存储模式。 三级模式结构的两层映像:外模式/模式映像 模式/内模式映像,从而保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。 二、数据库系统的运行与应用结构 1.客户/服务器结构 (C/S)2.浏览器/服务器结构(B/S) 第四节 数据模型 是现实时间特征的模拟和抽象表达。 一、数据特征与数据模型组成要素 数据模型三要素:数据结构、数据操作、数据约束。 二、数据模型的分类 1.概念层数据模型 基本概念: 实体:客观存在并可以相互区别的事物 属性:实体所具有的某种特性 码或键:可以唯一标识实体属性集 域:属性的取值范围 实体型:具有相同属性的实体必然具有共同的特征和性质。 实体集:同型实体的集合 联系:事物内部以及事物之间的关系。 标识方法:1976年提出的实体-关系法(ER图) 2.逻辑层数据模型 有 层次模型、网状模型、关系模型、面向对象模型 3.物理层数据模型 本人会成体系的把每本书相关知识重点一一总结,供同僚参考。

数据库原理第三章关系数据库SQL语言

第三章 关系数据库SQL语言
32. SQL数据库的体系结构及术语:
SQL数据库的体系结构也是三级,但术语与传统的关系模型不同。
关系模式称为“基本表”,存储模式称为“存储文件”,子模式称为“视图”,元组称为“行”,属性称为“列”。
33. SQL数据库的体系结构要点是什么:
(1) 一个SQL数据库是表(table)的汇集,它用一个或多个SQL模式定义。一个SQL模式是表和授权的表态定义。
(2) 一个SQL表由行集构成,一行是列的序列,每列对应一个数据项。
(3) 一个表或者是一个基本表,或者是一个视图。(视图只保存定义,不保存数据)
(4) 一个基本表可跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储器上一个物理文件对应。
(5) 用户可用SQL语句对视图和基本表进行查询等操作。
(6) SQL用户可以是应用程序,也可以是终端用户。
34. SQL的组成分成几部分:
SQL主要分成四部分:
(1) 数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
(2) 数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
(3) 数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
(4) 嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。
35. SQL模式的撤消有哪两种方式:
CASCADE(连锁式)方式:执行DROP语句时,把SQL模式及其下属的基本表、视图、索引等所有元素全部撤消。
RESTRICT(约束式)方式:执行DROP语句时,只有当SQL模式中没有任何下属元素时,才能撤消SQL模式,否则拒绝执行DROP语句。
36. SQL提供的基本数据类型有哪些?每种举两个例子:
(1) 数值型:INTEGER长整数、SMALLINT短整数
(2) 字符串型:CHAR(N)长度为N的定长字符串、VARCHAR(N)具有长度为N的变长字符串。
(3) 位串型:BIT(N)长度为N的二进制位串、BIT VARYING(N)长度为N的变长二进制位串
(4) 时间型:DATE日期、TIME时间
SQL2允许用户使用“CREATE DOMAIN”语句定义新的域。
37. 完整性约束主要有哪三种子句:
完整性约束主要有三种子句:主键子句(PRIMARY KEY),检查子句(CHECK)和外键子句(FOREIGN KEY)
38. 什么是视图,它与表的区别是什么:
在SQL中,外模式一级数据结构的基本单位是视图,视图是从若干基本表和(或)其他视图构造出来的表。我们创建一个视图时,只是把其视图的定义存放在数据字典中,而不存储视图对应的数据,因此,视图被称为“虚表”,这是它与表的主要区别。
39. 对于视图元组的更新操作(INSERT、DELETE、UPDATE)有哪三条规则:
(1) 如果一个视图是从多个基本表使用联接操作导出的,那么不允许对这个视图执行更新操作。
(2) 如果在导出视图的过程中,使用了分组和聚合操作,也不允许对这个视图执行更新操作。
(3) 如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键或某个候选键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。
SQL2中,允许更新的视图在定义时,必须加上“WITH CHECK OPTION”短语。
40. SQL语言有哪两种使用方式:
一种是在终端交互方式下使用,称为交互式SQL;
另一种是嵌入在高级语言的程序中使用,称为嵌入式SQL,而这些高级语言可以是C、PASCAL、COBOL等,称为宿主语言。

41. 嵌入式SQL的实现有哪两种处理方式:
一种是扩充宿主语言的编译程序,使之能处理SQL语句;
另一种是采用预处理方式。目前多数系统采用后一种。
42. 在宿主语言的程序中使用SQL语句有哪些规定:
(1) 在程序中要区分SQL语言与宿主语句。所有SQL语句前必须加上前缀标识“EXEC SQL”,并以“END_EXEC”作为语句的结束标志。(结束标志在不同的宿主语言中不同)
(2) 允许嵌入的SQL语句引用宿主语言的程序变量(共享变量),但有两条规定:
1) 引用时,这些变量前必须加冒号“:”作为前缀,以示与数据库中变量有区别。
2) 这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明。
43. 用游标机制协调SQL的集合处理方式所用的SQL语句有哪些:
与游标有关的SQL语句有下列四个:
(1) 游标定义语句(DECLARE)
(2) 游标打开语句(OPEN)
(3) 游标推进语句(FETCH)
(4) 游标关闭语句(CLOSE)
44. SQL DML的嵌入使用技术:
(1) 若是INSERT、DELETE、UPDATE语句,则不必涉及游标,只要加上前缀标识和结束标志就能嵌入宿主语言程序中使用。
(2) 若是已知查询结果肯定是单元组的SELECT语句,则不必涉及游标,也可加上前缀标识和结束标志后嵌入宿主语言程序中使用,但此时应该在SELECT语句中增加一个INTO子句,指出找到的值应送到相应的共享变量中去。
(3) 若是已知查询结果为多个元组的SELECT语句,则必须涉及到游标,用游标机制把多个元组一次一个地传送给宿主程序处理。


sql如何新建数据库

SQL2000
在开始-程序- MICROSOFT SQLSERVER- 企业管理器 界面下打开控制台根目录下的所有+号展开到(LOCAL)(WINDOWS NT),它下面有+数据库,+数据转换服务...等等,你在“数据库”右键点“新建数据库” 就可以了
SQL2005
》打开SQL Server Management Studio 。

》系“连接到服务器”对话框中,“服务器类型”下拉选项选择“数据库引擎”,“服务器名称”个度默认会显示上次连接的服务器,可以使用计算机名称、IP地址或是命名管道来连接。

》打开“对象资源管理器”,右击“数据库”可以新建数据库。

》点击新建数据库后,出现一个窗口,通常只要完成常规页面设置即可。设置如下:
1.“数据库名称”要符合SQL的命名规则,唔好与现存的数据库名称相同。 2.“所有者”,点一下“。。。”按扭来选取其他用户。
3.“使用全文索引”,全文索引可以快速且有弹性地编制索引,查询大量非结构化文本数据时效率高于LIKE表达式。
4.“逻辑名称”,一般采用默认的,方便管理。
5.“初始大小”,设置时可根据你的主要数据库估计用到几大,便设到几大,再去设启用“自动增长”。一般选按1M,“不限制文件增长”。
6.“路径”,选择存储数据库的位置。
7.日志的设置按数据设置技巧相同,但要注意,日志文件会记录所有发生在数据库的变动和更新,以便到硬件损坏等各种意外时,能有效地将数据还原到发生意外的时间点上,从而确保数据的一致性与完整性。显然,要让日志文件能够发挥效用,必须将数据文件与日志文件存储在不同的物理磁盘上这点是您在设定日志文件的物理文件名时所必须留意的。
8.“添加”,在添加时注意选“文件类型”,当你选择日志,文件组就会自动选用“不适用”。还要注意,不用的日志,存储路径的物理盘应设置为不同。以便还原。
9.添加次要数据文件默认会隶属于主要文件组,如果你想新建一个文件组,在次要数据的文件组中选择“新文件组”,输入名称,选中“默认值”。如果你唔想被人修改或更新文件组内的表,你就选“只读”。


SQL基础语句

/* 语法: select 查询列表 from 表名 特点: 1.查询列表可以是:表中的字段、常量值、表达式、函数 2.查询的结果是虚拟的表格 */ -- 注意查询之前,要打开指定的库,use myemployees; USE myemployees; SELECT last_name FROM employees; SELECT last_name,salary,email FROM employees; SELECT*FROM employees; -- 顺序和表中的字段一样 SELECT 100; SELECT 'JOIN'; SELECT 100*99; SELECT VERSION();-- 8.0.11 /* 好处: 1.便于理解 2.如果要查询的字段有重名的情况,使用别名可以区分开 */ SELECT 100*77 AS 结果 haha; SELECT last_name AS 姓,first_name AS 名 FROM employees; SELECT 100*77 结果 haha; SELECT last_name 姓,first_name 名 FROM employees; -- SELECT salary AS OUT put FROM employees;会报错 -- 因为out是关键词,所以,如果别名里面有关键词的,请加双引号,或者单引号。 SELECT salary AS "OUT put" FROM employees; SELECT DISTINCT department_id FROM employees; /* 1.+号只有一个功能:运算符。 select 100+90; 这个做加法 2.SELECT NULL+10; --只要一方为NULL,则结果肯定是NULL。 */ -- 错误❌:SELECT last_name+first_name AS 姓名 FROM employees; SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees; DESC departments; SELECT * FROM departments; SELECT DISTINCT job_id FROM employees; -- commission_pct有些值是NULL -- 因为NULL和谁拼接都是NULL -- 所以下面的结果可能为NULL SELECT CONCAT(employee_id,',',first_name,',',last_name,",",commission_pct) AS "OUT_PUT" FROM employees; SELECT IFNULL(commission_pct,0) AS 奖金率,commission_pct FROM employees; -- 上面题的做法: SELECT CONCAT(employee_id,',',first_name,',',last_name,",",IFNULL(commission_pct,0)) AS "OUT_PUT" FROM employees; /* 语法: select 查询列表 from 表名 where 筛选条件; 查询列表可以是:表中的字段、常量值、表达式、函数 分类: 一。按条件表达式筛选 条件运算符:> >= <= 二。按逻辑表达式筛选 逻辑运算符:z 作用:连接条件表达式 && || ! 或者 and or not 三。模糊查询 like BETWEEN AND in is null 或者 is not null */ SELECT * FROM employees WHERE salary>12000; SELECT employee_id,department_id FROM employees WHERE department_id90; SELECT last_name,salary,commission_pct FROM employees WHERE salary>=10000 AND salary<=20000; SELECT * FROM employees WHERE department_id110 or salary>15000; -- 或者写成 SELECT * FROM employees WHERE NOt(department_id>=90 AND department_id 15000; /*like 特点: 一般和通配符搭配使用, 通配符 % :任意多个字符,包含0个字符 _ :占一个字符 */ -- %代表通配符 SELECT * FROM employees WHERE last_name LIKE '%a%'; SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%'; -- \转义字符 SELECT last_name FROM employees WHERE last_name LIKE ' _%'; -- 或者 告诉系统 %' ESCAPE '$'; /* 1.使用between and 可以提高语句简洁度 2.包好临界值 3.前小后大,不能颠倒顺序 */ SELECT * FROM employees WHERE employee_id>=100 AND employee_id<=120; -- 或者 SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120; /* 含义:判断某字段的值是否属于in列表中的某一项 特点: 1.in 比 or 简洁 2.in列表的值类型必须是相同的或者兼容的 3.in列表的值不能使用通配符 */ SELECT last_name,job_id FROM employees WHERE job_id='IT_PROG' or job_id='AD_PRES' or job_id='AD_VP'; -- 或者 SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG' , 'AD_PRES' ,'AD_VP'); /* =或者不能用于判断null值,所以只能用 is null和 is not null */ SELECT last_name,commission_pct FROM employees WHERE commission_pct is null; SELECT last_name,commission_pct FROM employees WHERE commission_pct is not null; -- 安全等于作用:判断是否等于,包括null,如果等于返回true。可读性较低 -- is null :仅仅判断null值,可读性较高。 -- 直接写=是不行的 SELECT last_name,commission_pct FROM employees WHERE commission_pct null; SELECT * FROM employees WHERE salary 12000; -- 注意这个IFNULL SELECT last_name,department_id,salary 12 (1+IFNULL(commission_pct,0)) as 年薪 FROM employees WHERE employee_id=176; SELECT salary,last_name FROM employees WHERE commission_pct IS NULL AND salary<18000; SELECT * FROM employees WHERE job_id'IT' OR salary=12000; DESC departments; SELECT DISTINCT location_id FROM departments; SELECT * FROM employees WHERE commission_pct like '%%' and last_name like '%%';-- commission_pct有字段有null,and之后就是null了

常见的SQL语句有哪些

(1)更新数据记录:
sql="update数据表set字段名=字段值where条件表达式"
sql="update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式"

(2)添加数据记录:
sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)"
sql="insertinto目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表)

(3)删除数据记录:
sql="deletefrom数据表where条件表达式"
sql="deletefrom数据表"(将数据表所有记录删除)

(4)数据记录筛选:
sql="select*from数据表where字段名=字段值orderby字段名[desc]"
sql="select*from数据表where字段名like'%字段值%'orderby字段名[desc]"
sql="selecttop10*from数据表where字段名orderby字段名[desc]"
sql="select*from数据表where字段名in('值1','值2','值3')"
sql="select*from数据表where字段名between值1and值2"

(5)数据表的建立和删除:
CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)
例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ())
DROPTABLE数据表名称(永久性删除一个数据表)

(6)数据记录统计函数:
AVG(字段名)得出一个表格栏平均值
COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名)取得一个表格栏最大的值
MIN(字段名)取得一个表格栏最小的值
SUM(字段名)把数据栏的值相加
引用以上函数的方法:
sql="selectsum(字段名)as别名from数据表where条件表达式"
setrs=conn.excute(sql)
用rs("别名")获取统的计值,其它函数运用同上。

(6)复制数据库的表
select * into 新表名 from 要复制的表的表名 where 1=2
要完全复制把where 1=2 去了就可以了
(7)删除某个表的一个列
alter table bankbill drop column zsl
alter table xx alter/add/drop column xx

(8)模糊查询
Sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
查找数据库中前10记录
Sql="select top n * form 数据表 order by newid()"
随机取出数据库中的若干条记录的方法
top n,n就是要取出的记录数
Sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"


上一篇:otis电梯

下一篇:表单元素