CH1 RDBMS简介
RDBMS 即关系型数据库管理系统。数据库的优点:冗余度、一致性、共享、标准化、完整性、安全性。
数据库存储形式:层次结构、网状模型、关系模型(表的形式,一对一,一对多,多对多),对象模型。
面向对象:即把一切事物看做对象。
实体:客观存在的相互区别的事物。
关系模型:实体和联系构成。
关系模型数据库有:
一、DB2:IBM提供的付费数据库,企业级用。具有速度快、可靠性好的优点。但是,只有硬件平台选择 了IBM的AS/400,才能选择使用
DB2数据库管理系统。
DB2能在所有主流平台上运行(包括Windows),最适于海量数据。
DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上都用DB2数据库服务器,而国内到1997年约占5%。
二、orcale:收购java,后收购sql,主要大型游戏。
(1)兼容性Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与IBM SQL/DS、DB2、INGRES、 IDMS/R等兼容。
(2)可移植性Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、 中、小型机上;
可VMS、DOS、UNIX、Windows等多种操作系统下工作。
(3)可联结性Oracle能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。
(4)高生产率 Oracle产品提供了多种开发工具,能极大地方便用户进行进一步的开发。
(5)开放性Oracle良好的兼容性、可移植性、可连接性和高生产率使Oracle RDBMS具有良好的开放性。
三、mysql,免费,小型。
(1)MySQL是一个关系数据库管理系统。
(2)MySQL是开源的。
(3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。
(4)MySQL服务器工作在客户/服务器或嵌入系统中。
(5)有大量的MySQL软件可以使用。
四、sql server 微软,性能较mysql好,免费。广泛用于电子商务、银行、保险、电力等与数据库有关的行 业,只能在Windows上运行,
操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很 难处理日益增多的用户数和数据卷,伸缩性有限。
五、acess:本地数据库。
六、sql3:安卓系统用。
SQL即结构化查询语句。分:
DDL:data define language 数据定义语言,库与表的管理。
DQL:data qurey language 数据查询语言,表中数据查询。
DML:data manager language 数据管理语言,表中数据添、删、改。
DCL:data control language 数据控制语言,登录、权限控制。
CH2 管理数据库和表
-- 单行注释
-- 创建一个数据库
CREATE DATABASE data_name;
-- 删除数据库
DROP DATABASE data_name;
-- 连接数据库
USE data_name;
数据类型
整 型 smallint int bigint
字符型 char varchar text
浮 点 float double decimal
日 期 year date datetime
逻 辑 true false
-- 创建表
CREATE TABLE t_name(
id INT,
NAME CHAR,
address VARCHAR(50),
price FLOAT
);
CREATE DATABASE lovo;
USE lovo;
CREATE TABLE t_class(
c_id INT,
c_classname VARCHAR(50),
c_sco VARCHAR(20)
)CHARSET='utf8';
CREATE TABLE t_student(
s_id INT,
s_name VARCHAR(50),
s_age INT,
s_address VARCHAR(50),
s_phone VARCHAR(50),
s_sex VARCHAR(2)
)CHARSET='utf8';
-- 删除列
ALTER TABLE t_student DROP s_phone;
-- 添加列
ALTER TABLE t_student ADD s_phone5 VARCHAR(50);
-- 修改列名称
ALTER TABLE t_student CHANGE s_phone5 s_phone6 VARCHAR(100);
-- 删除表
DROP TABLE t_student;
Archive,Innodb,Myisam myisam引擎不支持外键,innodb引擎支持外键myisam引擎执行速度比innodb引擎快
CH3 DML数据操控语句
INSERT INTO s_student(s_id,s_name,s_address) VALUES(NULL,'王浩','成都市金牛区');
DELETE FROM s_student WHERE s_name LIKE'%h_';
DELETE FROM s_student WHERE s_id>=3;
DELETE FROM s_student WHERE s_id BETWEEN 3 AND 5;
DELETE FROM s_student WHERE s_id IN(3,7);
TRUNCATE TABLE s_student;直接删除整个表中所有数据,后边不能加条件,删除日志,不可恢复,不能删除带有外键的表,效率高。
UPDATE t_student SET s_name='华为' WHERE s_id>=3;
CH4 DQL数据查询语句
SELECT s_name AS 名字 FROM t_student; -- 别名
SELECT DISTINCT s_name FROM t_student;
SELECT YEAR(NOW())-1;-- 年份格式化当前系统时间,或者date,datetime,可加减
SELECT MAX(c_professorid) FROM class;
SELECT AVG(c_professorid) FROM class;
select group_concat (name) from yza group by name; -- 若全为int 要注意转char cast(a as char)
SELECT s_class,COUNT(*)AS xx FROM t_student GROUP BY s_class HAVING xx>3;
顺序 :select from->where->group by->having->order by
-- any 满足其中一个数据就可以
-- all 满足所有的数据才行
-- exists 判断其后面子查询的结果值,若为真,则执行前面的查询,为假则不作任何操作。
--union 连接2个表,列数必须相等,类型可以不一样。
联接 (两个表进行笛卡尔积,表1的每行与表2的每行进行交叉)可以分为内联接和外联接。
SELECT * FROM student,class; 运行图1
内联接
SELECT * FROM student,class WHERE student.fk=class.info; -- student.fk与class.info进行匹配。运行图2。或如下:
SELECT * FROM student INNER JOIN class ON student.fk=class.info; -- INNER可以省略,运行图2,可继续join on。
外联接
A 左外联接
SELECT * FROM student LEFT OUTER JOIN class ON student.fk=class.info;-- outer可以省略,运行图3
B 右外联接
SELECT * FROM student RIGHT OUTER JOIN class ON student.fk=class.info;-- outer可以省略,运行图4
C 全联接
SELECT * FROM student FULL OUTER JOIN class ON student.fk=class.info;-- outer可以省略(不支持mysql)
id name
------ ------------
2 zhang san3
3 345
5 zhang san 表单旋转
6 zhang san
SELECT
MAX(CASE id WHEN 2 THEN NAME ELSE NULL END) AS a1,
MAX(CASE id WHEN 3 THEN NAME ELSE NULL END) AS a2,
MAX(CASE id WHEN 4 THEN NAME ELSE NULL END )AS a3,
MAX(CASE id WHEN 5 THEN NAME ELSE NULL END) AS a4,
MAX(CASE id WHEN 6 THEN NAME ELSE NULL END) AS a5
FROM
person a
a1 a2 a3 a4 a5
---------- ------ ------ --------- -----------
zhang san3 345 (NULL) zhang san zhang san