IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第三章 模糊查询与分组查询(一) -> 正文阅读

[大数据]第三章 模糊查询与分组查询(一)

1. 练习

#创建表并加约束
create table category(
	categoryId int primary key,
	categoryName varchar(20) not null
)

create table good(
	goodId int primary key auto_increment,
	goodName varchar(10) not null,
	price decimal(5,2),
	produceDate date not null,
	address varchar(20) default '郑州',
	categoryId int,
	constraint foreign_key foreign key (categoryId) references category(categoryId)
)

#插入数据
insert into category(categoryId,categoryName)
value 
(1001,'食品'),
(1002,'日用'),
(1003,'洗漱')

insert into good(goodName,price,produceDate,categoryId)
value
('面',10.5,'2022-7-13',1001),
('米',15.5,'2022-7-14',1001),
('馒头',1.5,'2022-7-13',1001),
('扫帚',5.5,'2022-7-15',1002),
('盆',10.5,'2022-6-13',1003),
('肥皂',6.5,'2022-7-10',1003)

#查询
SELECT * from good;
select categoryId,categoryName from category

2. 数据定义语言(DDL)

? ? ? ? 主要是用来修改数据结构用的,增加/减少/修改 字段(属性)? 添加各种约束

#添加新的字段

alter table 表名 add 列名<类型>;

#添加新的字段 位置在第一列

alter table 表名 add 列名<类型> first;

#将列名1添加到列名2的后面

alter table 表名 add 列名1<类型> after 列名2;

#修改字段名和类型

alter table 表名 change column? <旧列名> <新列名> <新列类型>;

#修改列名的类型

alter table 表名 modify <列名><类型>;

#删除列

alter table 表名 drop <列名>;

#给表重命名

alter table 表名 rename <新表名>

#设置字符集

alter table 表名 character set <字符集名>;

#移动列的位置? 将列名a移动到列名b的后边

alter table 表名 modify <列名a>(列类型)? after <列名b>;?

#给id添加自增约束

alter table 表名 modify id int(5) auto_increment;

#修改表中的字段不为空/或者为空

alter table 表名 modify 字段名 not null/null;

#添加表的字段自增主键? ?修改则将add 改成 modify

alter table 表名 add column 字段名? 类型? auto_increment not null,add primary key;

#添加唯一约束

alter table 表名 add constraint 约束名(uk_字段名) unique(字段名);

#删除表的字段

alter table 表名 drop column 字段;

#删除自增主键约束

alter table 表名 modify id int;

#删除表的主键约束,要删除自增约束才可以删除主键约束

alter table 表名 drop primary key;

#添加外键约束??

alter table 表名 add constraint 外键名? foregin key(引用id) references 被引用表名(被引用id)?

#添加主键约束

alter table 表名 add constraint 约束名 primary key (主键列名)

#删除外键约束

alter table 表名? drop foregin key 外键名

------可以通过show create table 表名? ?来查看外键名

3. 增删改语句

3.1 insert 语句

insert [into] 表名[(colimn1.column2,column3,...)]

value/values (value1,value2,value3,...);

????????????????可以省略列名,但需要按顺序插入所有列,值和列要一一对应。

?#一次录入多条数据

insert [into] 表名[(colimn1.column2,column3,...)]

value/values (value1,value2,value3,...),

value/values (value1,value2,value3,...),

value/values (value1,value2,value3,...)

#在innodb存储引擎下,会自增断层

insert? [into]? (table_name)??[(colimn1.column2,column3,...)]

select? value1,value2,...? union

select? value1,value2,...??

3.2 update 语句

update table_name

set

? ? ? ? column1={ },column2 = { },...

where <表达式>??

?3.3 delete 删除语句

delete from table_name where <表达式>

?删除表中的数据:

delete : 根据条件删除,逐行删除,自增值不会重置;

truncate:整表删除,无法设定条件,效率高,自增列会重新计数,无法恢复数据;无法直接删除有外键引用的表。

#删除数据

#以数据行为单位进行逐行删除,删除速度较慢

#安全,可以记录日志,需要时可以通过日志进行恢复

delete from 表 [where 条件]

#truncate 截断、截取

#直接删除整张表中的数据,相当于先把物理表删除再创建一个新表

#执行效率高,但是无法设定条件

#自增列会重新计数

truncate table 表名

?3.4 级联

涉及到有关主外键关联的数据表:

①删除数据时:先删除外键表,再删主键表

②录入数据时:先录入主键,再录入外键

③更新数据;

级联:当更新(删除)主键表中的数据时,外键表中引用的数据会自动更新(删除)

cascade:删除主键时,自动删除外键表中引用的数据,修改时自动更新外键表中引用的数据。

# on delete CASCADE : 开启 删除 级联

# on update cascade: 开启 更新 级联

alter table emp

add constraint fk_deptno foreign key (deptno)

references dept(deptno)

