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

本人菜鸡一枚正在努力学习找工作!!

加油!冲!