mysql基础自学
1.1基础查询
语法:select 查询列表 from 表名;
注意:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟表格
完整的写法是:先声明使用哪个库,再写SQL语
如果你不想在SQL面向于SQL软件开发,而是只想在工作中从数据库上抓取文件,这里可以不写
这是键盘上数字键1那个符号,不是单引号,可以省略
什么时候必须使用呢?例如:
当字段名与关键字同名时,必需使用这个符号声明你这是字段而不是关键字
例如:字段名为NAME,SQL关键字也有NAME
1.SELECT 商品编码 FROM `销售表`
2.SELECT 商品编码,店号 FROM 销售表
3.SELECT * FROM 销售表
小技巧:
当你写了多条SQL语句时,只要执行其中的一句或几句,将鼠标选中它再运行。
1.2 查询字段重命名 AS
语法:select 原名 as 别名 from 表名; # 可以用AS,建议用AS,方便你自己阅读
语法:select 原名 别名 from 表名; # 可以用空格
作用:
1、数据库字段一般都是英文名,你查询后的数据为了阅读方便,一般情况下抓取数据时会改成中文
2、高阶操作,多表抓取字段时可能会有重名的
注意:别名中包含特殊符号时,要用双引号括起来。【例如空格、#号等】SELECT 商品编码 AS 编码 FROM `销售表`
1.3 去重复 DISTINCT
语法:SELECT DISTINCT 字段 FROM 表名;
例如:SELECT DISTINCT 日期 FROM `销售表`;
SELECT DISTINCT 日期 FROM `销售表`
1.4 字段连接 CONCAT()
注意:不能使用+号连接,这里+号只能用做运算
字段链接使用CONCAT()函数
SELECT CONCAT(字段1,字段2,…) AS 别名 FROM 表名;
SELECT CONCAT(字段1,'_',字段2,…) AS 别名 FROM 表名;
SELECT CONCAT(店号,店名) AS 店铺 FROM `店铺表`;
假设字段中的值有可能为空时怎么办?
判断字段是否为空时,使用IFNULL()函数
SELECT CONCAT(商品编码,'、',IFNULL(销售数量,0)) AS 别名 FROM `销售表`;
1.5 条件查询 where
select 查询列表 from 表名 where 筛选条件;
执行顺序:先找表,筛选,查询
例如:销量大于250
SELECT * FROM `销售表` WHERE 销售数量 > 250;
SELECT 日期,商品编码 FROM `销售表` WHERE 销售数量 <> 250; #可以使用!=
例如:销量在150至250之间的 【这里只是举例,实际中不这样写。方法后面会讲】
SELECT * FROM `销售表` WHERE 销售数量 >= 150 and 销售数量 <= 250;
1.5.1 like 通配搜索
例如:商品编码里有A的
SELECT * FROM `销售表` WHERE 商品编码 LIKE '%a%'; # 不区分大小写
例如:商品编码第一个字符为A的
SELECT * FROM `销售表` WHERE 商品编码 LIKE 'a%'; # 第一个字符
例如:商品编码第三个字符为B的第五个字符为C的
SELECT * FROM `销售表` WHERE 商品编码 LIKE '__b_c%'; # 一个下划线代替一个字符,就像Excel中的?号通配符
特殊情况:(使用\转义字符)或(ESCAPE关键字)
例1:第二个字符为下划线
SELECT * FROM `销售表` WHERE 商品编码 LIKE '_\_%';
SELECT * FROM `销售表` WHERE 商品编码 LIKE '_$_%' ESCAPE '$'; # $可以写成26个字母中任意一个
例2:第二个字符为百分号
SELECT * FROM `销售表` WHERE 商品编码 LIKE '_\%%';
SELECT * FROM `销售表` WHERE 商品编码 LIKE '_$%%' ESCAPE '$'; # $可以写成26个字母中任意一个
1.5.2 between…and 两个值或日期之间
例如:销量在150至250之间的 【与之前学过的AND效果是一样的】
SELECT * FROM `销售表` WHERE 销售数量 BETWEEN 150 AND 250;
SELECT * FROM `销售表` WHERE 销售数量 >= 150 and 销售数量 <= 250;
注意事项:
(1)between…and 这两个值是包含本身的,就相当于是大于等于或小于等于。
(2)这两个值的位置不能交换,他的意思是大于等于左边,小于等于右边。
拓展:例如销量不在150至250之间的。【配合NOT把它反过来】
SELECT * FROM `销售表` WHERE 销售数量 NOT BETWEEN 150 AND 250;
1.5.3 in 指定条件范围
如:店号为1,3,7这三家店铺的销售数据
SELECT * FROM `销售表` WHERE 店号 = 1 or 店号 = 3 or 店号 = 4; # 这才3家店,如果你们有100家店,让你找其中40家店你怎么写?
SELECT * FROM `销售表` WHERE 店号 IN(1,3,7);
为什么用or而不是用and呢?一定有人会问,这就是逻辑思维!店号=3或店号=4 如果用and的意思就是店号是34
in的注意事项:使用in比使用or提高了语句的简洁度
(1)in列表的值类型必须是一致类型(例如里面是店号就都是店号)
(2)in列表的值不支持通配符
1.5.4 is null 为空值
例如:判断销售量为空的数据
SELECT * FROM `销售表` WHERE 销售数量 = NULL;
=号运算符不能判断NULL值,必需使用is null
SELECT * FROM `销售表` WHERE 销售数量 IS NULL;
如果想查非空值:
SELECT * FROM `销售表` WHERE 销售数量 IS NOT NULL;
注意:
条件运算符的=或<>是不能判断NULL值的,必须用 IS NULL 和 IS NOT NULL
<=>安全等于可以判断NULL值,也可以判断普通值
SELECT * FROM `销售表` WHERE 销售数量 <=> NULL;
但是这个符号可读性差,看到之后不易分清。
二、排序查询 ORDEY BY
1、升序
SELECT 字段名 FROM 表名 ORDEY BY 字段名 ASC (ASC可以省略默认升序)
2、降序
SELECT 字段名 FROM 表名 ORDEY BY 字段名 DESC
注意1:在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则报错
注意2:只有limit子句放在ORDER BY后面,其它情况下,ORDER BY 放最后
拓展:添加筛选条件
例如:店号为1,3,7店的数据,按销售数量降序
SELECT * FROM `销售表` WHERE 店号 in(1,3,7) ORDER BY 销售数量 DESC;
注意2:ORDER BY后面可以是字段,也可以是表达式,也可以是别名
例如:
SELECT *,销售数量*售价 AS 销售金额 FROM 表名 ORDEY BY 销售数量*售价 DESC # 此案例不要去做,我们还没讲跨表操作
SELECT *,销售数量*售价 AS 销售金额 FROM 表名 ORDEY BY 销售金额 DESC # 此案例不要去做,我们还没讲跨表操作
2.1 升序 ASC
升序
SELECT 字段名 FROM 表名 ORDEY BY 字段名 ASC
(ASC可以省略默认升序)
例如:SELECT * FROM `销售表` ORDER BY 销售数量 ASC;
2.2 降序 DESC
降序
SELECT 字段名 FROM 表名 ORDEY BY 字段名 DESC
例如:SELECT * FROM `销售表` ORDER BY 销售数量 DESC;
拓展:添加筛选条件
例如:店号为1,3,7店的数据,按销售数量降序
SELECT * FROM `销售表` WHERE 店号 in(1,3,7) ORDER BY 销售数量 DESC;
2.3 排序优先级
排序优先级
SELECT 字段名 FROM 表名 ORDER BY 字段名1 DESC,字段名2 ASC
ORDER BY语句中,优先排序的字段放在前面,不同字段可以指定不同的排序规则,如果没有指定排序规则,则默认为升序(ASC)排列。
例如:SELECT * FROM `销售表` ORDER BY 销售数量 DESC,日期 ASC;
2.4 按长度排序 LENGTH( )
例如:按商品名称的长度排序列
SELECT * FROM 商品表 ORDER BY LENGTH(商品名称); # 升序
SELECT * FROM 商品表 ORDER BY LENGTH(商品名称) DESC; # 降序
2.5 中文列排序 INSTR( )
中文列排序(例如字段名为月份:值包含一月、二月、三月、四月、五月)
SELECT 字段名 FROM 表名 ORDER BY INSTR('五月,四月,三月,二月,一月',月份)
INSTR函数有些类似于工作表函数FIND,查找一个字符串在另一个字符串中的位置,和FIND不同的是,当找不到相关值时,结果返回0,而非
错误值。INSTR(str, substr),返回substr在str中的位置,若不存在,则返回0。
例如:
SELECT * FROM `测试` ORDER BY INSTR('五月,四月,三月,二月,一月',月份)
2.6 按列的位置排序
ORDER BY 还支持按相对位置进行排序
SELECT 商品名称,进价,售价 FROM `商品表` ORDER BY 2,3
3.1 常用文本函数
在UTF8字符集中,一个英文字母点1个字节,一个汉字占3个字节。
在GBK字符集中,一个英文字母点1个字节,一个汉字占2个字节。
函数是可以嵌套的,函数的返回值可以充当另一个函数的参数
1、返回字符串左边的字符
语法:LEFT(字符串或字段,长度)
SELECT LEFT('孙兴华',2)
SELECT LEFT(商品名称,1) FROM `商品表`
2、返回字符串长度
语法:LENGTH(字符串或字段) 目前为止就这一个指的是字节,其它都是指的字符
SELECT LENGTH('孙兴华')
SELECT LENGTH(商品名称) FROM `商品表`
3、字段连接或字符串连接
语法:CONCAT(字段1,字段2,…)
SELECT CONCAT(字段1,'_',字段2,…) AS 别名 FROM 表名;
4、大写和小写转换
语法:LOWER(字段) # 转小写
语法:UPPER(字段) # 转大写
SELECT LOWER(`商品编码`) FROM `销售表`
SELECT UPPER(`商品编码`) FROM `销售表`
5、去掉左边和右边的空格
语法:TRIM(字段名或字符串) # 左右两边
语法:LTRIM(字段名或字符串) # 左
语法:RTRIM(字段名或字符串) # 右
SELECT TRIM(' 孙兴华 ')
SELECT TRIM('a' FROM 'aa孙aa')
SELECT LTRIM(`商品编码`) FROM `销售表`
SELECT RTRIM(`商品编码`) FROM `销售表`
3.1 常用文本函数
2020年3月30日 9:52
分区 初级 的第 23 页 6、字符截取 substr
语法:SUBSTR(字符或字段,起始位置,结束位置)
语法:SUBSTR(字符或字段,起始位置)
SQL与其它编程语言例外,索引从1开始!!!
SELECT SUBSTR('跟着孙兴华学习Python进阶',3,3) AS 姓名
SELECT SUBSTR('跟着孙兴华学习Python进阶',5) AS 姓名
7、返回子串第一次出现的索引,如果找不到返回0
语法:INSTR(字符串,子串)
SELECT INSTR('孙兴华坚持中文讲课因为孙兴华英文不好','孙兴华')
8、左填充和右填充
语法:LPAD(字符串,字符位数,‘占位’) # 左填充
语法:RPAD(字符串,字符位数,‘占位’) # 右填充
SELECT LPAD('孙兴华',8,'*')
SELECT RPAD('孙兴华',8,'*')
SELECT LPAD('孙兴华',2,'*') # 返回:孙兴
SELECT RPAD('孙兴华',2,'*') # 返回:孙兴
9、替换
语法:REPLACE(字符串,替换谁,换成什么)
SELECT REPLACE('孙兴华和孙兴华和孙兴华','孙兴华','华兴孙')
上述代码均拷贝至《跟着孙兴华学习MySQL》关系型数据库教程[初级篇完结]
详情请去看连接https://www.bilibili.com/video/BV1Dk4y1d71j?p=6&spm_id_from=pageDriver
本人菜鸡一枚正在努力学习找工作!!
加油!冲!
mysql基础自学的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...
- MySQL基础(非常全)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
- mysql 基础篇5(mysql语法---数据)
6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- MySQL基础(五)——视图
MySQL基础(五)--视图
随机推荐
- Azure 信用卡扣款 1 美元 & Azure 中国客服
Azure 信用卡扣款 1 美元 & azure 中国客服 Azure 免费帐户常见问题 https://azure.microsoft.com/zh-cn/free/free-account ...
- React & redux-saga & effects & Generator function & React Hooks
React & redux-saga & effects & Generator function & React Hooks demos https://github ...
- SVG 场馆图
SVG 场馆图 https://www.infoq.cn/article/1BVg9VDSmqyHv3W3TeNH https://mp.weixin.qq.com/s/aNPAfJIHL14NFtL ...
- Renice INC:解密干型葡萄酒
市场上,干型葡萄酒往往对比甜型葡萄酒(如甜红.甜白)受到更多葡萄酒爱好者的青睐.在葡萄酒界,大部分的红葡萄酒和白葡萄酒也都是干型的,而且它们的口感往往各有特色,并非千篇一律.今天,就跟随Renice ...
- Unity安卓apk打包过程
前言:对于Unity开发小白来说,Android打包无疑是个头痛的问题,所以我总结了 Unity安卓APK的打包过程 第一步:下载对应版本的Android Platform 第二步:安装JDK并配置J ...
- SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法
本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...
- MapReduce原理及简单实现
MapReduce是Google在2004年发表的论文<MapReduce: Simplified Data Processing on Large Clusters>中提出的一个用于分布 ...
- 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐
最近这段时间频频看到微信群里发什么 抢票加速,智行.携程.飞猪.美团,对于我这能坐客车就不坐火车的人来说,无所谓靠谱不靠谱 突发奇想的整理了下整个抢票加速的逻辑,写了这个小程序,代码很low,拒绝批评 ...
- 手把手教你Spring Boot整合Mybatis Plus 代码生成器
一.在pom.xml中添加所需依赖 <!-- MyBatis-Plus代码生成器--> <dependency> <groupId>com.baomidou< ...
- python进阶(4)文件操作
文件操作 文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件 open(file, mode='r', buffering=-1, encod ...