zoukankan      html  css  js  c++  java
  • 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(字段名):求字段中最小的值
      
  • 相关阅读:
    Linux使用locate命令定位文件
    【iOS开发-54】案例学习:通过UIScrollView的缩放图片功能练习代理模式的详细实现
    数据结构—单链表(类C语言描写叙述)
    怎样訪问pcie整个4k的配置空间
    [Swift]LeetCode988. 从叶结点开始的最小字符串 | Smallest String Starting From Leaf
    [Swift]LeetCode985. 查询后的偶数和 | Sum of Even Numbers After Queries
    [Swift]LeetCode494. 目标和 | Target Sum
    [Swift]LeetCode493. 翻转对 | Reverse Pairs
    [Swift]LeetCode491. 递增子序列 | Increasing Subsequences
    [Swift]LeetCode488. 祖玛游戏 | Zuma Game
  • 原文地址:https://www.cnblogs.com/Treasuremy/p/10472826.html
Copyright © 2011-2022 走看看