-
SQL(Structured Query Language): 关系型数据库通用编程语言。
-
登录MySQL:
mysql -uroot -p -
MySQL登录参数:
mysql -u(用户名) -p(密码) -h(要连接的mysql服务器的ip地址-默认为127.0.0.1) -P(端口号-默认3306) -
退出MySQL:
exit或者quit或者\q -
查询MySQL的版本号 :
select version(); -
查看MySQL数据库的安装目录:
select @@basedir as basePath from dual; -
查询当前数据库文件:
show databases; -
单行注释:
-- 注释内容或#注释内容(MySQL独有) -
多行注释:
/* 注释内容 */ -
char 和 varchar :
char(定长字符串) 存储性能高 浪费空间 确定字符串时候用 varchar(变长字符串) 存储性能低 节约空间 不确定字符串长度时用 -
创建表: (最后一行不能有逗号)
ccreate table 表名 (字段名1 数据类型1, 字段名2 数据类型2, ... 字段名n 数据类型n);
DDL(Data Definition Language)数据定义语言:
操作数据库、表等。
- 查询数据库:
show databases; - 新建数据库:
create database 数据库名称; - 新建数据库前判断:
create database if not exists 数据库名称; - 删除数据库:
drop database 数据库名称; - 删除数据库前判断:
drop database if exists 数据库名称 - 使用数据库:
use 数据库名称; - 查看当前使用的数据库:
select database(); - 删除表:
drop table 表名; - 删除表前判断:
drop table if exists 表名; - 修改表名:
alter table 表名 rename to 新的表名; - 添加一列:
alter table 表名 add 列名 数据类型; - 修改数据类型:
alter table 表名 modify 列名 新数据类型; - 修改列名和数据类型:
alter table 表名 change 列名 新列名 新数据类型; - 删除列:
alter table 表名 drop 列名;
DML(Data Manipulation Language)数据操纵语言:
对表中的数据进行增删改。
- 给指定的列添加数据:
insert into 表名(列名1,列名2,...)values(值1,值2,...); - 给全部列添加数据:
insert into 表名 values(值1,值2,...);(给所有列添加数据时,列名的列表可以省略) - 批量添加数据:
insert into 表名(列名1,列名2,...)values(值1,值2,...),(值1,值2,...)...;
insert into 表名 values(值1,值2,...),(值1,值2,...)...; - 修改数据:
update 表名 set 列名1=值1,列名2=值2,...[where 条件];(注意:如果update语句没有加where条件,则会将表中所有数据进行修改!) - 删除数据:
delete form 表名 [where 条件]
DQL(Data Query Language)数据查询语言:
对表中数据进行查询。
- 查询表格:
show tables; - 查询表的结构信息:
desc 表的名称; - 查询表的内容:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定
一、基础查询:
- 查询多个字段:
select 字段列表 from 表名;
select * from 表名;--查询所有数据(不建议使用) - 查询去除重复值的记录:
select distinct 字段列表 from 表名; - 起别名:
as: as也可省略
二、条件查询:
select 字段列表 from 表名 where 条件列表;(举例:select * from stu where age >= 20 and age<=30;)- null 值的比较不能用
= null和!=null,需要使用is null和is not null。
三、模糊查询(like)
- 通配符:
_匹配单个字符,%匹配多个字符。
排序查询(order by):
select 字段列表 from 表名 oder by 排序字段名1 [排序方式1], 排序字段名2 [排序方式2]...;- ASC:升序排列(默认),
- DESC:降序排序。
四、聚合函数
- 聚合函数分类: (null值不参与聚合函数的运算)
count 统计数量:select count(id) from stu;(count 统计的列名不能为null)
max 最大值:SELECT max(math) FROM stu;
min 最小值
sum 求和
avg 平均值 - 聚合函数语法:
select 聚合函数名(列名) from 表名;
五、分组查询(group by)
- 分组查询语法:
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]
查询男生/女生的数学平均分:SELECT sex, avg(math) from stu GROUP BY sex;
查询男生/女生的数学平均分以及各自人数:SELECT sex, AVG(math), count(*) from stu GROUP BY sex;
查询男生/女生的数学平均分以及各自人数(分数低于70的不参与分组):
SELECT sex,AVG(math),COUNT(*) FROM stu where math>70 GROUP BY sex;
查询男生/女生的数学平均分以及各自人数(分数低于70的不参与分组,且分组之后人数要大于2):
SELECT sex,AVG(math),COUNT(*) FROM stu where math>70 GROUP BY sex HAVING count(*)>2;
where 和 having 的区别:- 执行时机不一样: where是分组前的限定,不满足where条件的不参与分组。having是对分组后的结果进行筛选。
- 可判断的条件不同: where 不能对聚合函数进行判断,having可以。
- 执行顺序: where > 聚合函数 > having。
六、分页查询(limit)
- 分页查询语法:
select 字段列表 from 表名 limit 起始索引,查询条目数;
每页显示三条数据,查询第一页数据(从0开始查询,查询3条数据):SELECT * from stu limit 0,3;
DCL(Data Control Language)数据控制语言:
对数据库进行权限控制。
TCL(Transaction Control Language)事务控制语言:
约束
约束类型:
| 约束名 | 描述 | 关键字 |
|---|---|---|
| 非空约束 | 保证列中所有数据不能null值。 | NOT NULL |
| 唯一约束 | 要求该列唯一,允许为空,但只能出现一个空值。 | UNIQUE |
| 主键约束 | 主键是一行数据的唯一标识,要求非空且唯一。 | PRIMARY KEY |
| 检查约束 | 某列取值范围限制、格式限制等。 | CHECK |
| 默认约束 | 某列的默认值。 | DEFAULT |
| 外键约束 | 用于在两表之间建立关系,需要指定引用主表的哪一列。 | FOREIGN KEY |
-
案例:
sqlDROP TABLE IF EXISTS emp; -- 员工表 CREATE TABLE emp( id INT PRIMARY KEY auto_increament, -- 员工ID,主键且自增长 ename VARCHAR(50) Not NULL UNIQUE, -- 员工姓名,非空并且唯一 joindate DATE NOT NULL, -- 入职日期,非空 salary DOUBLE(7,2) NOT NULL, -- 工资,非空 bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0 ); -
外键约束:
sql-- 创建表时添加外键约束 CREATE TABLE 表名( 列名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) );sql-- 建完表后添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);sql-- 删除约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
多表查询
- 连接查询
-
内连接查询 :相当于查询AB交集数据
sql-- 隐式内连接 SELECT 字段列表 FROM 表1,表2... WHERE 条件; -- 显示内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件; -
外连接查询
- 左外连接查询 :相当于查询A表所有数据和交集部门数据
- 右外连接查询 : 相当于查询B表所有数据和交集部分数据
-
- 子查询:查询中嵌套查询,称嵌套查询为子查询。