数据库和 SQL 概念
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它的产生距今已有六十多年。随着信息技术和市场的发展,数据库变得无处不在:它在电子商务、银行系统等众多领域都被广泛使用,且成为其系统的重要组成部分。
数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增、删、改、查等操作。
结构化查询语言(Structured Query Language)简称 SQL,是上世纪 70 年代由 IBM 公司开发,用于对数据库进行操作的语言。更详细地说,SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
MySQL 介绍
MySQL 是一个 DBMS(数据库管理系统),由瑞典 MySQLAB 公司开发,目前属于 Oracle 公司,MySQL 是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都选择 MySQL 作为网站数据库。MySQL 使用 SQL 语言进行操作。
基础SQL语句
# 查看数据库——ALL
show databases;
# 连接数据库
use <数据库名>;
# 查看表——ALL
show tables;
# 退出
quit (or) exit
数据类型
- CHAR 和 VARCHAR 的区别: CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc",对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。
- ENUM和SET的区别: ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。
- 参考
表操作
数据表(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,'李四','男');
- 注意列名与值的一一对应关系
- VARCHAR,TEXT,DATE,TIME,ENUM、CHAR 等类型的数据需要单引号修饰,而 INT,FLOAT,DOUBLE 等则不需要
SELECT语句
SELECT <要查询的列名> FROM <表名字> WHERE <限制条件>;
select name,age from CSDN_table;
# 查询一个表的所有内容
select * from CSDN_table;
- 星号** * 代替<要查询的列名>**表示要查询列表中的所有列
- where语句不添加,代表不做任何限制,即非条件查询方式
where条件查询
SELECT 语句常常会有 WHERE 限制条件,用于达到更加精确的查询。
- WHERE限制条件可以有数学符号 (=,<,>,>=,<=)
- WHERE 限制条件可以是逻辑关系AND OR !
- IN 和 NOT IN ,用于筛选“在”或“不在”某个范围内的结果
- is [ not ] NULL,用于判断表达式的值是否为空。(NULL是不确定的数,不能使用=与 !=判定)
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 '欧阳_'
字符转义:
当我们需要查找的目标中包含 _ 或者 % 时,需要将其转意后使用。
- \
- escape 自定义字符作为转义字符
select * from Student where Sname like 'Sim%\_';
# or
select * from Student where Sname like ‘Sim%!_%’ escape '!';
ORDER BY排序
为了使查询结果看起来更顺眼,我们可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。
- 默认情况下,ORDER BY 的结果是升序排列
- 而使用关键词 ASC 和 DESC 可指定升序或降序排列
select * from CSDN_table order by Sno DESC;
GROUP BY分组
本节请参考静风铃博客,作着写的很好。
SQL内置函数
函数名 | 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 条件;