一、数据库基础
1.术语
(1)数据库:DataBase,DB
(2)数据库管理系统:DataBase Management System,DBMS
(3)SQL语言:结构化查询语言(Structured Query Language),定义操作所有关系型数据库的统一标准。
2.关系型数据库
关系型数据库是建立在关系模型基础上的数据库,由多张能互联的二维表组成。
二、SQL语言
1.通用语法
(1)可多行书写,以";"结尾;
(2)不区分大小写,但关键字建议用大写;
(3)注释:
1)单行注释:-- 注释内容 或 #注释内容(这是MySQL特有的)
【注意】--后面必须跟一个空格!
2)多行注释:/* 注释内容 */
2.SQL的分类
(1)DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表、列等);
(2)DML:Data Manipulation Language,数据操作语言,用来对数据库中表的数据进行增删改;
(3)DQL:Data Query Language,数据查询语言,用来查询数据库中表的数据;
(4)DCL:Data Control Language,数据控制语言,用来定义数据库的访问权限和安全级别及创建用户。
3.DDL
(1)DDL操作数据库:
show databases; | 查看所有现有数据库。 |
create database name; | 创建一个名为name的数据库。 |
create database if not exits name; |
创建一个名为name的数据库(判断如果不存在才创建)。 |
drop database name; |
删除一个名为name的数据库。 |
drop database if exits name; |
删除一个名为name的数据库(判断如果存在才删除)。 |
select database(); | 查看当前使用的数据库。 |
use name; | 使用(进入)名为name的数据库。 |
(2)DDL操作表(Set):
1)创建表:
create table t_name( 字段1 数据类型1, 字段2 数据类型2, ... , 字段n 数据类型n )【注意】字段间用","隔开,最后一个就不用加","了。
2)查询表:
show tables; |
查看当前数据库下的所有表的名称。 |
desc name; | 查看表name的表结构。 |
3)修改表alter:
alter table t_name rename to new_name; | 修改t_name表名为新表名new_name。 |
alter table t_name add 列名 数据类型; |
添加列。 |
alter table t_name drop 列名; |
删除列。 |
alter table t_name modify 列名 新数据类型; |
修改某一列的数据类型。 |
alter table t_name change 列名 新列名 新数据类型; | 修改列名及其数据类型。 |
4)删除表:
drop table t_name; | 删除表t_name; |
drop table if exits t_name; |
带判断的删除表操作。 |
4.MySQL中的数据类型
MySQL支持多种数据类型,大致可以分为四类:数值型、浮点型、日期/时间、字符串(字符)类型。
(1)数值型
数据类型 | 大小(bytes) | 说明 |
tinyint | 1 | 相当于byte |
smallint | 2 | 相当于short |
mediumint | 3 |
|
int(integer) | 4 | 相当于int |
bigint | 8 | 相当于long |
(2)浮点型
float | 4 | 单精度浮点数 |
double | 8 | 双精度浮点数 |
decimal |
|
可用来保存具有小数点而且数值确定的数值 |
score double(5,2)这里的总长度指的是整数部分+小数部分,所以是3+2=5。
(3)日期/时间
date | 3 | 日期值,年月日 |
time | 3 | 时间值或持续时间,时分秒 |
year | 1 | 年份 |
datetime | 8 | 日期和时间值,年月日时分秒 |
timestamp | 4 | 日期和时间值 或 时间戳 |
(4)字符串类型(常用的两种)
char | 0-255 | 定长字符串 |
varchar | 0-65535 | 变长字符串 |
②char与varchar的区别:
a. char是定长字符串,给定总长度后无论存储的数据多长,都是固定的等于总长度,小于总长度部分用空格填充;而varchar是变长字符串,存储数据多长就是多长;
b. char浪费空间,节省时间;varchar浪费时间(需要判断存储的数据有多长),节省空间。
5.DML
(1)添加(insert)
insert into 表名(列1,列2) values (值1,值2); | 给指定的列添加数据。 |
insert into 表名 values (值1,值2,...,值n); |
给所有的列添加数据(省略列名即可)。 |
insert into 表名(列1,列2) values (值1,值2),(值11,值22),(值111,值222); |
批量添加。 |
insert into 表名 values (值1,值2,...,值n),(值11,值22,...,值nn),(值111,值222,...,值nnn); |
(2)修改(update)
update 表名 set 列1=值1,列2=值2 where 条件; | 按条件修改表中列1和列2的值。 |
(3)删除(delete)
delete from 表名 where 条件; | 按条件删除表中数据。 |
6.DQL
(1)基础查询
select 字段列表 from 表名; |
查询多个字段的数据,*代表查询所以字段的数据。 |
select * from 表名; |
|
select distinct 字段列表 from 表名; |
查询多个字段的数据,并去除重复数据。 |
select 字段1 as 别名1,字段2 as 别名2 from 表名; |
查询多个字段的数据,并将字段重新命名。 |
(2)条件查询(where)
select 字段列表 from 表名 where 条件列表; |
按条件查询字段的数据。 |
>、<、>=、<= | 大于、小于、大于等于、小于等于 |
= | 等于 |
<>或!= | 不等于 |
between A and B | 大于等于A,小于等于B |
in(A,B,C) | 多选一 |
like 占位符 | 模糊查询 |
is null | 是null |
is not null | 不是null |
and 或 && | 与 |
or 或 || | 或 |
not 或 ! | 非 |
通配符:_,匹配单个任意字符;%,匹配多个(0,1,多都行)任意字符。
用法:查询姓“张”的学生信息:
用法:查询姓“张”的学生信息:
select * from stu where name like "张%";查询第二个字是“花”的学生信息:
select * from stu where name like "_花%";
(3)排序查询(order by)
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2; |
按排序要求查询字段的数据。 |
②当有多个排序条件时,前面的条件值一样时,才会根据第二条件排序,如:查询学生信息,按数学成绩升序排序(第一条件),如果数学成绩一样,再按英语成绩降序排序(第二条件)。
select * from stu order by math,english desc;
(4)分组查询(group by)
1)聚合函数:对一列数据进行计算。
a.聚合函数分类:
count(列名) | 统计数量 |
max(列名) | 求最大值 |
min(列名) | 求最小值 |
sum(列名) | 求和 |
avg(列名) | 求平均值 |
【tips】①使用count(列名)统计数量时,不能选用有null数据的列;
②null不参与所有的聚合函数计算。
b.聚合函数用法:查询数学成绩的最高分:
select max(math) from stu;2)分组查询语法
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]; |
分组查询 |
②where和having的区别:
a.执行时机不同:where用在分组前,满足条件才参与分组;having用在分组后,满足条件才留下。
b.where不能对聚合函数进行判断,而having可以。
③执行顺序:where > 聚合函数 > having。
(5)分页查询(limit)
1)语法:
select 字段列表 from 表名 limit 起始索引,查询条目数; |
分页查询 |
2)MySQL数据库中分页查询用limit,Oracle用rownumber,SQL Server用top。