• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL 使用DQL命令查询数据的实现方法

    本篇文章博主将带大家一起学习MySQL中常用的数据查询语言。

    DQL(Data Query Language 数据查询语言)

    SELECT 语法

    SELECT [ALL | DISTINCT]
    { * | table.* | [table.field1 [as alias1][,table.field2] [as alias2][,...]]}
    FROM table_name [as table_alias]
    [left | out | inner join table_name2] #联合查询
    [WHERE ...]   #指定结果需要满足的条件
    [GROUP BY ...]   #指定结果按照哪几个字段来分组
    [HAVING ...]   #过滤分组的记录必须满足的次要条件
    [ODER BY ...]   #指定查询记录按一个或者多个条件排序
    [LIMIT [偏移量,返回结果记录数]; #指定查询的记录从哪条至哪条

    基本查询语句AS

    以下例子用student表中的数据。

    查询表中所有数据列结果,采用 “*” 符号,效率低

    select * from student;

    可指定查询列,效率高

    select StudentName,Phone from student;

     AS 子句的作用和用法

    注意:AS 可省略不写

    (1)可给数据列取一个新别名  

    select StudentName as '学生姓名' from student;

    (2)给表取别名

    select stu.address from student as stu;

    (3)可把计算或总结的结果用另一个新名称来代替

    SELECT Phone +1 AS Tel FROM student;

    DISTINCT 关键字

    作用:去掉SELECT查询出来的重复值(当所有返回值都相同时,只返回一条记录)

    语法:

    SELECT DISTINCT 字段名1,字段名2,... from 表名

    注意:ALL 关键字是默认的,返回所有记录,与之相反

    当过滤多列重复值时,只有当选择过滤的列都存在重复值才进行过滤

    SELECT DISTINCT StudentNo,address from student;

    过滤单列:查询学生表中的地址

    SELECT DISTINCT address from student;

    SQL语句中的表达式

    SELECT VERSION(),100*3 as 乘积; #返回Mysql 版本和计算结果
     
    SELECT NOW() '当前时间'; #返回当前时间

    避免SQL返回结果中包含“.” ,“*”,和括号等干扰开发语言程序

    SELECT VERSION() as MySQL_V,12.3*100 as expression;
    #返回结果不会与后台开发程序发生混淆

    拼接 CONCAT

    SELECT CONCAT(studentName,'@.com') as Email from student;

    数值类型相加

    select StudentNo+100 from student;

    比较运算符通配符

    where条件语句:用于检索数据表中符合条件的记录

    搜索条件可以由一个或多个逻辑表达式组成,结果一般为真或假

    搜索条件的组成:逻辑操作符、比较操作符

    #where 条件语句
    select * from student where address='四川';
     
    #查询学生表中电话号码不为空的学员姓名
    select StudentName from student where Phone is not null;
     
    #查询学生表中电话号码为空的学员姓名
    select StudentName from student where Phone is null;
     
    #查询刚删掉的数据——空值
    select StudentName from student where Phone = '';
     
    # BETWEEN AND 适用于时间范围

    逻辑操作符

    比较操作符

    使用 LIKE 关键字进行模糊查询

    #查询学生表中姓张*的学生姓名
    SELECT StudentName from student where studentname like '张_';
     
    SELECT StudentName from student where studentname like '%丽%';
    # IN
    SELECT * from student where Address in ('四川','上海');

    注意:

    NULL

    内连接自查询

    如果需要多张数据表的数据进行查询,则可以通过连接运算符实现多个查询。

    分类包括:

    ORDER BY 排序查询

    对select 语句查询得到的结果,按某些字段进行排序

    与DESC(降序)或ASC(升序)搭配使用,默认为ASC

    以subject表和grade表数据为例:

    SELECT * from subject ORDER BY classhour; #升序
    SELECT * from subject ORDER BY classhour desc; #降序

    多字段排序:先按照第一个字段排序,再按照第二个字段排序。如果第一个字段数据相同,再按照第二个字段排序。

    SELECT * from subject ORDER BY classHour,GradeID;

    LIMIT分页

    LIMIT   [m,] n  或  LIMIT  n  OFFSET  m

    限制SELECT返回结果的行数

    m为第一个返回记录行的偏移量

    n返回记录行的数目

    注意:

    例如:

    SELECT * FROM grade LIMIT 3; #返回前3条记录
    SELECT * FROM grade LIMIT 1,3; #返回2~4条记录

     总记录数:total

    SELECT COUNT(subjectNO) '总数据' from subject;

    总页数:int  totalPage = total % pagesize ==0 ? total / pagesize : total  / pagesize  + 1

    子查询

    在查询语句WHERE 条件子句中,又嵌套了另外一个查询语句

    注意:子查询返回的结果一般是集合,建议使用IN关键字

    SELECT subjectName from subject
    where gradeID IN
    (SELECT GradeID from grade);

    聚合函数

    常用的统计函数:COUNT()、SUM()、AVG()、MAX()、MIN()

    SELECT COUNT(StudentNo) '总数据' FROM student;
    SELECT sum(classHour) '总学时'from subject;
    SELECT AVG(classHour) '平均学时' FROM subject;
    SELECT MAX(classHour) '最长学时' FROM subject;
    SELECT MIN(classHour) '最短学时' FROM subject;

    分组 GROUP BY

    使用 GROUP BY 关键字对查询结果分组

    以 student 表为例

    (1)对student 表按照地址分组统计  group by

    SELECT Address,COUNT(Address) FROM student GROUP BY Address;

    HAVING 过滤分组的记录必须满足的次要条件

    (2)对 student 表 按照地址分组,满足地址=1的 HAVING

    SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1;

    合并 UNION 、UNION

    注意:合并两张表时,列数必须一样才能合并。

    两表列数不同时,会报以下错误:

         [SQL]SELECT * FROM grade UNION SELECT * FROM student;
         [Err] 1222 - The used SELECT statements have a different number of columns

    (1)合并 subject 表和 student表

    SELECT * FROM subject UNION SELECT * FROM student;  
    SELECT * FROM subject UNION ALL SELECT * FROM student;

    子查询   EXISTS ——>true  false

    EXISTS  / NOT EXISTS 子查询条件成立则显示父查询的结果,否则不显示结果

    (1)子查询条件为真 (grade 表中 gradeid 1~5,存在 1)

    SELECT subjectName,GradeID FROM subject
    WHERE EXISTS 
    (SELECT * FROM grade WHERE GradeID=1);

    SELECT subjectName,GradeID FROM subject
    WHERE NOT EXISTS 
    (SELECT * FROM grade WHERE GradeID=999);

    (2)子查询条件为假  (grade 表中 gradeid 1~5,不存在 999)

    SELECT subjectName,GradeID FROM subject
    WHERE EXISTS 
    (SELECT * FROM grade WHERE GradeID=999);

    SELECT subjectName,GradeID FROM subject
    WHERE NOT EXISTS 
    (SELECT * FROM grade WHERE GradeID=1);

    子查询(any all)

    ANY :判断条件中,若子查询中任意一个值满足条件,则执行父查询
    ALL :判断条件中,若子查询中所有值满足条件,则执行父查询
     (1)满足条件:存在 subject.gradeid >= grade.gradeid ,执行父查询 

    SELECT subjectname,gradeid FROM subject 
    WHERE GradeID >=ANY
    (SELECT GradeID FROM grade);

    (2)不满足条件:所有subject.gradeid >= grade.gradeid ,不执行父查询 

    SELECT subjectname,gradeid FROM subject 
    WHERE GradeID >=ALL
    (SELECT GradeID FROM grade);

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 对MySql经常使用语句的全面总结(必看篇)
    • Mysql常用sql语句汇总
    • Mysql查询最近一条记录的sql语句(优化篇)
    • 整理MySql常用查询语句(23种)
    • Mysql学习之数据库检索语句DQL大全小白篇
    上一篇:MySQL5.6解压版服务无法启动之系统错误1067问题
    下一篇:Mysql巧用join优化sql的方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL 使用DQL命令查询数据的实现方法 MySQL,使用,DQL,命令,查询,