美文网首页大数据
5000年来最易看懂的MYSQL DQL语言

5000年来最易看懂的MYSQL DQL语言

作者: 堂哥000 | 来源:发表于2018-09-15 18:49 被阅读13次

    MYSQL 的查询语言——————DQL
    一、DQL语言基本规则

    ①DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
    ②数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。
    ③查询语句书写和执行顺序
    书写:select -from- where- group by- having- order by-limit
    执行:from - where -group by -having - select - order by-limit

    二、建立数据库表格
    student表


    student.png

    score表


    score.png
    三、DQL基本语法
    查询关键字:SELECT
    1、基本查询:
    SELECT  *  FROM  student //查询student表的全部列
    SELECT sno , sname FROM student //查询表格的某些列的全部信息
    

    2、条件查询:

    ①select  *  from  student  where  class = 95033;
    
    1.png

    其中“=”可换成 =、!=、<>(不等于)、<、<=、>、>=;等符号
    “*”可换成我们想要显示的某些列

    ②select * from student where sno in ( 107,109);//sno等于107,109的信息
    
    2.png

    其他条件查询

    select * from student where sno  BETWEEN 107 AND 109;
    select * from student where sno  IS NULL;
    select * from student where sno  IS  NULL  and  sno=107;
    select * from student where sno  IS  NULL  or  sno=107;
    select * from student where sno  IS  not  NULL;
    

    3、模糊查询

    select * from student where sname like "王%";//以王开头的姓名
    
    3.png
    select * from student where sname like "%王%";//sanme中含有“王”字的信息
    select * from student where sname like "_";//”_”表示单个字母
    

    4、字段控制查询

    (1) 去除重复记录
    SELECT DISTINCT class FROM student;
    (2) 相同类型字段可做运算,列名起别名,把NULL值换为0
    SELECT class+IFNULL(sno,0) AS 小名 FROM student;//别名的AS可省略


    4.png

    (3)排序查询

    SELECT * FROM student ORDER BY sno asc;//升序
    SELECT * FROM student ORDER BY sno desc;//降序
    SELECT * FROM student ORDER BY sno  desc , class  asc;//先sno降序,sno相同再按class升序
    

    5、聚合函数(纵向运算)
    COUNT():统计指定列不为NULL的记录行数;

    SELECT count(1) FROM student ;
    SELECT count(1) FROM student where sno=107;
    

    MAX():计算指定列的最大值,如果指定列是字符串类型,使用字符串排序运算;

    SELECT MAX(sno) FROM student ;
    

    MIN():计算指定列的最小值,如果指定列是字符串类型,使用字符串排序运算;

    SELECT MIN(sno) FROM student ;
    

    SUM():计算指定列的数值和,如果指定列类型不是数值类型,计算结果为0;

    SLECT SUM(sno) FROM student ;
    

    AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

    SELECT AVG(sno) FROM student ;
    

    6、分组查询
    1、凡和聚合函数同时出现的列名,则一定要写在group by 之后

    SELECT class, count(1) FROM student group by class ;
    

    2、对分组后限定的HAVING 子句

    SELECT class, count(1) FROM student group by class HAVING count(1) >=2;
    

    注:having与where的区别:
    1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
    2.having后面可以使用分组函数(统计函数) where后面不可以使用分组函数。
    3.WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而 HAVING是对分组后数据的约束。

    7、控制行数实现分页查询
    若一页行数为10;

    SELECT * FROM student LIMIT 0, 9;//从0行开始到第九行结束,为第一页数据。
    

    四、多表查询
    1、合并结果集(union , union all)

    SELECT* FROM student UNION SELECT * FROM student;//去除重复数据
    SELECT* FROM student UNION ALL SELECT * FROM student;//不去除重复数据
    注:要合并的两表的列数、列类型必须相同。
    

    2、连接查询
    2.1内连接
    特点:查询结果必须满足条件

    SELECT * FROM student,score WHERE student.sno=score.sno ;(方言形式,可将*换成指定列)
    SELECT * FROM student INNER JOIN score ON student.sno=score.sno ;(标准形式内连接)
    

    2.2 外连接
    特点:查询结果必须满足条件
    ①左连接是先查询出左表(以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示 NULL。

     SELECT * FROM student LEFT OUTER JOIN score ON student.sno=score.sno ;
    

    ②右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL;

    SELECT * FROM student RIGHT OUTER JOIN score ON student.sno=score.sno 
    

    3、子查询
    定义及形式:一个select语句中包含另一个完整的select语句。 子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
    子查询出现的位置:
    a. where后,作为条为被查询的一条件的一部分;

    SELECT * FROM score WHERE degree > (SELECT degree FROM score WHERE cno='3-245' and sno=103);
    

    b. from后,作表;

    SELECT count(1)  FROM  (SELECT sno FROM score WHERE cno='3-245')  test;
    

    test为子查询表的别名。派生表必须有自己的别名;
    c. 当子查询出现在where后作为条件且子查询形式为多行单列时,还可以使用如下关键字:

    1.any
    SELECT * FROM score WHERE sno = any(SELECT sno FROM score WHERE cno=’3-245’);
    2.all
    SELECT * FROM score WHERE degree< all(SELECT degree FROM score WHERE sno=103);
    

    DQL语言到此告一段落,欲知其他内容,请听下回分解。

    相关文章

      网友评论

        本文标题:5000年来最易看懂的MYSQL DQL语言

        本文链接:https://www.haomeiwen.com/subject/gomzgftx.html