MySQL查询(未完结)

MySql查询

单表查询:

  • 查询所有字段

    SELECT * FROM 表名;  '*' 代表所有字段
  • 查询指定字段
    SELECT 字段名1, 字段名2 FROM 表名;
  • 按照指定条件查询记录
    1.    查询某条特定记录:
      SELECT * FROM 表名 WHERE 字段名 = '条件';
    
    2.    带 IN 关键字的条件查询:
      SELECT * FROM 表名 WHERE 字段名 IN ('范围');
      SELECT * FROM 表名 WHERE 字段名 NOT IN ('范围');
    
    3.    带 BETWEEN AND 关键字的调价查询:
      SELECT * FROM 表名 WHERE 字段名 BETWEEN '左范围' AND '右范围';
      SELECT * FROM 表名 WHERE 字段名 NOT BETWEEN '左范围' AND '右范围';
    
    4.    带 LIKE 关键字的模糊条件查询:
      " % " 表示比配任意长度的字符.
      " _ " 表示只能匹配一个长度的字符.
      SELECT * FROM 表名 WHERE 字段名 LIKE '条件 + 通配符';
      例子: SELECT * FROM student WHERE name LIKE 'B_B';
           查询名字以B开头以B结尾的只能是三个字符的记录
             SELECT * FROM student WHERE name LIKE 'B__B';
             查询名字以B开头以B结尾的只能是四个字符的记录
             SELECT * FROM student WHERE name LIKE 'B%B';
           查询名字以B开头以B结尾的可以是任意字符的记录
    
    5.    带 AND 的多条件查询
      AND 相当于'逻辑与', 也就是说同时满足条件才算匹配
      SELECT * FROM 表名 WHERE 字段1 = '条件1' AND 字段2 > '条件2';
        同时满足条件一,条件二两个条件才能匹配
    
    6. 带 OR 的多条件查询
      OR 相当于'逻辑或', 也就是说只要满足条件之一就可以匹配
      SELECT * FROM 表名 WHERE 字段1 = '条件1' or 字段2 = '条件2';
      满足条件1或者满足条件2即可匹配
    
    7. 关键字 DISTINCT (查询结果不重复)
      SELECT DISTINCT 字段1 FROM 表名;
      有时多条记录的某一个字段可能值时重复的,但我们并不想要重复的数据.在字段名前加上 DISTINCT 即可
    
    8.    分组查询:
      SELECT 字段1 FROM 表名 GROUP BY 字段1;
      解释:
          注意分组动作是查询后到记录后在进行的,所以不能字段1要么是 *, 要么分组字段名在前面已经被查询
      SELECT 字段1, COUNT(字段2), GROUP_CONCAT(字段2) FROM 表名 GROUP BY 字段1;
      解释:
          COUNT() 函数: 计算有多少条记录,
          GROUP_CONCAT() 函数: 将分组中的某个字段名显示出来
      SELECT 字段1,COUNT(字段2) FROM 表名 GROUP BY 字段1 HAVING COUNT(字段2) > 条件1;
      解释:
          分组之后还可以进行条件过滤, 将不想要的分组丢弃, 使用 HAVING 关键字.
            HAVING 和 WHERE 的区别: 前者是在分组后过滤, 后者是在分组前过滤
    9.    使用LIMIT限制查询结果的数量
      SELECT * FROM 表名 LIMIT 4;
      LIMIT [位置偏移量] [行数]
    
      SELECT * FROM 表名 LIMIT 4,5
      表示从第五条数据开始读, 往后读三条数据, 也就是读第五条到第八条.
      LIMIT 第一个参数不写默认就是0 需要两个参数才能确定一个取记录的范围.
    
    10.   查询空值:
      SELECT * FROM 表名 WHERE 字段名 IS NULL;
      查询字段名是NULL的记录
      SELECT * FROM 表名 WHERE 字段名 IS NOT NULL;
      查询字段名不是NULL的记录

