MySQL必知必会_SELECT部分

最近在读MySQL必知必会,关于这本书打算写点读后感,大概是两篇博客的体量。
在这里插入图片描述

其实对于测试岗来说,不管是面试还是实际工作中,最重要的自然当属SELECT。

下面我把书里关于SELECT的知识点简单记一下吧。

首先在MySQL中其实是不区分大小写的,但为了规范,我们在写SQL语句的时候还是注意要将关键字大写。

比如与mysql有关的操作如SELECT,FORM之类的关键词。

首先是SELECT的基础知识

1.DISTINCT关键字
  SELECT DISTINCT pro_id 
  FROM  xxxx;    代表从表中搜索pro_id整列,distinct剔除重复项

2.LIMIT 限制查询出来的行数
  SELECT  ****
  FROM ***
  LIMIT 3,4;     代表检索从第三行开始的后4行,
  				如果只有一个数字代表从第一行的后n行

3.ORDER   检索出来的行按照指定的规则排序
   SELECT **
   FROM ***
   ORDER BY 111   222;     搜索结果按列排序,111的优先级大于222
   ORDER BY 1111  DESC,222;     按111降序排列,随后考虑222

例:找出最贵的一个物品
SELECT  aaa_price,product_name 
FROM ***
ORDER BY aaa_price DESC           根据price倒序排列
LIMIT 1;

4.WHERE
过滤数据用WHERE  <,>,!=,=,between  and,<>(代表!=),IS NULL,IS NOT NULL
多组过滤:  WHERE......AND/OR.......    (在有多个AND/OR的时候,AND被优先处理)
可以用 WHERE (.....or......) AND .......     的方式来组合

还可以用IN操作符来过滤
SELECT  ****  FROM ***
WHERE  *** IN (10,9)     括号内为可选的数据范围
WHERE 后还可以接NOT来否定后续条件

通配符%
WHERE  ... LIKE 'jet%'            %代表通配符,接受jet后为任意字符,注意区分大小写
WHERE  ... LIKE '%jet%'         通配符可以使用多个
还有一个通配符_          功能与%一样,但%可以匹配0个或多个,_一定只匹配一个
%不能匹配NULL

正则表达式
WHERE ... REGEXP '.000'    .代表匹配任何值
WHERE .... REGEXP '1000'    这条语句可以搜索到1000
WHERE  .... LIKE '1000'      这条语句不会搜索到1000,没用通配符,LIKE匹配整个串
REGEXP 匹配不区分大小写,如要区分大小写,用REGEXP BINARY
正则表达式与OR结合  WHERE ... REGEXP '1000|2000'  
匹配多个字符任意一个    WHERE ... REGEXP '[abc]1'    匹配a1/b1/c1 
排除某个字符串用-      -scope*  代表排除以scope开头的任意字符串
如果要使用正则表达式来匹配特殊字符如.   用\\.来匹配.
?号在正则表达式中便是?前面的字符可以出现0/1次
[:alnum:]  匹配任意一个字符
[:digit:]    任意数字

5.字符串拼接CONCAT
在实际SELECT的过程中,我们可能需要一个新的列,即在数据表中原本其实并不存在的列,可以使用CONCAT
SELECT CONCAT(name,'(',age,')')as ...   最终拼成name(age)的形式,形成一个新的列
SELECT  age*height as ....          也可以直接列相乘生成新的一列

6.SELECT中可能使用的一些内置函数
RTrim(name)   删除数据右侧多余的空格
Upper()    将文本中所有字母转换为大写
Date()    将查询语给出的值与列中的数据进行部分筛选
根据日期筛选   WHERE Date(order_date) = '2022-12-16' ,可以与BETWEEN结合使用
Year()/Month()    获取年份,月份
AVG()/SUM()/MAX()/MIN()

这部分中的重点是COUNT函数
COUNT(返回某列的行数,计数函数)   
COUNT(*)计算整个表的行数
COUNT(column)计算特定列的行数,NULL值不计入其中
SELECT COUNT(*) as total_num
FROM 。。。
WGHERE age =5    计算年龄为5的人数个数

7.GROUP
   SELECT  id,COUNT(*) AS pro_num
   FROM...
   GROUP BY id        根据id分组计算,计算不同id的个数,同个id为一组
   HAVING COUNT(*) >2   过滤,只显示数量大于2的id
   ORDER BY id        将最终的分组按照id来排序

这里注意HAVING和WHERE的区别
HAVING过滤组别
WHERE过滤列

8.子查询
若要多次进行查询筛选可用子查询,放到一个Sql语句里
SELECT id 
FROM  ..
WHERE age in (SELECT age  //注意这边的WHERE age 和in后面的SELECT age,要统一
              FROM ...
              WHERE name in ('aa','bb'));

SELECT id ,(SELECT COUNT(*)                  生成新的不存在的列需要另外SELECT
FROM orders    
WHERE  customer.id = order.id) AS order    红字部分为联结查询
FROM customer
ORDER BY id;

9.联结查询
   SELECT a_name,b_age,c_sex
   FROM name,age
   WHERE name.id = age.id AND sex.id = name.id AND age =24    多个表同时联结
   ORDER BY a_name,b_age;

这里还可以给表创建别名以供后续查询的使用
	SELECT 。。。
	FORM name as n, age as a
	WHERE a.xxx = n.xxx;

10.SLEECT中的全文本搜索
使用MATCH()和AGAINST()
SELECT ...
FROM..
WHERE MATCH(列名) AGAINST(xxx表达式)
AGAINST('+aa -bb')   查询包含aa不包含bb
AGAINST('aa  bb')     查询包含aa或者bb
AGAINST( ' “aa bb” ’)   查询包含“aa bb”这个具体字符串

视图

视图并不包含任何表中的列或者数据,严格来说,视图其实就是SQL查询

CREATE VIEW  aa AS      把下面这个SELECT包装成为一个名为aa的视图
SELECT ,,,
FROM ...
WHERE   ..

为什么使用视图?
1.简化复杂的SQL操作
2.保护数据,可以授予部分用户特定部分的访问权限,而不是整个表

视图还可以用来重新组合列,比如你希望组合两个列生成一个新的列,但这个列,表中是没有的,用SELECT CONCAT,然后将这个SELECT封装为一个视图。这样可以简化搜索操作。

注意,视图主要用于检索数据,但很多情况下的视图是无法被更新的
1.视图里有分组GROUP /HAVING
2.视图里有联结查询,有子查询
3.视图里有聚集函数(MIN,SUM,COUNT)等
4.视图里有DISTINCT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值