一、操作数据库
1.1 创建数据库
create database 数据库库名;
1.2 创建数据库判断是否存在
create database if not exists 数据库的库名;
1.3 创建数据设置编码格式
create database 数据库的名称 character set 编码格式;
1.4 查看数据库创建的格式
show create database 数据库库名;
1.5 查看所有的数据库
show databases;
1.6 修改数据库的编码格式
alter database 数据库库名 character set 编码格式;
1.7 删除数据库
drop database 数据库库名;
二、操作数据库表
2.1 创建表
-
创建表的时候 括号后需要加上英文分号 字段都是使用逗号进行分割 最后字段名不需要编写逗号
-
字段的数据类型的长度 可以不指定 但是一般建议指定其长度
1.语法:
create table 表名(
字段名 数据类型(长度),
字段名 数据类型(长度),
.........
);
2.例子:创建一张表学生表(主键自增id,姓名,性别,年龄,生日)
create table student(
id int(11) primary key auto_increment,
name varchar(20),
sex char(2),
age int(4),
birthday date
);
2.2 修改表名
alter table 原表名 rename to 新表名
2.3 查看数据库中所有的表
show tables;
2.4 删除表
drop table 表名;
2.5 查看表结构
desc 表名;
三、操作字段
3.1 在末尾增加字段
alter table 表名 add 字段名 数据类型(长度);
3.2 在指定的字段后增加
alter table 表名 add 字段名 数据类型(长度) after 已经存在字段名;
3.3 修改字段的数据类型
alter table 表名 modify 字段名 数据类型(长度);
3.4 修改字段名
alter table 表名 change 原字段名 新字段名 数据类型(长度);
3.5 删除字段
alter table 表名 drop 字段名;
四、操作表数据
4.1 插入数据
注意点:
- 插入的数据的值必须与数据库列表中的数据类型一致
- 插入数据值的长度要少于列表定义的长度
- 字符串可以使用单引号以及双引号修饰 时间类型只能使用单引号进行修饰
4.1.1 方式一
insert into 表名 values(数据1,数据2,数据3,...);
4.1.2 方式二(指定字段)
insert into 表名(字段名1,字段名2,字段名3)values(数据1,数据2,数据3);
4.1.3 插入多条数据
insert into 表名 values(数据1,数据2,数据3),(数据1,数据2,数据3);
insert into 表名(列名,列名,列名)values(数据,数据,数据),(数据,数据,数据);
4.2 更新数据(修改)
update 表名 set 字段名=值,字段名=值 where 条件;
4.2 删除数据
4.2.1 delete-不会减少表或索引所占用的空间
delete from 表名 where 条件;
4.2.2 truncate-表和索引所占用的空间会恢复到初始大小
1.语法:
truncate table 表名
2.例子:
TRUNCATE TABLE student
4.3 查询
4.3.1 查询表中所有数据
select * from 表名;
4.3.2 查询指定字段的数据
select 字段名... from 表名
4.3.3 简单运算查询
1.语法:
select 运算 from 表名;
2.运算: + - * /
3.例子:
#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
SELECT price+10 FROM 表名;
4.3.4 根据条件进行查询
符号 | 说明 |
---|---|
not | 非 |
between and | 并且 |
or | 或者 |
素材:
#创建商品表:
CREATE TABLE product(
pid INT PRIMARY KEY,#主键ID
pname VARCHAR(20),#商品名称
price DOUBLE,#商品价格
category_name VARCHAR(32)#商品分类名称
);
INSERT INTO product(pid,pname,price,category_name) VALUES(1,'联想电脑',5000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(2,'海尔电脑',3000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(3,'雷神电脑',5000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(4,'JACK JONES',800,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(5,'真维斯',200,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(6,'花花公子',440,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(7,'劲霸',2000,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(8,'香奈儿',800,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(9,'相宜本草',200,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(10,'面霸',5,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(11,'雪碧',56,'饮料饮品');
INSERT INTO product(pid,pname,price,category_name) VALUES(12,'香飘飘奶茶',1,'饮料饮品');
INSERT INTO product(pid,pname,price,category_name) VALUES(13,'iPhone9',8000,NULL);
语法:
select * from 表名 where 条件;
例子:
#查询product表中所有的电脑办公记录
SELECT * FROM product WHERE category_name ="电脑办公"
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname ="花花公子"
#查询价格为800商品
SELECT * FROM product WHERE price =800;
#查询价格不是800的所有商品
SELECT * FROM product WHERE price !=800;
#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price >60
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price >= 200 && price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800或者2000的所有商品
SELECT * FROM product WHERE price =200 || price =800 || price =2000
SELECT * FROM product WHERE price =200 OR price =800 OR price =2000
SELECT * FROM product WHERE price IN(200,800,2000);
4.3.5 模糊查询
- 模糊查询的关键字 like
- 匹配的符号 %匹配多个 _ 匹配一个
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%'
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%'
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%'
4.3.6 非空查询
- null 不等于 “” null 表示是未插入数据的状态
#商品没有分类的商品
SELECT * FROM product WHERE category_name IS NULL
#查询有分类的商品
SELECT * FROM product WHERE category_name IS NOT NULL
4.3.7 排序
- 关键字: order by
- 升序:asc
- 降序:desc
语法:
select * from 表名 order by 字段名 排序的规则;
例子:
#1.使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC
#2.在价格排序(降序)的基础上
#若价格相同,相同价格的数据以pid降序排序
SELECT * FROM product ORDER BY price DESC,pid DESC
4.3.8 分页查询
select * from 表名 limit ?,?
4.3.9 分组查询
select * from 表名 group by 字段名;
# 统计各个分类下商品的个数
SELECT category_name ,COUNT(1) FROM product GROUP BY category_name
4.3.10 过滤
select * from 表名 group by 列名 having 条件
#一般是与分组进行搭配使用 一般是在分组的后面
#统计各个分类商品的个数,有且 只显示分类名称不为空值的数据
SELECT category_name ,COUNT(1) FROM product GROUP BY category_name
HAVING category_name IS NOT NULL
4.3.11 去重
SELECT DISTINCT 字段名 FROM 表名;
4.3.12 设置别名(as可省略)
SELECT 字段名 AS 别名 FROM 表名 AS 别名;
4.3.13 查询的顺序
select * from 表名 where 条件 group by 条件 having 条件
order by 排序条件 limit(分页)
五、函数
5.1 聚合函数
函数的名称 | 函数的描述 |
---|---|
count(1)(效率最高)或者count(*)或者count(列名) | 总记录数 |
sum(列名) | 总和 |
max(列名) | 最大值 |
min(列名) | 最小值 |
avg(列名) | 平均值 |
#1 查询商品的总条数
SELECT COUNT(1) FROM product
#查看商品总价格、最大价格、最小价格、价格的平均值
SELECT SUM(price) AS "总价格",MAX(price) AS "最大价格",MIN(price) AS "最小价格",
ROUND(AVG(price),2) AS "平均价格" FROM product
#2 查询价格大于200商品的总条数
SELECT COUNT(1) FROM product WHERE price >=200
#3 查询分类为'电脑办公'的所有商品的总记录
SELECT COUNT(1) FROM product p WHERE p.category_name="电脑办公"
#4 查询分类为'服装'所有商品的平均价格
SELECT AVG(price) FROM product p WHERE p.category_name="服装"
5.2 时间函数
SELECT SYSDATE()
SELECT CURDATE()
SELECT CURTIME()
SELECT NOW()
5.3 字符串函数
字符串函数 | 说明 |
---|---|
CONCAT(str1,str2,str…) | 将多个字符串连接 |
INSERT(str,pos.len,newStr) | 将str 中指定pos 位置开始len长度的内容替换为newStr |
LOWER(str) | 将指定字符串转换为小写 |
UPPER(str) | 将指定字符串转换为大写 |
SUBSTRING(str,num len) | 将str字符串指定num位置开始截取len个内容 |
SELECT CONCAT("今天","天气","真不错")
SELECT INSERT("今天中午吃什么",4,3,"去吃饭");
SELECT UPPER("Abc");
SELECT LOWER("Abc");
SELECT SUBSTRING("MySQL从删库到跑路",7,4)
六、约束
6.1主键约束
方式一(建表时)
CREATE TABLE p1(
id INT (11) PRIMARY KEY,
anme VARCHAR(20)
)
方式二(建表后)
注意:建表时未设置主键id的情况下
alter table 表名 add PRIMARY KEY(字段名);
删除主键约束
alter table 表名 drop PRIMARY KEY
6.2 唯一约束
关键字: unique
方式一(建表时)
CREATE TABLE p1(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) UNIQUE
);
方式二
alter table 表名 add CONSTRAINT 唯一约束的名称 unique(字段名)
联合唯一约束
CREATE TABLE p3(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
pwd VARCHAR(20),
UNIQUE(name,pwd)
);
删除唯一约束
alter table 表名 drop index 唯一约束的名称;
6.3 非空约束
关键字: not null
CREATE TABLE p4(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL
);
6.4 默认约束
关键字:default
CREATE TABLE p5(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) DEFAULT '牛牛'
);
INSERT INTO p5(pname)VALUES(DEFAULT);
6.5 外键约束
alter table 从表 add constraint 外键(例:FK_从表_主表) foreign key (从表外键字段) references 主表(主键字段);
七、联合查询
7.1 非等值查询
select * from 表1,表2
7.2 连接查询
7.2.1显示内连接
概念:使用mysql中inner join关键字来进行连接查询 就是显示内连接
select * from 左表 inner join 右表 on 关联的条件
7.2.2 隐式内连接
概念:不使用inner join关键字来进行连接查询 就是隐式内连接
select * from 左表, 右表 where 关联条件
5.5 左外连接
select * from 左表 left join 右表 on 匹配
5.6 右外连接
select * from 左表 right join 右表 on 匹配条件
5.7 子查询
- 概念: 一个查询语句嵌套另一个完成的查询语句
- 两种体现:
- 一个子查询的结果当做另一查询语句条件使用
- 一个查询语句的结果当前另一个查询语句的字段来使用