多表查询:

  • 普通双表连接查询

    SELECT s.字段名1, s.字段名2, f.字段名1, f.字段名2 FROM 表1 AS f, 表2 AS s WHERE 条件1
    解释:给表1建一个别名为f, 给表2建一个别名为s, 查询s表中的字段1,2 和 f表中的字段1,2 在满足条件1下      的所有记录
  • 内连接查询
    使用 表1 INNER JOIN 表2 ON 连接条件
    SELECT s.字段1 FROM 表1 AS s INNER JOIN 表2 as f ON f.字段1 = s.字段1
    解释:查询表1中的所有字段1和表2中的字段1相等的记录中的字段1
    
    PS:自连接? : 涉及到的两张表都是同一张表.
       SELECT f2.字段1,f2.字段2 FROM 表1 AS f1 INNER JOIN 表1 as f2 ON f1.字段1 = f2.字段1 AND f1.字段1 = '条件1';
       查询表的字段1 = '条件1' 的其他记录
  • 外链接查询
    • 左连接

      使用 表1 LEFT JOIN 表2 ON 连接条件 格式
      SELECT s.字段1, f.字段1,f.字段2 FROM 表1 as s LEFT JOIN 表2 as f ON s.字段1 = f.字段1;
      解释:
          根据语序我们知道 表1 是在左面 JOIN 进表2的 所以在表1中 s.字段1 不等于 f.字段1 的记录也会被查询出来.只不过查询出来的f.字段1, f.字段2 值为 NULL
    • 右连接
      使用 表1 RIGHT JOIN 表2 ON 连接条件 格式
      SELECT s.字段1, f.字段1,f.字段2 FROM 表1 as s RIGHT JOIN 表2 as f ON s.字段1 = f.字段1;
      解释:
          和左连接差不多,只不过是右表的数据全部显示出来

常用函数:

  • SUM()

    SUM(字段名):求总和,返回指定列值的总和
  • COUNT()
    COUNT(*):计算表中的总行数
    COUNT(字段名):计算该字段名下的总行数,空值也就是 NULL 值不会记录
  • AVG()
    AVG(字段名):求平均值
  • MAX()
    MAX(字段名):求字段中最大的值
  • MIN()
    MIN(字段名):求字段中最小的值

原文地址:https://www.cnblogs.com/Treasuremy/p/10472826.html

时间: 2024-08-04 09:02:39

MySQL查询(未完结)的相关文章

4543 普通平衡树[未完结]

4543 普通平衡树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 这是一道模板题. 如果觉得这个题水的可以做一下4544压行,是千古神犇花爸爸出的神犇题. 您需要写一种数据结构(可参考题目标题,但是这句话其实并没有什么用233),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x

一篇文章让Oracle程序猿学会MySql【未完待续】

一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方面和难度方面都比MySql要高一些,所以精通Oracle的DB在学习MySql的时候,没有必要从头到尾再去搞一遍,只需要掌握两者的用法区别即可.故本篇文章就针对Oracle和MySql的区别来把MySql的知识掌握住,在文章中,实例都是MySql环境下的实例,而Oracle可能知识一句话来概括,所以

MySQL查询缓存详解

一:缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELECT语句和该查询语句的结果集做了一个HASH映射并保存在一定的内存区域中.当客户端发起SQL查询时,Query Cache的查找逻辑是,先对SQL进行相应的权限验证,接着就通过Query Cache来查找结果(注意必须是完全相同,即使多一个空格或者大小写不 同都认为不同,即使完全相同的SQL,如果使

数据库之MySQL查询

查询 创建数据库.数据表 -- 创建数据库 create database python_test_1 charset=utf8; -- 使用数据库 use python_test_1; -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(20) default '', age tinyint unsigned default 0, height

mysql查询、子查询、连接查询

mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默

生产要不要开启MySQL查询缓存

一.前言在当今的各种系统中,缓存是对系统性能优化的重要手段.MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议生产环境中把MySQL Query Cache关闭.按道理,MySQL Server默认打开,是鼓励用户使用缓存,但是大拿们却建议关闭此功能,并且国内各个云厂商提供的MySQL云服务中默认都是关闭这个功能,这是为什么?他们在使用中遇到了什么坑?本文将会从以下几方面来详解MySQL Query Cach

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

mysql查询练习

mysql> #查询每个栏目最贵的商品 mysql> select goods_id,shop_price,cat_id from (select goods_id,shop_price,cat_id from goods order by shop_price desc) as temp group by cat_id; +----------+------------+--------+ | goods_id | shop_price | cat_id | +----------+----

Mysql查询缓存碎片、缓存命中率及Nagios监控

Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STATUS LIKE 'qcache%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 5 |