2024-04-04  阅读(3)
原文作者:Brand 原文地址: https://www.cnblogs.com/wzh2010/p/13843015.html

概述

提到查询,就回到我们第四篇的SQL语言分类了,DQL(Data QueryLanguage),也就是数据查询语言,实际就是从数据库中获取数据的一种命令方式。我们给数据库发送一个查询语句的命令,数据库按需返回相应的数据。

查询基本语法

    select column_name1,column_name2,... from tname;

SQL 中不区分大小写,select语句中不区分大小写,SELECT和select、FROM和from效果一样。

查询的结果放在一个表格中,表格的第1行称为列头,第2行开始是数据,类属于一个二维数组。

查询单个字段

配置字段名称,格式如下:

    1 select column_name1 from tname;
     1 mysql> use test;
     2 Database changed
     3 
     4 mysql> select name from user3;
     5 +-------+
     6 | name  |
     7 +-------+
     8 | brand |
     9 | sol     |
    10 +-------+
    11 2 rows in set

查询多个字段

多个字段使用逗号隔开,语法格式如下

    1 select column_name1,column_name2,... from tname;
     1 mysql> use test;
     2 Database changed
     3 
     4 mysql> select id,age,name from user3;
     5 +----+-----+-------+
     6 | id | age | name  |
     7 +----+-----+-------+
     8 |  1 |  20 | brand |
     9 |  2 |  22 | sol   |
    10 +----+-----+-------+
    11 2 rows in set

查询所有字段

使用*号通配符来表示,语法格式如下

    1 select * from tname;
     1 mysql> use test;
     2 Database changed
     3 
     4 mysql> select * from user3;
     5 +----+-----+-------+
     6 | id | age | name  |
     7 +----+-----+-------+
     8 |  1 |  20 | brand |
     9 |  2 |  22 | sol   |
    10 +----+-----+-------+
    11 2 rows in set

常量的查询

对于常量值的查询,可以不来源于表,格式如下

    1 select const1,const2,const3;
    1 mysql> select 100,'brand',1.5;
    2 +-----+-------+-----+
    3 | 100 | brand | 1.5 |
    4 +-----+-------+-----+
    5 | 100 | brand | 1.5 |
    6 +-----+-------+-----+
    7 1 row in set

表达式的查询

sql的加减乘除等等表达式的查询,格式如下:

    1 select expression1,expression2,...;
    1 mysql> select 1+2,1-2,1*7,17/2,17%2,(2+3)*5,8>5,7=4;
    2 +-----+-----+-----+------+------+---------+-----+-----+
    3 | 1+2 | 1-2 | 1*7 | 17/2 | 17%2 | (2+3)*5 | 8>5 | 7=4 |
    4 +-----+-----+-----+------+------+---------+-----+-----+
    5 |   3 |  -1 |   7 | 8.5  |    1 |      25 |   1 |   0 |
    6 +-----+-----+-----+------+------+---------+-----+-----+
    7 1 row in set

函数的查询

可以在查询中加上各种类型的系统函数或者用户自定义函数,来简化一些较复杂的查询过程。格式如下:

    1 select func1,func2,func3,...;
    1 mysql> select abs(-6),round(5.7),length('brand'),now();
    2 +---------+------------+-----------------+---------------------+
    3 | abs(-6) | round(5.7) | length('brand') | now()               |
    4 +---------+------------+-----------------+---------------------+
    5 |       6 | 6          |               5 | 2020-11-06 21:07:41 |
    6 +---------+------------+-----------------+---------------------+
    7 1 row in set

表和字段的查询

查询列名都会以列的定义名称显示,这样显示的时候查看不方便,还容易暴露数据库的信息给业务,为了增强脚本可阅读性,我们经常使用字段别名。

设置表的别名更主要的还是在于书写查询语句时候的便利,并避免多表查询时的字段混淆。格式如下:

    1 select talias.column_name1 col1,talias.column_name2 col2 from  tname [as] talias;
     1 mysql> use test;
     2 Database changed
     3 
     4 mysql> select u.id as 主键,u.age as 年龄,u.name as 名称 from user3 u;
     5 +------+------+-------+
     6 | 主键 | 年龄 | 名称  |
     7 +------+------+-------+
     8 |    1 |   20 | brand |
     9 |    2 |   22 | sol   |
    10 +------+------+-------+
    11 2 rows in set

混合查询

查询具体表的字段是可以跟表达式,常量等混合在一起的,这样才能应付复杂的业务。

    1 mysql> select '中国2020人口普查' as 标题,u.id as 主键,u.age as 年龄,u.name as 名称,now() as 查询时间,2020*rand() as 随机数 from user3 u;
    2 +------------------+------+------+-------+---------------------+--------------------+
    3 | 标题             | 主键 | 年龄 | 名称  | 查询时间            | 随机数             |
    4 +------------------+------+------+-------+---------------------+--------------------+
    5 | 中国2020人口普查 |    1 |   20 | brand | 2020-11-06 21:23:39 | 1236.3585094328582 |
    6 | 中国2020人口普查 |    2 |   22 | sol   | 2020-11-06 21:23:39 | 344.21752367561453 |
    7 +------------------+------+------+-------+---------------------+--------------------+
    8 2 rows in set

总结

1、本片只是查询的基础篇,后续会引出 查询的过滤条件、排序、分页、分组、正则匹配过滤,以及复杂查询的性能优化等等。

2、查询数据的时候,应遵循应需而查,查询需要的字段即可,切勿随意的使用*,数据量大的时候性能差距就明显了。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文