1 MySQL简介
1.1 mysql 是什么
1.2 创建数据库和创建表
🔴创建数据库
SHOW DATABASES
查看所有数据库
CREATE DATABASE study
创建一个新的数据库 名为study
DROP DATABASE study
删除 study数据库
USE study
使用(调用) study数据库
1.3 如何了解一张表? show create table
🔴创建表
CREATE TABLE 表名称 (
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型, … )
CREATE TABLE source_from (
sect CHAR ( 100 ) COMMENT '门派名称',
kongfu CHAR ( 100 ) COMMENT '绝技',
location CHAR ( 100 ) COMMENT '地理位置'
)
comment是描述
SELECT * FROM source_from
查询表source_from
DROP TABLE source_from
删除表 source_from
1.4 SQL约束
•NOT NULL 非空约束
•UNIQUE 唯一键
•PRIMARY KEY 主键(唯一值、非空、每个表有且仅有一个)
•CHECK 检查审核
•DEFAULT 默认值
CREATE TABLE source_from(
sect char(100) COMMENT '门派名称' NOT NULL,
kongfu char(100) COMMENT '绝技' NOT NULL DEFAULT '无'
location char(100) COMMENT '地理位置',
size INT ( 9 ) COMMENT '大小' CHECK ( size > 0 ),
PRIMARY KEY (sect)
)
SELECT * FROM source_from
查询表
SHOW CREATE TABLE source_from
查看表的限制 会告诉每个字段是什么意思
1.5 插入和更改
INSERT INTO 表名称 VALUES (值1, 值2,....)
对表格中所有字段进行插入
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
只对表中某些字段进行插入
-- 完全插入
INSERT INTO source_from VALUES ("全真教", "先天功","陕西",9)
-- 不完全插入
INSERT INTO source_from (sect,size) VALUES ("丐帮",6)
ALTER TABLE table_name ADD column_name datatype
更改表,增加某字段(列)
ALTER TABLE table_name DROP COLUMN column_name
更改表,删除某字段
-- 修改 source_from表 增加上 host 字段
ALTER TABLE source_from ADD host char(10)
-- 修改 source_from表 删除 host 字段
ALTER TABLE source_from DROP COLUMN host
2 基本查询语句
Select 你要找的信息(字段)是什么? 用逗号隔开(英)
From 你要从哪儿(哪个表)找?
Where 满足什么条件?
Limit 限制查多少行
比如select * from swordsman
查找所有信息 *代表所有
select 姓名,武力值,智力值,生日 from swordsman
只查找表中的某些信息
select 姓名,武力值,智力值,生日 --查询的字段
from swordsman --从swordsman表
where 武力值>80 or 智力值>60 --条件
limit 5 --只显示前两行
3 交叉查询和子查询
- group by
- 聚合函数 sum、count、avg
- 子查询 in ,not in
- 简单匹配 like,not like
排序查询
语法: order by 子句
order by 排序字段1 排序方式1,排序字段2 排序方式2…
排序方式:
asc: 升序 默认
desc: 降序
注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二个条件
交叉查询
group by 分组
as 命名新生成的字段
聚合函数:
count 计数
sum 求和
avg 求平均
order by 排序 从小到大 若加上 desc 从大到小
案例:对门派进行分组 并统计数量 并给此字段命名为 人数
比如 丐帮 4 表示丐帮人数出现4次
as 可以省略
select 门派,count(*) as人数,sum(武力值) 武力值之和,avg(智力值)智力值平均水平
from swordsman
group by 门派
order by 人数 desc -- 排序 dese表示从多到少,去掉则从少到多
子查询
in 查询某条件在一定候选集范围内的记录
Not in 查询某条件不在一定候选集范围内的记录
select 姓名,武力值,智力值
from swordsman
where 姓名 in ("黄蓉","黄药师")
分组查询
- 语法:group by 分组字段;
- 注意:
- 分组之后查询的字段: 分组字段、聚合函数
- where 和 having 的区别?
- where 在分组之前进行限定,如果不满足条件,不参与分组。having 在分组之后进行限定,如果不满足条件,则不会被查询出来
- where 后不可以跟聚合函数,having 可以进行聚合函数的判断
案例: 按照性别分组,分别查询男女同学的平均分、人数,要求:分数低于70分的人,不参与分组,分组之后,人数要大于2人
SELECT sex , AVG(math),COUNT(id) as 人数 --分组字段、聚合函数
FROM student
WHERE math > 70 -- 查询条件
GROUP BY sex -- 分组字段
HAVING 人数 > 2;
.
简单匹配
like
模糊简单匹配 ,像什么一样的记录;
% :匹配任意数量的任意字符
_ :匹配一个任意字符
select 姓名,武力值,智力值
from swordsman
where 姓名 in ("黄蓉","黄药师")
select 姓名,武力值,智力值
from swordsman
where 姓名 like "黄_"
not like
模糊简单匹配 ,不像什么一样的记录
4 连表查询
- 内连接
- 左联接
- 右连接
注意:连表查询时一定不要忘记连表条件,否则会出现笛卡尔集的现象
比如a,b表分别有100条、100条记录,如果出现笛卡尔集 则会显示出100×100即10000条记录,压力大
4.1 内连接
Select A.字段,B.字段
From A表 inner join B表 on A.关联字段=B.关联字段
两个表都有的才会出现
select a.姓名,a.武力值,a.智力值,a.门派,b.location,b.kongfu,b.size
from swordsman as a inner join source_from b on a.门派=b.sect
内连接也可以写为:
select a.姓名,a.武力值,a.智力值,a.门派,b.location,b.kongfu,b.size
from swordsman as a , source_from b
where a.门派=b.sect
4.2 右连接
Select A.字段,B.字段
From A表 right join B表 on A.关联字段=B.关联字段
4.3 左连接
Select A.字段,B.字段
From A表 left join B表 on A.关联字段=B.关联字段