行无文 SQL 学习笔记

SQL

数据库优化法则

1、 减少数据访问(减少磁盘访问)

2、 返回更少数据(减少网络传输或磁盘访问)

3、 减少交互次数(减少网络传输)

4、 减少服务器CPU开销(减少CPU及内存开销)

5、 利用更多资源(增加资源)

基础

增删改查字段

#增加字段
-- 匿名方法 需要补全所有参数,顺序按照建表的顺序来,values必须要加多条数据
insert into 表名 value/values(值,...);
-- 指定字段 填好需要的就行了,顺序按自己指定的顺序来
insert into 表名(字段名,...) value/values(值,...);

-- 删除字段
delete from 表名 where 字段名=表名;

-- 更新字段
update 表名 set 字段名=值名,... where 字段名=值;

-- 查询
select 字段名,... from 表名  where 字段名=值 order by country,alexa;

-- 去重
select  distinct 字段名,... from 表名 ;

-- 根据什么排序,放在条件语句之后,一般就放在最后面
order by 字段名
-- 条件判断
where xxx=xxx and xxx=xxx or xxx=xxx

整整库

create database 库名;

搞搞表

-- 建表语句
create table table_test(
	id varchar(64) not null primary key,
    tname varchar(255),
    age varchar(255)
);
create table table_test2(
	id varchar(64) not null,
    tname varchar(255),
    age varchar(255),
    constraint pk_tt primary key (id, tname)
);

-- 删除表
drop table table_test;

-- 修改表语句
-- 增加列
alter table table_test add 列名 数据类型(长度) 约束;
-- 删除列
alter table table_test drop column 字段名;

-- 修改表结构
alter table table_test alter column 字段名 数据类型(长度) 约束;

约束

用于规定表中的数据规则,若存在违反约束的数据行为,行为终止。

not null(非空约束)

约束列不能为空

unique(唯一)

约束列唯一,不能重复

primary key(主键)

非空与唯一的并集,多个列唯一

-- 单主键
create table 表名(
	字段名 数据类型(长度) 约束,
    字段名 数据类型(长度) 约束
)
-- 多主键 
create table 表名(
	字段名1 数据类型(长度) 约束,
    字段名1 数据类型(长度) 约束,
    constraint 主键名 primary key (字段1,字段2)
)
-- 可以在修改表结构的时候多加上一个主键
foreign key(外键)

保证一个表中的数据匹配另一个表中的值的参照完整性

check (限定值的条件)

保证列中的值符合指定的条件

default(设默认值)

规定没有给列赋值时的默认值

auto_increment (自增)

查如字段时字段自增,只能是int类型

弄弄索

index

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

用户无法看到索引,它们只能用来加速搜索/查询

PS:

更新一个包含索引的表比更新无索引的表慢,

理想的做法是在常搜索的列(以及表)上加索引,

在常改的列上不加索引

-- 创建简单索引,可重复
create index 索引名 on 表名(字段名);

-- 创建唯一索引,以为着两个行不能使用重复的值
create unique 索引名 on 表名(字段名,字段名,···);

撤销与修改

drop(撤销)

可以用来撤销 数据库、表、索引

语法
-- 删索引
alter table 表名 drop index 索引名;

-- 删除表
drop table 表名;

-- 清空表
truncate table 表名;

-- 删库
drop database 库名

高级

查询

-- 指定记录返回的条数,可以加条件
-- mysql中
select 字段名,... from 表名  limit 数目;

--模糊查询 用正则来表示,所有包含有g的字段,%为通配符;
select 字段名 from 表名 where 字段名 like '%g%';
-- 查询不包含G的
select 字段名 from 表名 where 字段名 not like '%g%';

通配符

通配符描述
% 百分号替代0个或多个字符
_ 下划线替代一个字符
[字符串]字符列中的任何一个单一字符
[!字符串]/ [ ^字符串]不在字符列中的单一字符

格式

-- % 与 _ 可以用like 模糊查询
select 字段名 from 表名 where 字段 like '%XX%';

select 字段名 from 表名 where 字段 like '_字_符_串'; 

-- [字符串] 只能用 regexp/not regexp正则表达式
-- 取以字符串中字符开头的字符
select 字段名 from 表名 where 字段 regexp '^[字符串]'; 

条件

where
-- 逻辑
-- 当有多个条件的时候,除了最后一个,其他用括号将条件括起来
-- and 与
-- or  或
-- not 非

-- 取值
-- in  允许where规定多个值
select 字段名 from 表名 where 字段名 in(,...);

-- between 选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。
-- 文本是怎么判断的?是按照字母顺序?
select 字段名 from 表名 where(字段名1 between1 and2) and 字段名 not in(1,2);

别名

一般只在查询中使用

使用的情况:

在查询中设计超过一个表

在查询中使用了函数

列名称很长或者可读性查

需要把两个列或者多个列结合在一起

语法

-- 列别名
-- 1、直接在字段名称后面加上别名,中间以空格隔开

select 字段名"别名" from 表名 where 条件;


-- 2、以as关键字指定字段别名,as在select的字段和别名之间

select 字段名 as 别名 from 表名 where 条件;


-- 3、对于SQL Service 还可以利用等号"="指定字段的别名

select 字段名=别名 from 表名 where 条件;

--表别名

select 字段名 from 表名 as 表别名;

**提示:**如果列名称包含空格,要求使用双引号或方括号:

将多个列放在一个别名下

select (字段名1,',',字段名2,',',字段名3)as 别名 from 表名 where 条件;

疑问?

别名设置是一次性的还是持久化的?

别名是一次性的,别名在每条sql语句中都是可以不同的,用别名只是为了让查询时,条件语句更加好看

