首先创建两个表(用作测试):tb_student、tb_class 

CREATE TABLE tb_class(
             cid INT PRIMARY KEY AUTO_INCREMENT,
             cname VARCHAR(20) NOT NULL
 );        CREATE TABLE tb_student(
             sid INT PRIMARY KEY AUTO_INCREMENT,
             sname VARCHAR(20) NOT NULL,            gender CHAR(1),
            age INT,
             cid INT,
             FOREIGN KEY(cid) REFERENCES tb_class(cid)
 );

一.DQL基础查询

关键字:select from

1、查询学生表中所有的数据
        SELECT * FROM tb_student WHERE gender='男';
        2.查询所有年龄在18到20岁的学生信息
        SELECT * FROM tb_student WHERE age>=18 AND age<=20;
        或者
        SELECT   *      FROM   tb_student   WHERE age BETWEEN    18    AND   20;
        3.查询出所有没有录入年龄的学生的信息
        SELECT   *    FROM   tb_student    WHERE   age   IS   NULL;

  模糊查询关键字:like

 通配符:

%: 代表任意个字符
   _:代表一个字符
        1.查询所有姓王的学生信息
        SELECT    *    FROM    tb_student    WHERE  sname    LIKE  '王%';
        2.查询所有名字第二个字是杰的学生信息
        SELECT    *    FROM    tb_student    WHERE    sname   LIKE   '_杰%';
        3.查询名字中有明的学生信息
        SELECT     *   FROM   tb_student    WHERE      sname     LIKE   '%明%';

二.DQL排序

排序关键字:order by
        升序:默认/asc
        降序:desc
         1、查询所有学生的信息,要求按照学生的年龄从小到大的显示
        SELECT   *   FROM   tb_student    ORDER   BY  age  (ASC);
        2.  查询所有学生的信息,要求按照学生的年龄从大到小的显示
        SELECT   *   FROM  tb_student    ORDER   BY  age   DESC;
        3.查询年龄最大的三个学生信息
        SELECT   *    FROM   tb_student   ORDER  BY   age  DESC  LIMIT  3;
        前几个:limit    3;

        函数:

        

sql查询记录在mysql中如何查询 sqlyog如何查询数据_big data

        

         聚合函数

             

                主要对数据进行统计计算,返回单个值。

最大值:max()
                最小值:min()
                求和:sum()
                数据条数:count()
                平均值:avg()
                1.查询学生平均年龄
                     SELECT   AVG (age)  FROM   tb_student;

三.DQL分组查询


将表数据按照指定条件进行分组,再对分组后的数据进行汇总。分组查询通常会使用聚合函数,对分组后的数据进行统计计算。

关键字:group by [having]

语法:select 要查询的内容 from 表名 group by 分组列 [having 筛选条件];

1、查询出每个班的学生人数

分析:cid相同的学生是同班同学,所以以cid来进行分组。统计每个组的数据条数。

  SELECT   cid,COUNT(*)   FROM   tb_student    GROUP  BY   cid;

  

having和where的区别:

1、having是对分组后的数据进行筛选,where是对分组前的数据进行筛选

2、SQL语句中有having必定有group by,有group by不一定having

3、如果一个SQL语句中,既有where又有having,先执行where后执行having

4、where后面不能使用聚合函数,having只能使用聚合函数和分组列

四.DQL分页查询

关键字:limit
用法:
limit n:代表前n条数据
limit m,n:代表从第m条数据开始取n条数据,m是数据的索引
1、查询出学生表前三条数据
SELECT  *   FROM   tb_student   LIMIT   3;
2、如果每页显示3条数据,请查询出第二页的数据
SELECT   *   FROM   tb_student  LIMIT  3,3;
        
分页:现有条件,每页显示条数count,第几页page
计算:
page:1 2 3 4 5 ……
m: 0 3 6 9 12 ……
m = (page-1)*count

五.DQL连接查询


定义:通过连接条件同时查询出多张表的数据。

隐式内链接:把连接条件放到where关键字后面。

语法:select 要查询的内容 from 表1,表2 where 连接条件 [and 筛选条件];

显式内连接:使用inner join来连接,将连接条件放到on后面。

语法:select 要查询的内容 from 表1 inner join 表2 on 连接条件 [where 筛选条件];

外连接

两张表中一张表作为基表,查询出该表所有的数据,另外一张表作为连接表,查询出该表与基表能够匹配的数据。如果基表数据匹配不上,就用null来填充。

语法:select 要查询的内容 from 基表 left join 连接表 on 连接条件 [where 筛选条件];

右外连接:

        语法:select 要查询的内容 from 连接表 right join 基表 on 连接条件 [where 筛选条件];

六.子查询

        当一个查询的结果是另一个查询需要的条件时,就需要使用子查询。

        例如:

        查询出年龄比张三大的学生的信息

     

方式一:
        SELECT   age  FROM   tb_student   WHERE  age >(SELECT   age  FROM  tb_student  WHERE  sname='张三' );
        方式二:
        SELECT  age  FROM   tb_student   WHERE  age>ANY(SELECT  age  FROM  tb_student  WHERE  sname='张三');