• 五、查询数据


    -- 查询语法
    SELECT  DISTINCT
        <select_list>
    FROM
        <left_table> <join_type>
    JOIN <right_table> ON <join_condition>
    WHERE
        <where_condition>
    GROUP BY
        <group_by_list>
    HAVING
        <having_condition>
    ORDER BY    
        <order_by_condition>
    LIMIT
        <limit_condition>

      机器对查询语句的解读

    ROM 
        <left_table> 
    ON 
        <join_condition>
        <join_type> 
    JOIN 
        <right_table> 
    WHERE 
    <where_condition>
    GROUP BY
        <group_by_list>
    HAVING
        <having_condition>
    select DISTINCT
        <select_list>
    ORDER BY    
        <order_by_condition>
    LIMIT
        <limit_condition>

    一、条件查询

    -- 语法:
    SELECT 
        查询列表
    FROM
        表名
    WHERE
        筛选条件;
    一、按条件表达式筛选
    
    简单条件运算符:> < = != <> >= <=
    
    二、按逻辑表达式筛选
    逻辑运算符:
    作用:用于连接条件表达式
        && || !
        and or not
        
    &&和and:两个条件都为true,结果为true,反之为false
    ||或or: 只要有一个条件为true,结果为true,反之为false
    !或not: 如果连接的条件本身为false,结果为true,反之为false
    
    三、模糊查询
        like
        between and
        in
        is null

    二、排序查询

    -- 语法
    SELECT 查询列表
    FROM 表名
    WHERE  筛选条件
    ORDER BY 排序的字段或表达式;

    特点

      1、asc代表的是升序,可以省略 desc代表的是降序

      2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段

      3、order by子句在查询语句的最后面,除了limit子句

    三、分组查询

    -- 语法
    SELECT 
      查询列表 
    FROM[ WHERE 筛选条件 ] 
    GROUP BY 分组的字段  
    [ORDER BY 排序的字段 ] ;

      特点: 1、和分组函数一同查询的字段必须是group by后出现的字段。

          2、筛选分为两类:分组前筛选和分组后筛选

     针对的表位置连接的关键字
    分组前筛选 原始表 group by前 where
    分组后筛选 group by后的结果集 group by后 having

    四、连接查询

    分类:
    
    按年代分类:
            sql92标准:仅仅支持内连接
            sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
    
    按功能分类:
        内连接:
            等值连接
            非等值连接
            自连接
        外连接:
            左外连接
            右外连接
            全外连接
        交叉连接  union [all]

      七中Join查询

    -- 测试数据
    CREATE TABLE tbl_dept (
      id INT (11) NOT NULL AUTO_INCREMENT,
      deptName VARCHAR (30) DEFAULT NULL,
      locadd VARCHAR (40) DEFAULT NULL ,
      PRIMARY KEY(id)
    ) ENGINE=INNODB AUTO_INCREMENT =1 DEFAULT CHARSET =utf8;
    
    CREATE TABLE tbl_emp(
    id INT(11) NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(30) DEFAULT NULL,
    deptid INT(11) DEFAULT NULL,
    PRIMARY KEY(id),
    KEY fk_dept_id (deptid )
    #CONSTRAINT fk_dept_id FOREIGN KEY (deptid) REFERENCE tbl_dept (id)
    ) ENGINE=INNODB AUTO_INCREMENT =1 DEFAULT CHARSET =utf8;
    
    INSERT INTO tbl_dept(deptname,locadd) VALUES('HD',11);
    INSERT INTO tbl_dept(deptname,locadd) VALUES('HR',12);
    INSERT INTO tbl_dept(deptname,locadd) VALUES('MK',13);
    INSERT INTO tbl_dept(deptname,locadd) VALUES('MIS',14);
    INSERT INTO tbl_dept(deptname,locadd) VALUES('FD',15);
    
    INSERT INTO tbl_emp(NAME,deptid) VALUES('z3',1);
    INSERT INTO tbl_emp(NAME,deptid) VALUES('z4',1);
    INSERT INTO tbl_emp(NAME,deptid) VALUES('z5',1);
    INSERT INTO tbl_emp(NAME,deptid) VALUES('w5',2);
    INSERT INTO tbl_emp(NAME,deptid) VALUES('w6',2);
    INSERT INTO tbl_emp(NAME,deptid) VALUES('w7',7);

    4.1、A、B表的共有

    -- 语法:SELECT <selecet_list> FROM  tbA A INNER JOIN tbB B ON A.key = B.key
    SELECT * FROM tbl_emp e INNER JOIN tbl_dept d ON e.`deptid` =d.`id`

    4.2、A表的独有加A、B表的共有

    -- 语法:SELECT <selecet_list> FROM  tbA A LEFT JOIN tbB B ON A.key = B.key
    SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.`deptid` =d.`id`  

    4.3、B表的独有加A、B表的共有

    -- 语法:SELECT <selecet_list> FROM  tbA A INNER JOIN tbB B ON A.key = B.key
    SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.`deptid` =d.`id` 

    4.4、A表的独有

    -- 语法:SELECT <selecet_list> FROM  tbA A LEFT JOIN tbB B ON A.key = B.key WHERE B.key IS NULL
    SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.`deptid` =d.`id` WHERE d.`id` IS NULL

    4.5、B表的独有

     

    -- 语法:SELECT <selecet_list> FROM  tbA A  RIGHT JOIN tbB B ON A.key = B.key WHERE A.key IS NULL
    SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.deptid = d.id WHERE  d.id IS NULL

    4.6、A表的独有+B表的独有+A、B表的共有

    -- 语法:SELECT <selecet_list> FROM  tbA A  FULL OUTER JOIN tbB B ON A.key = B.key
    
    # 默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALLSELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.`deptid` =d.`id`  
    UNION
    SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.`deptid` =d.`id`  

    4.7、A表的独有+B表的独有

    -- 语法:SELECT <selecet_list> FROM  tbA A  FULL OUTER JOIN tbB B ON A.key = B.key where 
    # A.key IS NULL  OR  B.key IS NULL
    SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.`deptid` =d.`id` WHERE d.`id` IS NULL
    UNION 
    SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.`deptid` =d.`id`   WHERE e.`id` IS NULL

    五、分页查询

      应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

    -- 语法:
    SELECT 
      查询列表 
    FROM[ JOIN TYPE  JOIN 表 2 ON 连接条件
      WHERE 筛选条件 
      GROUP BY 分组字段 
      HAVING 分组后的筛选 
      ORDER BY 排序的字段 ] 
      LIMIT [ OFFSET, ] size ;
    • offset要显示条目的起始索引(起始索引从0开始)

    • size 要显示的条目个数

    特点:

       ①limit语句放在查询语句的最后

       ②公式 要显示的页数 (page-1)*size,每页的条目数size

  • 相关阅读:
    STM8s窗口看门狗
    开篇
    习题6-8 统计一行文本的单词个数
    习题9-4 查找书籍
    习题9-3 平面向量加法
    习题9-1 时间换算
    习题7-8 字符串转换成十进制整数
    习题8-10 输出学生成绩
    习题7-7 字符串替换
    习题7-6 统计大写辅音字母
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14023615.html
Copyright © 2020-2023  润新知