• Day27、使用DQL命令查询数据


    1、DQL语言

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

                    1)查询数据库数据,如SELECT语句

                    2)简单的单表查询或多表的复杂查询和嵌套查询

                    3)数据库语言中最核心、最重要的语句

                    4)使用频率最高的语句

                1.2、SELECT语法

    1. SELECT [ALL | DISTINCT]
    2. { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] }
    3. FROM table_name [ as table_ alias ]
    4. [ left|out|inner join table_name2 ] #联合查询
    5. [ WHERE … ] #指定结果需满足的条件
    6. [ GROUP BY …] #指定结果按照哪几个字段来分组
    7. [ HAVING …] #过滤分组的记录必须满足的次要条件
    8. [ ORDER BY… ] #指定查询记录按一个或者多个条件排序
    9. [ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ;
    10. #指定查询的记录从哪条至哪条

                    []   括号代表可选的;                                                                                      

                    {}   括号代表必须的;

                    #    MySQL语句中的注释符,也可以用   /*该处为注释*/ 

            1.3、指定查询字段

                    1)查询表中所有的数据列结果,采用“*”符号

    select   *   from student;

                    2)可指定查询的结果数据列

                            如只查询student表中的学号、姓名、电话

    SELECT     StudentNo, StudentName, Phone  FROM  student;

                    3)如区分连接查询时两个表有同名的字段

    SELECT student.StudentNo,StudentName,StudentResult FROM student ,result

     

            1.4、AS子句 

                    1)AS子句作用

                            可给数据列取一个新别名

                            可给表取一个新别名

                            可把经计算或总结的结果用另外一个新名称来代替

                    2)AS子句用法

    1. SELECT StudentNo AS “学号” FROM student;
    2. SELECT a.StudentNo FROM student AS a;
    3. SELECT Phone+1 AS Tel FROM student;

                            AS 也可省略不写

            1.5、DISTINCT关键字的使用

                    1)作用

                            去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条

                    2)

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

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

    1. #查询成绩表中的所包含的课程ID
    2. SELECT DISTINCT SubjectNo FROM result;

     

            1.6、使用表达式的列

                    1)表达式一般由文本值、列值、NULL、函数和操作符等组成

                    2)应用场景

                            SELECT语句返回结果列中使用

                            SELECT语句的ORDER  BY、HAVING等子句中使用

                            DML语句中的where条件语句中使用表达式

                    3)在SQL语句中使用表达式

                            返回的列中使用,如

    1. SELECT version() , 100*3 #返回MySQL版本和计算结果
    2. SELECT SubjectName “课程名称”, ClassHour+10 AS “新学时” FROM subject;
    3. #给返回结果中的课时都加10个课时

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

    1. SELECT version() as MySQL_V , 123.44*100 AS EXPRESSION;
    2. #返回结果不会与后台开发程序发生混淆

     

            1.7、where条件语句

                    1)用于检索数据表中符合条件的记录

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

                    3)搜索条件的组成

                            逻辑操作符

                            比较操作符

            1.8、逻辑操作符

     

             1.9、比较操作符

                             1、数值数据类型的记录之间才能进行算术运算

                            2、相同数据类型的数据之间才能进行比较

            1.10、BETWEEN AND范围查询

                    1)根据一个范围值来检索

    SELECT  字段列1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN1 AND2

                    2)等同于 >= 和 <= 联合使用

    1. #查询课程表中课时在110120之间的所有记录
    2. SELECT * FROM subject WHERE ClassHour BETWEEN 110 AND 120;
    3. 等同于:
    4. SELECT * FROM subject WHERE ClassHour >= 110 AND ClassHour <=120;

     

            1.11、LIKE模糊查询

                    1)在WHERE子句中,使用LIKE关键字进行模糊查询

                            与“%”一起使用,表示匹配0或任意多个字符

                            与“_”一起使用,表示匹配单个字符

    1. #查询包含“数学”的所有课程
    2. SELECT * FROM subject WHERE SubjectName LIKE "%数学%";
    3. #查询所有姓名为“李**”三个字的学生信息
    4. SELECT StudentNo,StudentName FROM student
    5. WHERE StudentName LIKE "李__";

     

            1.12、 使用IN进行范围查询

                    1)在WHERE子句中使用IN进行范围查询

    SELECT  字段列1,字段2 ,…FROM 表名 WHERE   字段x  IN  ( 值1,值2,值3…)  

                    2)查询的字段x的值,至少与括号中的一个值相同

                    3)多个值之间用英文逗号隔开

    1. SELECT * FROM subject where ClassHour = 100 OR ClassHour =110 OR ClassHour = 120; #普通处理方式
    2. SELECT * FROM subject where ClassHour IN ( 100, 110,120 );
    3. #使用IN进行查询方式,更为简洁,效率更高

     

            1.13、 NULL空值条件查询

                    1)NULL

                            NULL代表“无值”

                            区别于零值0和空符串“”

                            只能出现在定义允许为NULL的字段

                            须使用 IS NULL 或 IS NOT NULL 比较操作符去比较

    2、连接查询

            2.1、连接查询

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

                    2)分类包括

                            a、内连接 ( inner  join)

                                    等值和非等值的连接查询

                                    自身连接查询

                            b、外连接 ( out   join )

                                    左连接(LEFT   JOIN)

                                    右连接  ( RIGHT  JOIN)

            2.2、内连接查询

                            1)INNER JOIN内连接

                            在表中至少一个匹配时,则返回记录

    1. SELECT 字段1,字段2,… FROM table_1
    2. INNER JOIN table_2 ON table_1.字段x = table_2.字段y;
    3. # INNER JOINJOIN 是相同的;
    4. # 如table_1中的行在table_2中没有匹配,则不返回;
    5. #要求:从subject和grade数据表查询课程名称和所属年级名称
    6. SELECT SubjectName,GradeName FROM subject INNER JOIN grade ON subject.GradeID= grade.GradeID;

                            2)等值和非等值的连接查询

                            与单表查询类似,都是SELECT语句

                            把多个表放到FROM后,并用逗号隔开

                            可使用AS关键字取别名,便于引用

                            如无重名查询字段则可省略数据表的指定

    1. #要求:从subject和grade数据表查询课程名称和所属年级名称
    2. #非等值连接查询
    3. SELECT SubjectName, GradeName FROM subject, grade;
    4. #等值查询
    5. SELECT SubjectName, GradeName FROM subject, grade
    6. WHERE subject.GradeID = grade.GradeID;

     

            2.3、外连接

                    1)左外连接(LEFT JOIN)

                            从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行

    1. SELECT 字段1,字段2,… FROM table_1
    2. LEFT [ OUTER ] JOIN table_2 ON table_1.字段x = table_2.字段y;

                    2)右外连接(RIGHT JOIN)

                            从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行

    1. SELECT 字段1,字段2,… FROM table_1
    2. RIGHT [ OUTER ] JOIN table_2 ON table_1.字段x = table_2.字段y;

     

            2.4、不同的SQL JOIN对比

     

            2.5、ORDER BY排序

                    1)ORDER BY排序查询

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

                            与DESC或ASC搭配使用,默认为ASC

            2.6、MySQL的LIMIT

                    1)LIMIT [m,]n  或  LIMIT  n  OFFSET  m

                            限制SELECT返回结果的行数

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

                            n 制定返回记录行的最大数目

                    2)m不指定则偏移量为0,从第一条开始返回前n条记录 LIMIT 常用于分页显示

            2.7、子查询

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

                    2)嵌套查询可由多个子查询组成,求解的方式是由里及外

                    3)子查询返回的结果一般都是集合,故而建议使用 IN 关键字

    3、MySQL函数

            3.1、MySQL的统计函数

     

             3.2、GROUP BY分组

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

                            对所有的数据进行分组统计

                            分组的依据字段可以有多个,并依次分组

                            与HAVING结合使用,进行分组后的数据筛选

  • 相关阅读:
    FPGA零基础学习:数字电路中的时序逻辑
    electron应用打包成功纪念一下
    Elasticsearch-03-JavaApi以及springboot中操作-RestHighLevelClient
    STM32F103C8T6第4天:串口实验(非中断和中断)、hc01蓝牙、esp8266WIFI、4g
    [开发工具]svn
    记录一次利用CPS和蹦床技术来避免递归中的栈溢出的经历
    Django 的国际化与本地化详解
    【C++入门】不能重载为友元函数的4个运算符(=, ->, [ ], ( ))
    java线程的状态与联系(一张图理解)
    【限定词习题】no / none / any
  • 原文地址:https://blog.csdn.net/qq_72629130/article/details/126896596