on delete cascade on update cascade;#级联设置

4. 查询

4.1 语法:

select? 列名1,列名2

from 表名

#可选

where 条件表达式

group by 列名

having 条件表达式

order by 列名

limit? ?,?? 分页

?说明:

①查询表的列时,可直接写列名,顺序自定义

select `name`,age,address,sex from student;

②可以使用 select * 查询所有列,查询效率低

select * from student;

③列和表都可以起别名

select s.`name`,s.age+3 from student s;

④查询中支持做运算? ?👆

?4.2 去重查询

? ?去除查询结果中重复的数据

select distinct? 列名 from 表名

4.3 条件查询where语句

SQL语句中的条件表达式:查询条件,判断条件,修改条件

条件运算符:= > < >= 和 !=

算术运算符:+ - * / %(mod) 不支持:++? --? 复合赋值 += -=

逻辑运算符:and(&&) , not(!) , or(||)

#查询价格大于5元的商品
select goodsName 商品名,price 价格 from goods where price > 5;
#查询价格大于10元的并且产地是广州的商品
select goodsName 商品名,price 价格,address 产地 from goods where price > 10 && address = '广州';
#查询商品类型是食品,或者价格小于5元的商品
select
	g.goodsName,g.price,c.categoryName
from goods g,category c
where
	(g.categoryId = c.categoryId and c.categoryName = '食品')
	or (g.price < 5 and g.categoryId = c.categoryId);
#查询价格不小于5的商品
select 
	goodsName,price
from goods
where price >=5;
#查询产地不是广州的
select 
	*
from goods
where address != '广州';
#带条件修改
#1. 将产地是郑州的并且是食品的商品都上涨1元钱,并且生产日期改为当前日期
update goods g,category c
	set g.price = price +1,g.produceDate = now()
#select *
#from goods g,category c
where 
	g.address = '郑州' and g.categoryId = c.categoryId and c.categoryName = '食品';
#2. 将价格小于5的并且是饮品的商品产地改为新乡
update goods g,category c
set g.address = '新乡'
#select *
#from goods g,category c
where
	g.price <5 and g.categoryId = c.categoryId and c.categoryName = '饮品';

?#范围查询:between and

#查询商品编号是2-9之间的数据
SELECT
*
from goods
where goodsId between 2 and 9 #包含开始和结束
#where goodsId>=2 and goodsId<=9

#范围查询:in 的使用(用于不连续的条件)

#查询商品是面包和鸡蛋的记录
SELECT
    *
from goods
where goodsName in ('面包','鸡蛋')
#where goodsName = '面包' or goodsName = '鸡蛋'

4.4 模糊查询

4.4.1 like

与'%'结合使用:匹配任意长度任意内容

与'_'结合使用:匹配一个长度任意内容

'%a' //以a结尾的数据

'a%' //以a开头的数据

'%a%' //含有a的数据,三位且中间字母是a的

'_a' //两位且结尾字母是a的

'a_' //两位且开头字母是a的

%:表示任意 0 个或多个字符,可匹配任意类型和长度的字符,有些情况下若是中文,需使用两 个百分号(%%)表示;

_:表示任意单个字符,匹配单个任意字符,它常用来限制表达式的字符长度语句。

4.4.2 正则通配符

正则模式REGEXP操作符

“.” ????????匹配任意单个的字符

“[ ]” ???????匹配在[]内的任意一个字符

[^] ????????匹配不在[]内的任意一个字符

“ * ” ??????匹配零个或多个在它前面的字符

“+” ????????匹配+前面的字符1次或多次

“{n}” ??????匹配前面的字符至少n次

“^” ????????匹配文本的开始字符

“$” ????????匹配文本的结尾字符

#商品名字带有‘面’的商品
select *
from goods
where goodsName like '%面%'

#商品名字以‘面’字开头且只有两个字的商品
select *
from goods
where goodsName like '面_'


#用正则表达式查询,以面开头的记录
select
*
from goods
where goodsName REGEXP '^面'

4.5 排序操作

order by 列名

asc(默认) 升序?

desc 降序

#按照商品编号降序呈现
select
*
from goods
order by goodsId desc 
#查询商品,按价格从小到达排序
SELECT
*
from goods
order by price asc
#多字段排序:按照价格升序,如果价格相同,生产日期降序排序
SELECT
*
from goods
order by price,produceDate desc

4.6 分页查询limit(结合排序使用)

????????每次我们直接 select * from **?会将数据全部查询出来,如果一张表数据量比较大,此时 容易爆炸,使用分页操作可以只查一部分的数据。

#查询前三条记录
SELECT
*
from goods
limit 3  #起始位置0可以省略


#获取4,5,6数据
SELECT
*
from goods
limit 3,3


#按照价格升序排序进行分页
select * from goods
order by price asc
limit 1,3

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:30:00  更:2022-07-17 16:34:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:04:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码