首页
学习
活动
专区
圈层
工具
发布

MySQL必知必会汇总

<=10; 不匹配检查: 列:不是由供应商1003制造的所有产品 select vend_id,prod_name from products where vend_id 1003; select...between关键字匹配的范围中所有的值,包括指定的开始值与结束值; 空值检查: 在一个列中不包含值时,称为包含空值NULL; NULL 无值,它与字段包含0,空字符串或者仅仅包含空格不同; 关键字:is...(_)通配符: 作用:只能匹配单个字符而不是多个字符; (_) mysql> select prod_id,prod_name from products where prod_name like '_...第9章:用正则表达式进行搜索 什么是正则表达式: 用来匹配文本的特殊字符集合 关键字:regexp(REGEXP) 基本字符匹配: 例1:检索列prod_name包含文本1000的所有行 mysql>...,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符 -% _); ​ 而REGEXP在列值内进行匹配,如果匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL操作之数据查询语言:(DQL)(四-1)(单表操作)

    (含头含尾) 一定区间内的数 IN(set) 显示在in列表中的值,例:in(100,200) 两个数中的一个 查询商品价格是200或800的所有商品 SELECT * FROM product WHERE...BETWEEN AND) 显示在某一区间的值(含头含尾) 查询商品价格在200到1000之间所有商品 SELECT * FROM product WHERE price >= 200 AND price...FROM 表名 WHERE 字段名 IS [NOT] NULL 查询grade为空的值 SELECT id,name,grade FROM student WHERE grade IS NULL;..._%' --匹配(nam_e) 3.6 带AND关键字的多条件查询 假如含有多个AND关键字,条件都满足时,才会被查询出来 SELECT id,name,gender FROM student WHERE...’c002’所有商品的平均价格(AVG) SELECT AVG(price) FROM product WHERE category_id = 'c002' 查询商品的最大价格(MAX) SELECT

    69210

    mysql学习总结04 — SQL数据操作

    ,查询其班级名 通过学生表获取班级id,得到一个数据(一行一列) 通过班级id获取班级名 mysql> select * from tbClass where id = (select class_id...>); 举例: 获取有学生的班级名 查询学生表中所有班级id,得到一列数据(一列多行) 通过班级id获取班级名 mysql> select name from tbClass where id in (...select class_id from tbStudent); 11.3 行子查询 行子查询:子查询结果是一行数据(一行多列) 行元素:字段元素指一个字段对应的值,行元素对应多个字段,多个字段合作一个元素参与运算称为行元素...mysql> select * from tbClass as c where exists(select stu_id from tbStudent as s where s.class_id =...all():不等于所有 mysql> select * from tbClass where id all(select class_id from tbStudent); id

    6.3K30

    最完整的Explain总结,SQL优化不再困难

    用于 primary key 或 unique key 的所有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。...system是const的特例,表里只有一条元组匹配时为system mysql> EXPLAIN SELECT * FROM t1 WHERE id = 5; ref_or_null 当对普通二级索引进行等值匹配查询...> EXPLAIN SELECT * FROM s1 WHERE id = 5; 由于id列的类型是INT,并且不可以存储NULL值,所以在使用该列的索引时key_len大小就是4。...ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:t1.id) ref列展示的就是与索引列作等值匹配的值什么,比如只是一个常数或者是某个列...key1列作等值匹配的对象是一个常数,当然有时候更复杂一点: mysql> EXPLAIN SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id; 可以看到对被驱动表

    1.3K20

    MySQL必知必会总结

    ,用来表示一个特定的行 任意两行都不具有相同的主键值 每个行都必须具有一个主键值(主键列不允许NULL值) 2 Mysql简介 数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统...; # 匹配任何位置包含文本anvil的值 # _ 只能匹配单个字符 select prod_id,prod_name from products where prod_name LIKE '_ ton_anvil...Like匹配整列,REGEXP是匹配列中;可以通过BINARY关键字区分大小;匹配特殊字符前必须用\\为前导,即转义; # 搜索prod_name 包含文本 1000 的所有行 select prod_id...要保证所有联结都要有where子句,则MySQL将返回比想要的数据多得多的数据。...set cust_email = NULL where cust_id = 10005; # 为了删除某个列的值,可设置它为NULL 删除数据,可使用DELETE语句,从表中删除特定的行,从表中删除所有行

    1.1K31

    【MySQL】联合查询

    语法 select * from 表名 where 列1 =(select 列1 from 表名 where 条件); 示例 -- 查询英语成绩为78的学生id mysql> select id from...78的学生的id -- 主查询:select * from student_score where id=(子查询结果)表示查询student_score表中所有列,筛选条件是id值等于子查询返回的值...id值的所有列 mysql> select * from student_score where id in(select id from student_score where english=78...值的所有列:加上not mysql> select * from student_score where id not in(select id from student_score where english...重点在于返回多列数据,通常用于主查询中多列值的组合比较 数据匹配 基于单列的多个值进行的 基于多列的组合进行的 使用场景 用于一组值的筛选 依据多个列的条件进行筛选 合并查询 1.概念: 合并查询

    70210

    B-Tree 索引类型详解

    1.2 适合 B-Tree 索引的查询类型 全值匹配 和索引中的所有列进行匹配,如查找姓名为 George Bush、1960-08-08 出生的客户。...只使用索引的第一列,如查找所有姓氏为 Bush 的客户: mysql> explain select * from customer where last_name='Bush'\G*********...只匹配某一列的值的开头部分,如查找所有以 B 开头的姓氏的客户,这里使用了索引的第一列: mysql> explain select * from customer where last_name like...查找所有姓氏在 Allen 和 Bush 之间的客户,这里使用了索引的第一列: mysql> explain select * from customer where last_name between...,并范围匹配另一列 第一列全匹配,第二列范围匹配,如查找姓氏为 Bush,名字以 G 开头的客户: mysql> explain select * from customer where last_name

    1K10

    2024Mysql And Redis基础与进阶操作系列(5)作者——LJS

    ; 查询category_id不为null分类的商品 select * from product where category_id is not null; 使用least求最小值 select least...0 max() 计算指定列的最大值,如果指定列是字 select sum(price) from product where category_id = 'c001'; 符串类型,那么使用字符串排序运算...) from product where category_id = 'c001'; 符串类型,那么使用字符串排序运算; min() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算...where price > 200; (3)查询分类为'c001'的所有商品的总和 select sum(price) from product where category_id = 'c001';...'所有商品的平均价格 select avg(price) from product where category_id = 'c002'; 聚合查询-NULL值的处理 1、count函数对null值的处理

    1.1K30

    MySQL 查询专题

    但是,并非所有 DBMS 都支持这两种不等于操作符。如果有疑问,请参阅相应的 DBMS 文档。 SELECT语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。...❑ IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。 ❑ IN WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。...作为计算字段使用的成为相关子查询 select cust_email from customers where cust_id in (select cust_id from orders where...很少见, 看上去像对象 多行多列 select * from 表1 别名1 , (select ... ) 别名2 where 条件 所谓的连接是有针对性的找出关联关系 全文搜索 用基于文本的搜索作为正则表达式匹配列值的更进一步的介绍...❑ 性能——通配符和正则表达式匹配通常要求 MySQL 尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。

    7.9K30

    MySQL必知必会笔记(1)

    服务 systemctl restart mysql.service distinct关键字 对查询的结果去重,注意不能部分使用DISTINCT,DISTINCT关键字应用于所有列而不仅是前置它的列 select...(包括0) _: 匹配单个任意字符 找到所有产品名以jet开头的产品 select prod_id,prod_name from products where prod_name like "jet%"...like "%anvil%"; 比如下方出现在搜索模式的中间,匹配所有以s开头e结尾的值 select prod_name from products where prod_name like "s%...max() 返回某列的最大值 min() 返回某列的最小值 sum() 返回某列值之和 -- avg() AVG()返回products表中所有产品的平均价格 AVG()忽略列值为NULL...union all,匹配所有行 ,不取消重复行 select vend_id,prod_id,prod_price from products where prod_price <=5 union all

    2.4K10

    SQL命令记录

    1. sql 主要命令描述 所有 MySQL 命令的列表:注意,所有文本命令必须在一行的开头,并且以分号“;”结束 命令 缩写 命令说明 示例 ? ? “help”的同义词。 mysql> ?...mysql> exit go g 发送命令到 MySQL 服务器。 mysql> SELECT `id` FROM `table`g help h 显示该帮助信息。...确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 外键,保证一个表中的数据匹配另一个表中的值的参照完整性。...SELECT * FROM Websites WHERE url LIKE '%oo%'; 案例三: # 选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户 SELECT * FROM...SQL JOIN INNER JOIN:如果表中有至少一个匹配,则返回行 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

    1.9K20

    【mysql系列】细谈explain执行计划之“谜”

    执行计划中各个列代表具体含义解释如下: id: 查询的序号,包含一组数字,表示查询中执行select子句或操作表的顺序 1.id相同,执行顺序从上往下 2.id不同,id值越大,优先级越高,越先执行 select_type...因为只匹配一行数据,所以如果将主键置于where列表中,mysql能将该查询转换为一个常量 3.eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。...简单查询不会出现该类型 4.ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,是使用普通索引或者唯一性索引的部分前缀,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,...因为只需匹配一行数据,所有很快。如果将主键置于where列表中,mysql就能将该查询转换为一个const。 ? where 语句中使用主键索引作为条件。...这可能是在 const 之外最好的连接类型了,简单的 select 查询不会出现这种 type。 ? id列都是1,当id列值一样时,从上到下执行表。

    1.5K10

    MySQL基础SQL编程学习1

    字段名 FROM 表名 WHERE 字段名 BETWEEN 初始值 AND 终止值; /* ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。..." 列中选取唯一不同的值,也就是去掉 "country" 列重复值 mysql> select distinct country from websites; -- 比较运算符 mysql> SELECT...**/ mysql> SELECT * FROM websites WHERE id 1; /*显示不包括id=1的数据;*/ mysql> SELECT * FROM websites WHERE...:查询 emp 表中 SAL 列中大于等于 1500 的小于 3000 的值 mysql> SELECT * FROM emp WHERE sal between 1500 and 3000;...2.外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配,两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段

    6.2K20

    mysql explain用法和结果的含义

    const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!...ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。 ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。...filtered 显示了通过条件过滤出的行数的百分比估计值。 Extra 该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!...ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。 ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。

    2.9K20

    面试造火箭,工作拧螺丝,MySQL索引工作原理知多少?

    另外,由于我们使用的是 select * ,也就是查询表中的所有字段的值,但是 name 索引树中只存有主键 id 的值,无法满足要查询所有字段的需求,而所有字段的数据都是存放在主键 id 索引树上的,...在使用联合索引时,索引的每一列只能做等值判断,因为 MySQL 会使用最左匹配原则进行匹配,也就是从索引最左边的列开始连续匹配,在碰到范围查找时会停止匹配,如遇到 like、>、select name,age from user where name = 'BB' and age = 33; # 在使用联合索引时,会依次匹配name列和age列。...select name,age from user where age = 33; # 在使用联合索引时,由于联合索引的最左列为name列,而我们在where条件中匹配的是age列,因此不满足最左匹配原则...为什么 MySQL 要遵循最左匹配原则呢?这是因为 B+Tree 中,所有节点上的数据是有序的,当我们创建联合索引时,首先保证的是所有数据的第一列是有序的,然后再保证第二列、第三列以及后面的列有序。

    88730

    mysql explain用法和结果的含义

    这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上 Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户...const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!...ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。 ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。...DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。...因为所有与a表中order_id=100的匹配记录都将会从b表获取。这是比较常见的联接类型。

    2.2K10

    实战讲解MySQL执行计划,面试官当场要了我

    结果包含很多列 1 各列字段说明 1.1 id SELECT标识符。这是查询中SELECT的序列号,表示查询中执行select子句或者操作表的顺序。如果该行引用其他行的并集结果,则该值可为NULL。...sg on e.sa1 between sg.1osal and sg.hisal; id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 explain select * from...,从上往下顺序执行,在所有组中,id值越大, 越先执行 exp1ain select * from emp e join dept d on e.deptno = d.deptno join salgrade...如果该表是未标记为const的第一个表,则通常不好,并且在所有其他情况下通常性能也非常糟糕。一般来说,可以通过添加索引来避免ALL,这些索引允许基于早期表中的常量值或列值从表中检索行。...1.4.9 ref 对于先前表中的每个行组合,将从该表中读取具有匹配索引值的所有行。

    1.8K10
    领券