书MySQL必知必会 第四章笔记

第4章 检索数据

资料来源 MySQL Crash Course ,Ben Forta著

4.1 SELECT语句

数据库大部分的查都是用SELECT语句实现的,这是一个很常使用的语句。

首先创建一个数据库test

CREATE DATABASE test;

再创建一个表格如下

create table products
(
#     设置id列为int 自动增量,主键
    id       int auto_increment
        primary key,
#      设置这两个列类型varchar和double,varchar最大长度50,默认值空   
    name  varchar(50) null,
    price double      null
);

插入几条数据

INSERT INTO products(
    name,
    price
) 
VALUES (
        'milk',
        20.00
),(
   'bread',
   20.00
),(
   'beef',
   35.00
),(
   'water',
   3.00
),(
   'cola',
   5.00
);

4.2 检索列

要查询一个列的信息的话,就使用如下select

1. 单个列

例如

SELECT name from products;

则可以得出表products的整个列name的所有行,当然这个数据并没有做过滤等处理。

结果应当如下

image-20200508151251758

2. 多个列

当然,如果要查询多个列,那就SELECT关键字后面跟上要查询的列名,用逗号分隔开

SELECT name,price from products;

则得到表products的列name和对应的列price,数据一一对应,不会错位。

image-20200508151227132

3. 检索所有列

有一些情况需要检索所有列的所有行,比如不知道一张表有什么数据之类的情况,可以使用通配符 “ * ” 来检索,当然如果表超级大而电脑的性能不够的话,卡死是肯定的了。。。

SELECT * FROM products;

image-20200508151914450

则如图,这张表所有的数据都被检索出来了

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

最初的select是返回所有匹配的行,这时,如果不想让相同的值重复出现,怎么办?

如 如果检索的是products表商品有哪些不同的价格,如果使用

SELECT price FROM products;

则返回的结果毫无疑问是price下所有的行,这时可能会有重复

image-20200508152312250

这时候可以使用 DISTINCT关键字

如:

SELECT DISTINCT price FROM products

image-20200508152330791

注意

DISTINCT关键字是不能部分使用的,DISTINCT 应当引用于要查询的所有列而不是其中的某些列,除非要查询的几个列刚好都有重复,且重复的每一行都相同,否则DISTINCT无效。

也就是说,如果此时我插入一行记录

insert into products(
                     name, price
) VALUES (
          'milk',
          '20'
         );

毫无疑问这一行和原有的数据的name,price完全重复了,

也就是说查询的两个列都有记录完全相同且相互对应,这是用DISTINCT去重两个列才会生效,否则不生效。

即使原来表里面有名字重复但价格不重复的行,DISTINCT也会无效,必须是完全重复。

4.6 限制结果

SELECT是查询匹配的所有行,为了让它只返回n行(n为自然数),可以使用LIMIT子句

如 我想让他只返回前三行

SELECT * FROM products
LIMIT 3;

image-20200508153643802

也可以指定返回某个范围

如让他返回第1行开始的下一个3行(注意id是从1开始)

SELECT * FROM products
LIMIT 1,3;

image-20200508153731931

等价写法是

SELECT * FROM products
LIMIT 3 OFFSET 1;

这样也会返回第1行开始的下一个三行。

注意

  • SQL中,第0行才是广义上的第1行,放在这里,第0行是id=1的行

  • 行数不够时,会返回能返回的那么多行

4.7 完全限定表名

可以使用完全限定的名字来引用列,也就是同时使用表名和列名

也就是如果查询表products下的name和price,可以用如下写法

SELECT products.name,products.price FROM products;

可以得知我们使用了完全限定的名字,这在联表查询时是必须的

也可以使用 AS 关键字来为表名或列名指定别名

如这里为表名products指定别名products;

select p.name,p.price
From products AS p;

结果毫无疑问是一样的

image-20200508155302059

当然表也是可以使用完全限定的。

SELECT SELECT products.name,products.price FROM test.products;

select p.name,p.price
From products AS p;


结果毫无疑问是一样的

[外链图片转存中...(img-XHFXU2Uo-1588924537596)]

当然表也是可以使用完全限定的。

如

```mysql
SELECT SELECT products.name,products.price FROM test.products;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值