数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它的产生距今已有六十多年。随着信息技术和市场的发展,数据库变得无处不在:它在电子商务、银行系统等众多领域都被广泛使用,且成为其系统的重要组成部分。
数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增、删、改、查等操作。
结构化查询语言(Structured Query Language)简称 SQL,是上世纪 70 年代由 IBM 公司开发,用于对数据库进行操作的语言。更详细地说,SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
MySQL 是一个 DBMS(数据库管理系统),由瑞典 MySQLAB 公司开发,目前属于 Oracle 公司,MySQL 是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都选择 MySQL 作为网站数据库。MySQL 使用 SQL 语言进行操作。
# 查看数据库——ALL
show databases;
# 连接数据库
use <数据库名>;
# 查看表——ALL
show tables;
# 退出
quit (or) exit
数据表(table)简称表,它是数据库最重要的组成部分之一。数据库只是一个框架,表才是实质内容。而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被联接起来,才成为可以交叉查阅、一目了然的数据库。
语句格式
CREATE TABLE <表的名字>
(
列名a 数据类型(数据长度),
列名b 数据类型(数据长度),
列名c 数据类型(数据长度)
);
create table CSDN_table(id int,name varchar(12),sex varchar(12));
# or
create table CSDN_table
(
id int,
name varchar(12),
sex varchar(12)
);
语句格式
INSERT INTO <表的名字>(列名a,列名b,列名c) VALUES(值1,值2,值3);
insert into CSDN_table(id,name,sex) values(1,'李四','男');
# or
insert into CSDN_table values(1,'李四','男');
SELECT <要查询的列名> FROM <表名字> WHERE <限制条件>;
select name,age from CSDN_table;
# 查询一个表的所有内容
select * from CSDN_table;
SELECT 语句常常会有 WHERE 限制条件,用于达到更加精确的查询。
select name from CSDN_table where name='傻小二';
# or
select name,age from CSDN_table where age>15 and age<=30;
# or
select name,age from CSDN_table where age>20 or age<=30;
# or
# 查询CSDN_table表中年龄是20或30的人
select name,age from CSDN_table where age in(20,30);
# 查询CSDN_table中不叫张三的人的信息
select name,age from CSDN_table where name not in('张三');
select name,age from CSDN_table where age is NULL;
关键字 LIKE 可用于实现模糊查询,常见于搜索功能中。和 LIKE 联用的通常还有通配符,代表未知字符。SQL中的通配符是 _ 和 % 。其中
[NOT] LIKE 条件
# 使用%通配符来查找所有刘姓学生信息
select Sname,Sno,Ssex from Student where Sname like '刘%';
# 使用_通配符来查找姓欧阳全名三字的学生
select Sname,Sno,Ssex from Student where Sname like '欧阳_'
字符转义:
当我们需要查找的目标中包含 _ 或者 % 时,需要将其转意后使用。
select * from Student where Sname like 'Sim%\_';
# or
select * from Student where Sname like ‘Sim%!_%’ escape '!';
为了使查询结果看起来更顺眼,我们可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。
select * from CSDN_table order by Sno DESC;
本节请参考静风铃博客,作着写的很好。
函数名 | COUNT | SUM | AVG | MAX | MIN |
---|---|---|---|---|---|
作用: | 计数 | 求和 | 求平均值 | 最大值 | 最小值 |
其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。
内置函数([DISTINCT|ALL] <列名>)
# 计算出课号为2的课程中Grade的最大、最小值, AS 关键词可以给值重命名
select max(grade) as max_G from Student_Grade where Sno=2;
# 可以混合使用内置函数
select max(grade) as max_G,min(grade) as min from Student_Grade;
有时候必须处理多个表上的信息才能获得所需的信息,所以有时需要操作多个表。
例如:想要知道名为 “Tom” 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在 project 表中。
# 上面代码包含两个 SELECT 语句,第二个 SELECT 语句将返回一个集合的数据形式,然后被第一个 SELECT 语句用 in 进行判断。
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt
HAVING of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');
HAVING 关键字可以的作用和 WHERE 是一样的,都是说明接下来要进行条件筛选操作,区别在于 HAVING 用于对分组后的数据进行筛选。
在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。 连接的基本思想是把两个或多个表当作一个新的表来操作。
参考
# 删除数据库
drop database <数据库名>
# 删除一张表
drop table <表名>
rename table原名 to 新名字;
ALTER TABLE 原名 RENAME 新名;
ALTER TABLE 原名 RENAME TO 新名;
ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;
ALTER TABLE 表名字 ADD 列名字 数据类型 约束;
新增加的列,被默认放置在表的最右边。如果要把增加的列插入在指定位置,则需要在语句的最后使用AFTER关键词(“AFTER <指定列名>” 表示新增的列被放置在 “指定列” 的后面)。如果想放在第一列的位置,则使用 FIRST 关键词。
ALTER TABLE 表名字 DROP COLUMN 列名字;
# or
ALTER TABLE 表名字 DROP 列名字;
ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;
此语句其实不只可用于重命名一列,准确地说,它是对一个列做修改(CHANGE)
这条重命名语句后面的 “数据类型” 不能省略,否则重命名失败。
当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。
要修改一列的数据类型,除了使用刚才的 CHANGE 语句外,还可以用这样的 MODIFY 语句:
ALTER TABLE 表名字 MODIFY 列名字 新数据类型;
UPDATE 表名字 SET 列名字=值1,列名字=值2 WHERE 条件;
一定要有 WHERE 条件,否则会出现你不想看到的后果。
删除表中的一行数据,也必须加上 WHERE 条件,否则整列的数据都会被删除。
DELETE FROM 表名字 WHERE 条件;