连接(JOIN)

所谓连接就是将各个表关联起来,结果可以看作是一张新表

共7种用法

inner join :如果表中至少有一个匹配则返回行

left join : 即使右表中没有匹配,也从左表返回所有的行

right join:即使左表中没有匹配,也从右表中返回所有的行

full join:只要其中一个表中存在匹配就返回行

outer join:

内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接的条件

外连接: 外连接结果不仅包含符合连接条件的行,同时也包含自身不符合条件的行,包括左连接、右连接和全部外连接。

左外连接:左边表数据行全部保留,右边表保留符合连接条件的行

右外连接:右边表数据行全部保留,左边表保留符合连接条件的行

全部外连接:左外连接 union 右外连接

格式
select.字段,.字段,... from1 连接 表2 on 关联条件 order by 字段
inner join(内连接)

关键字在表中存在至少一行时返回行

-- 方式1
select1.字段名,2.字段名,... from1 inner join2 on1.字段名=2.字段名;

-- 方式2
select.字段名 from1 join2 on1.字段1=2.字段2;

inner join 与join是相同的

left join(左连接)

即使右表中没有匹配记录也会显示,左表必定显示,右表若匹配则显示

select1.字段名,.字段名,... from1 left join2 on 条件 order by 字段;
right join( 右连接)

与左连接功能相反,换个位置基本上就用不上了。

select.字段,.字段,... from1 right join2 on 条件 order by字段

可以通过and条件来查询右表并关联左表

full /full outer join(全连接)

即使记录关联不上也能查出来

select.字段,.字段,from

合并(union)

合并两个或多个select语句的结果集

查询语句1 union 查询语句2;

union 内部的

每个select 必须拥有相同数量的列,

列也必须拥有相似的数据类型,

每个select语句中的列的顺序必须相同

结果集中的列名,总是等于第一个select中的列名

union只能列出不同的值,若想列出所有的值可以用union all来选取重复的值

用where时可以让条件拥有重复的值

复制(into)

into:将一张表的数据复制到一张新表中

insert into:将一张表中的数据插入到一张已经存在的旧表中

MySQL不支持 select …into

复制时可以使用

create table 新表
as
select * from 旧表;
insert into
insert into 插入表
select 字段名 from 复制表 

日期

MySQL Date函数
函数描述
NOW()返回当前的日期和时间
CURDATE()返回当前日期
CURTIME()返回当前时间
DATE()提取日期或日期/时间表达式的日期部分
EXTRACT()返回日期/时间的单独部分
DATE_ADD()向日期添加指定的时间间隔
DATE_SUB ()从日期减去指定的时间间隔
DATEDIFF()返回两个日期之间的天数
DATE_FORMAT()用不同的格式显示日期/时间

聚合函数

函数这东西基本上都是查询的时候用的,增删改基本上都是用不到这些玩意的。

格式
select 函数名(字段名) from 表名 各种条件混合使用;
Aggregate (统计)函数

AVG():返回平均值,参数只能是int

COUNT():返回行数

FIRST():返回第一个记录的值

LAST():返回最后一个记录的值

MAX(): 返回最大值

MIN():返回最小值

SUM():返回总和

Scalar (格式)函数

UCASE() :将某个字段转换为大写

LCASE() :“将某个字段转换为小写

MID() :从某个文本字段提取字符,MySQL中使用

SubString(字段,1,end): 从某个文本字段提取字符

LENGTH(): 返回某个文本字段的长度()

ROUND(): 对某个数值字段进行指定小数位数的四舍五入

NOW():返回当前的系统日期和时间

FORMAT():格式化某个字段的显示方式

练习地址:https://blog.youkuaiyun.com/smileiii/article/details/82532360

在机器人操作系统(ROS)中,机器视觉是机器人感知和理解周围环境的关键技术。robot_vision功能包专注于这一领域,集成了多种视觉处理技术,包括摄像头标定、OpenCV库应用、人脸识别、物体跟踪、二维码识别和物体识别,极大地拓展了ROS在视觉应用方面的能力。 摄像头标定:作为机器视觉的基础,摄像头标定用于消除镜头畸变并获取相机的内参和外参。在ROS中,camera_calibration包提供了友好的用户界面和算法,帮助计算相机参数矩阵,为后续的图像校正和三维重建提供支持。 OpenCV:OpenCV是一个广泛使用的开源计算机视觉库,在ROS中扮演着重要角色。robot_vision功能包可能包含OpenCV的示例代码和节点,涵盖图像处理、特征检测、模板匹配和图像分割等功能,这些功能对机器人视觉系统至关重要。 人脸识别:ROS中的人脸识别结合了图像处理和机器学习技术。robot_vision可能集成了基于OpenCV的人脸检测算法,如Haar级联分类器或Adaboost方法,甚至可能包含深度学习模型(如FaceNet或SSD),帮助机器人实现人脸的识别和跟踪,提升人机交互能力。 物体跟踪:物体跟踪使机器人能够持续关注并追踪特定目标。在ROS中,通常通过卡尔曼滤波器、粒子滤波器或光流法实现。robot_vision功能包可能包含这些算法的实现,助力机器人完成动态目标跟踪任务。 二维码识别:二维码是一种高效的信息编码方式,常用于机器人定位和导航。ROS中的二维码包可用于读取和解析二维码,而robot_vision可能进一步封装了这一功能,使其更易于集成到机器人系统中。 物体识别:作为机器视觉的高级应用,物体识别通常涉及深度学习模型,如YOLO、SSD或Faster R-CNN。robot_vision功能包可能包含预训练的模型和对应的ROS节点,使机器人能够识别环境中的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值