day08:数据库数据类型、DDL-对表的操作、 DML(insert ,delete,update、单表查询(运算、模糊、分页、分组、排序、非空,过滤、去重、查询顺序(glh非空ol)),函数,约束
一 回顾
1.Bootstrap A.概念 :Bootstrap 是一个前端的框架 B.好处 :A. 支持响应式布局 B. 提供许多 css 的样式 以及组件 js 的插件 C.基本使用的步骤 : A. 下载相关的资料 B.copy 三个文件夹到当前项目中 C. 在页面中进行引入 D.响应式布局 : 概念:同一套 html 代码 能够兼容不同分辨率的设备 实现:依赖于栅格布局 每一行占 12 个格子 步骤: A.定义容器 B. 定义行 C. 定义元素 E.按钮 表格 表单 图片 轮播图 导航栏 分页 2. 数据库 A.概念 : 用于来存储数据的仓库 B.分类 : 关系型数据库 与非关系型数据库 C.数据库管理员通过数据库管理系统来维护管理数据库 D.mysql数据库 是一个关系型数据库 轻量级 体积小 使用方便 E.sql 语句的分类 : DDL 主要用于操作数据库以及数据库表 DML 主要用于操作数据库表中的数据 增加 删除 修改 DQL 主要用于操作数据库表中的数据 查询 DCL 主要用于权限管理 以及用于管理 3.DDL - 操作数据库 创建数据库 create database 数据库库名 删除数据库 drop database 数据库名 查看所有的数据库 show databases 查看数据创建的状态 show create database 数据库库名
二 DDL-操作表
2.1 数据库与数据库表之间的关系
A. 数据库中可以有多个数据表 一张表在唯一的数据库中(一对多关系)
2.2 mysql 数据库中常见的数据类型
2.2.1 字符类型

2.2.2 数值类型

2.2.3 时间类型

2.3 DDL-对表的操作
2.3.1 创建表
1. 语法 : create table 表名 ( 列名 数据类型(长度 ), 列名 数据类型(长度 ), 列名 数据类型(长度 ) , 列名 数据类型(长度 ) ......... ); 2. 例子:创建一张表学生表 sid sname sex sage sbirthday date create table student( sid int(11), sname varchar(20), sex char(2), sage int(4), sbirthday date ); 3. 注意点 : A. 创建表的时候 括号后需要加上英文分号 列都是使用逗号进行分割 最后列名不需要编写逗号 B. 列的数据类型的长度 可以不指定 但是一般建议指定其长度

2.3.3 修改表名
1.语法: alter table 原表名 rename to 新表名

2.3.4 查看数据库中所有的表
1. 语法 : show tables;

2.3.5 删除表
1.语法: drop table 表名

2.3.6 查看表结构
1. 语法 :desc 表名

2.4 对列的操作
2.4.1 在末尾增加列
1. 语法 : alter table 表名 add 列名 数据类型 ( 长度 )

2.4.2 在指定的列后增加
1. 语法 : alter table 表名 add 列名 数据类型 ( 长度 ) after 已经存在的列名
2.4.4 修改列名
1.语法: alter table 表名 change 原列名 新列名 数据类型(长度)
2.4.5 删除列
1.语法:alter table 表名 drop 列名

2.5 可视化工具
1. 常用的可视化工具 网页版可视化工具 navicte( 收费 ) sqlyarn( 不收费 )
2.6 使用sqlyarn
step01 解压压缩包 
step02 双击exe文件

step03 进入主界面

step04 主界面

2.7 DML
2.7.1 素材
#创建数据库
CREATE DATABASE day08db;
#切入到数据库
USE day08db
#创建数据库表
CREATE TABLE student(sid INT(11),sname VARCHAR(20),spwd VARCHAR(20),sbrithday DATE
);
2.7.2 增加数据
2.7.2.1 第一种方式
1 . 语法 : insert into 表名 values ( 数据 1, 数据 2, 数据 3); 2 . 例子: INSERT INTO student VALUES ( 1 , "文静 " , "123456" , '2018-11-20' ); 3 . 注意点 :A. 必修插入所有列的数据
2.7.2.2 第二种方式 指定列名插入
1 . 语法 : insert into 表名 ( 列名 , 列名,列名 ) values ( 数据 , 数据,数据 ); 2 . 例子 : INSERT INTO student(sid,spwd,sbrithday) VALUES ( 2 , "123" , '2019-11-23' )
2.7.2.3 插入多条数据
1 . 语法 : insert into 表名 values ( 数据 1, 数据 2, 数据 3),( 数据 1 ,数据 2 ,数据 3) insert into 表名 ( 列名 , 列名,列名 ) values ( 数据 , 数据,数据 ),( 数据 , 数据,数据 ); 2 . 例子: INSERT INTO student(sid,spwd,sbrithday) VALUES ( 3 , "122" , '2019-10-23' ), ( 4 , "345" , '2019-10-23' ) INSERT INTO student VALUES ( 5 , "json " , "123456" , '2018-11-20' ),( 6 , "哈哈 " , "123456" , '2018-11-20' )
2.7.2.4 注意点
A. 插入的数据的值必须与数据库列表中的数据类型一致 B. 插入数据值的长度要少于列表定义的长度 C. 字符串可以使用单引号以及双引号修饰 时间类型只能使用单引号进行修饰
2.7.3 修改数据
1. 语法 :update 表名 set 列名 = 值 , 列名 = 值 where 条件 2. 例子 : UPDATE student SET sname ="毛哥 " ,spwd="123" WHERE sid =1; 3. 注意点 : 执行修改的操作的时候 需要根据条件来进行修改
2.7.4 删除数据
2.7.4.1 第一种写法1. 语法 :delete from 表名 where 条件 2. 例子: DELETE FROM student WHERE sid=1;2.7.4.2 第二种写法
1. 语法 : truncate table 表名 2. TRUNCATE TABLE student
2.7.4.3 区别
A.TRUNCATE 删除数据 并且删除表的结构 ( 从 1 开始 ) delete 只能删除数据 B.TRUNCATE 删除整个表中的数据 delete 一行一行的删除 效率低
2.8 单表查询
2.8.1 素材
#创建商品表:
CREATE TABLE product(pid INT PRIMARY KEY,#主键IDpname 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);
2.8.2 表结构
案例
①:SELECT * FROM product ORDER BY price DESC,pid DESC;//用逗号分隔
②:SELECT * FROM emp WHERE ENAME LIKE 'A%' OR ENAME LIKE 'B%' OR ENAME LIKE "S%"
错误示范:SELECT * FROM emp WHERE ENAME LIKE 'A%' OR LIKE 'B%' OR LIKE "S%"
#查询product表中所有记录
SELECT * FROM product;
#查询product表中pid和pname字段
SELECT pid,pname FROM product;
#查询product表中所有的电脑办公记录
SELECT * FROM product WHERE category_name = "电脑办公";
#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
SELECT price+10 FROM product;
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname = "花花公子";
#查询价格为800商品
SELECT * FROM product WHERE price = 800;
#查询价格不是800的所有商品
SELECT * FROM product WHERE price !=800;
SELECT * FROM product WHERE NOT 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 OR price =800 OR price=2000;
SELECT * FROM product WHERE price=200 || price=800 || price = 2000;
SELECT * FROM product WHERE price IN (200,800,2000)
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';
#商品没有分类的商品
SELECT * FROM product WHERE category_name IS NULL;
#查询有分类的商品
SELECT * FROM product WHERE category_name IS NOT NULL;
#1.使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC;
SELECT * FROM product ORDER BY price ASC;
#2.在价格排序(降序)的基础上 若价格相同,相同价格的数据以pid降序排序
SELECT * FROM product ORDER BY price DESC,pid DESC;//用逗号分隔
#查询第一条与第二条数据
SELECT * FROM product LIMIT 0,2;
#查询出第三条与第四条数据
SELECT * FROM product LIMIT 2,2;
#查询出第五条与第六条数据
SELECT * FROM product LIMIT 4,2;#分组函数
SELECT * FROM product;
SELECT * FROM product GROUP BY category_name;
SELECT category_name,COUNT(1) FROM product GROUP BY category_name;#过滤
SELECT category_name,COUNT(1) FROM product GROUP BY category_name;
SELECT category_name,COUNT(1) FROM product GROUP BY category_name HAVING category_name IS NOT NULL;#去重(列值)
SELECT * FROM product;
SELECT DISTINCT category_name FROM product;#设置别名
SELECT p.pname, price+10 AS "价格+10" FROM product AS p ;#查询顺序
SELECT * FROM product;
SELECT category_name ,COUNT(1) AS n FROM product GROUP BY category_name LIKE "%品%" HAVING category_name IS NOT NULL ORDER BY n ASC LIMIT 0,1;# 聚合函数
#1 查询商品的总条数
SELECT * FROM product;
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 WHERE category_name = "电脑办公";
#4 查询分类为'服装'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_name = "服装";#时间函数
SELECT SYSDATE();
SELECT CURDATE();
SELECT CURTIME();
SELECT NOW();#字符串函数
SELECT CONCAT("春天","到了","清明");
SELECT INSERT("123456789",4,3,"叽叽叽叽");
SELECT LOWER("aBc");
SELECT UPPER("ABc");
SELECT SUBSTRING("123456",5,2);#主键创建第一种方式
CREATE TABLE p1(pid INT(10) PRIMARY KEY,pname VARCHAR(10)
);
SELECT * FROM p1#删除主键
ALTER TABLE p1 DROP PRIMARY KEY;#主键创建第二种方式
ALTER TABLE p1 ADD PRIMARY KEY(pid);#自增长auto_increment
CREATE TABLE p2(pid INT(10) PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(20)
);
SELECT * FROM p2;
INSERT INTO p2(pname) VALUES("李家森"),("文静"),("春天");
2.8.3 全查(查询表中所有的数据)
1.语法: select * from 表名
2.例子:#查询product表中所有记录SELECT * FROM product
2.8.4 查询表中指定列的数据
1.语法:select 列名,列名,列名 from 表达
2.例子:#查询product表中pid和pname字段SELECT pid, pname FROM product
2.8.5 简单运算查询
1.语法: select 运算 from 表名
2.运算: + - * /
3.例子:#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.SELECT price+10 FROM product
2.8.6 根据条件进行查询
| 符号 | 说明 |
|---|---|
| not | 非 |
| between and | 并且 |
| or | 或者 |
1.语法: select * from 表名 where 条件
2.例子:#查询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;
select * from product where not 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);
2.8.7 模糊查询
1.模糊查询的关键字 like
2.匹配的符号 % 匹配多个 _ 匹配一个
3.例子:#查询含有'霸'字的所有商品SELECT * FROM product WHERE pname LIKE '%霸%'#查询以'香'开头的所有商品SELECT * FROM product WHERE pname LIKE '香%'#查询第二个字为'想'的所有商品SELECT * FROM product WHERE pname LIKE '_想%'
2.8.8 非空查询 is not null is null
1.null 不等于 "" null 表示是未插入数据的状态
2.例子:#商品没有分类的商品SELECT * FROM product WHERE category_name IS NULL#查询有分类的商品SELECT * FROM product WHERE category_name IS NOT NUL
2.8.9 排序
1.关键字: order by 升序 asc 降序 desc
2.语法: select * from 表名 order by 列名 排序的规则
3.例子:#1.使用价格排序(降序)SELECT * FROM product ORDER BY price DESC #2.在价格排序(降序)的基础上#若价格相同,相同价格的数据以pid降序排序SELECT * FROM product ORDER BY price DESC,pid DESC
2.8.9.1 分页查询
1.关键字 limit ?,? 第一个参数表示的是数据库的索引 第二个参数表示的是页量(每页显示数据的数量)数据库索引是从0开始
2.语法: select * from 表名 limit ?,?
3.案例#查询第一条与第二条数据SELECT * FROM product LIMIT 0,2 //第一页 每页显示两条数据 1#查询出第三条与第四条数据SELECT * FROM product LIMIT 2,2 //第二页 2#查询出第五条与第六条数据SELECT * FROM product LIMIT 4,2 //第三页 3#转换的规则 (当前页-1)*页量
2.8.9.2 分组查询
①:分组-聚合:分组函数一般与(分组名,count(1))连用
②:分组-过滤
1.分组:group by
2.语法: select * from 表名 group by 列名
3.例子:# 统计各个分类下商品的个数SELECT category_name ,COUNT(1) FROM product GROUP BY category_name#分组函数
SELECT * FROM product;
SELECT * FROM product GROUP BY category_name;
SELECT category_name,COUNT(1) FROM product GROUP BY category_name;
2.8.9.3 过滤
1.过滤: having
2.一般是与分组进行搭配使用 一般是在分组的后面
3.语法:select * from 表名 group by 列名 having 条件
4.例子:#统计各个分类商品的个数,有且 只显示分类名称不为空值的数据SELECT category_name ,COUNT(1) FROM product GROUP BY category_nameHAVING category_name IS NOT NULL
2.8.9.4 去重(列值)
1.关键字: DISTINCT
2.案例#查询出价格SELECT DISTINCT price FROM product
2.8.9.5 设置别名
1.关键字 as
2.设置别名 可以给表设置别名 也可以给列设置别名 设置别名as 关键字是以省略
3.案例SELECT p.pname ,price+10 AS "运算后的价格" FROM product AS p
2.8.9.6 查询的顺序
①:group by->like->having->order by->limit
1.查询语句的顺序:select * from 表名 where 条件 group by 条件 + having 条件order by 排序条件 + limit(分页)
2.例子:SELECT category_name ,COUNT(1) AS n FROM product WHERE category_name LIKE '%品%' GROUP BY category_nameHAVING category_name IS NOT NULL ORDER BY n ASC LIMIT 0,1
2.9 mysql中的函数
2.9.1 聚合函数
| 函数的名称 | 函数的描述 |
|---|---|
| count(1)(效率最高)或者count(*)或者count(列名) | 总记录数 |
| sum(列名) | 总和 |
| max(列名) | 最大值 |
| min(列名) | 最小值 |
| avg(列名) | 平均值 |
# 聚合函数
#1 查询商品的总条数
SELECT * FROM product;
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 WHERE category_name = "电脑办公";
#4 查询分类为'服装'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_name = "服装";
2.9.2 时间的函数

#时间函数
SELECT SYSDATE();
SELECT CURDATE();
SELECT CURTIME();
SELECT NOW();
2.9.3字符串函数

#字符串函数
select concat("春天","到了","清明");
select insert("123456789",4,3,"叽叽叽叽");
select lower("aBc");
select upper("ABc");
select substring("123456",5,2);
三 约束
3.1 约束概念
1.概念:
在设计表中给指定列在约束条件 可以用于限制指定列的数据 保证数据的正确性以及完整性,避免出现大量的重复的数据
2.五大约束
主键约束 primary key
唯一约束 unique
外键约束 foreign key
非空约束 not null
默认约束 default
3.2 主键约束
1.关键字:primary key
2.特点: 唯一 不能为空 一张表中只能有一个主键
3.主键约束设置两种方式 A.创建表的时候设置 B.在表创建完成之后设置
第一种方式 创建表的时候设置
CREATE TABLE p1(pid INT (11) PRIMARY KEY,panme VARCHAR(20))
第二种方式 在创建表完成之后设置
CREATE TABLE p2(pid INT(11),pname VARCHAR(20));#添加主键约束语法:alter table 表名 add PRIMARY KEY(列名)例子:ALTER TABLE p2 ADD PRIMARY KEY(pid)#删除主键约束alter table 表名 drop PRIMARY KEY例子:ALTER TABLE p2 DROP PRIMARY KEY
验证主键约束的特点

自增长策略
1. 关键字 auto_increment 2. 特点: A.只能针对与整数 B.自增长的波长是 1 C.一般是与主键进行搭配使用 D.设置自增长之后 改列不需要再插入数据
#自增长auto_increment
create table p2(pid int(10) primary key auto_increment,pname varchar(20)
);
select * from p2;
insert into p2(pname) values("李家森"),("文静"),("春天");
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!


