-
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表所有数据和交集部分数据
-
- 子查询:查询中嵌套查询,称嵌套查询为子查询。