MySQL必知必会(3)数据检索

使用SELECT语句进行检索

SQL SELECT:

  1. 输入:SELECT prod_name FROM products
  2. 利用SELECT语句从products表中检索一个名为prod_name的列
  3. 输出列的信息

未排序数据:
在自己做上述语句的时候可能顺序不同
如果没有明确排序查询结果,那查询后的顺序没有任何意义

对上面的操作会返回列中的所有行,没有过滤和排序操作

结束SQL语句:要求以分号结束,DBMS中部分允许不加分号,但特定的情况下需要,所以加个分号几乎总是好的,尤其是使用mysql命令行,此时必须使用分号来结束SQL语句

SQL语句不区分大小写
SQL开发人员习惯于使用大写来标记关键字,而对所有列和表名使用小写,这样做使得代码易于阅读和调试
语句空格
在处理SQL语句时,其中所有的空格都被忽略。SQL语句可以在一行上给出,也可以分成许多行,多数SQL开发人员认为为SQL语句进行多行的划分更容易阅读和调试

检索多个列

要想从一个表中检索多个列,使用相同的SELETE语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之中必须以逗号分隔。
!!!@在选择多个列是,一定要在列名之间加上逗号,但最后一个列名不加。如果在·最后一个列名加上逗号,会出现错误

  • 输入:SELECT prod_id , prod_name , prod_price
    FROM products

  • 分析:与前一个例子一样,这条语句使用SELECT语句从表products中选择数据。在这个例子中,
    指定了3个列名,列名之间用逗号分隔。此语句输出如下:

  • 输出:对应表列——————
    。。。。。。。| 。。 | 。。 |
    。。。。。。。| 。。 | 。。 |
    、、、、、、、——————

    @@数据表示:
    从上述输出可以看到,SQL语句一般返回原始的、无格式的数据。数据的格式化是一个表示问题,而不是一个检索问题,因此,表示(对齐和显示上面的价格值,用货币符号和逗号表示其金额)一般在显示该数据的应用程序中规定。一般很少使用实际检索出的原始数据(没有应用程序提供的格式)

检索所有列

除了指定所需的列外(如上所述,一个或多个列),SELECT语句还可以检索所有的列而不必逐个列出列出他们。这可以通过在实际列名的位置使用星号(*)通配符来达到,如下所示:

  • 输入:SELECT *
    FROM products

    -如果给定一个通配符(*),则返回表中所有列(和java包中的“ * ”一样作用)
    列的返回顺序一般是列在表定义中出现的顺序。但有时候并不是这样的,表的模式的变化可能导致顺序的变化。
    通配符的使用
    一般除了确实需要,否则最好别用这个通配符,它可能会降低检索和应用程序的性能。

检索不同的行(检索的去重)

如上所示,SELECT返回所有匹配的行。但是,如果不想要每个值每次都出现,则需要另外的办法
譬如:想要得出products表中产品的所有供应商ID:

  • 输入: SELECT vend_id
    FROM products;

  • 输出vend_id:

    这样得出的数据会有14行,因为返回的是products表里所有产品的数据
    那么要怎样才能只返回需要的数据的真实数量呢?

  • 输入: SELECT DISTINCT vend_id
    FROM products

  • 分析:使用DISTINCT关键字,此关键字指示MySQL使之不会多次返回重复值
    该关键字必须直接用在类名的前面。

DISTINCT应用于所有列而非前置它的列
如果给定SELECT DISTINCT ven_id ,prod_price。除非指定的两个列都不同,否则所有航都会被检索出来

简单的说就是对小写的关键词对应的列的数据进行去重,如果两个列名,则是综合考虑,去除两个都重复的。

限制结果

【【
SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可以使用LIMIT子句。
】】

  • 输入:SELECT prod_name
    FROM products
    LIMIT 5;

-上述语句先使用SELECT语句返回多个列,LIMIT5指示MySQL返回的值不超过5行

获取下一个5行/向后返回读取:

  • 输入 SECECT prod_name
    FROM products
    LIMIT 5,5;

    (或者可以替代使用LIMIT 5 OFFSET 5 以避免可能出现的歧义)
    LIMIT5,5指示从MySQL返回从行5开始的5行,第一个数为开始位置,第二个为要检索的行数

行的标号 从0开始,所以LIMIT 1,1将得出第二行而不是第一行

使用完全限定的列名引用列


SELECT products.prod_name
FROM products


这就像用类::成员函数一样,用表名来限制列的归属


!!同理也可以用数据库名来限定表名!:


SELECT products.prod_name
FROM crashcourse.products;

(实际上等于
SELECT prod_name FROM products 的作用,但是不同点在于对表名完全限定)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值