MySQL学习(二)

理论基础

  1. 查询语句 SELECT FROM
    (1) 检索单个列:SELECT prod_name FROM Products;
    (2) 检索多个列:SELECT prod_id, prod_name, prod_price FROM Products;
    (3) 检索所有列:SELECT * FROM Products;
    (4) 去重语句(检索不同值):SELECT DISTINCT vend_id FROM Products;
    DISTINCT关键字指示数据库只返回不同的值。
    (5) 限制结果(前N个语句):
    在 SQL Server和 Access中: SELECT TOP 5 prod_name FROM Products;
    在 DB2 中: SELECT prod_name
    FROM Products FETCH FIRST 5 ROWS ONLY;
    如果你使用 Oracle,需要基于ROWNUM(行计数器)来计算行:SELECT prod_name
    FROM Products WHERE ROWNUM <=5;
    如果你使用 MySQL、MariaDB、PostgreSQL或者 SQLite,需要使用LIMIT子句: SELECT prod_name
    FROM Products LIMIT 5 OFFSET 5;(LIMIT 5 OFFSET 5指示 MySQL等 DBMS返回从第 5行起的 5行数据。LIMIT指定返回的行数。LIMIT带的 OFFSET指定从哪儿开始。)

  2. 筛选语句 WHERE
    (1)在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。
    (2)检查单个值:SELECT prod_name, prod_price FROM Products WHERE prod_price < 10;
    (3)不匹配检查: SELECT vend_id, prod_name FROM Products WHERE vend_id <> ‘DLL01’;
    (4)范围值检查: SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;
    (5)空值检查: SELECT prod_name FROM Products WHERE prod_price IS NULL;
    (6)操作符:AND,OR;AND 优先级高于 OR;
    IN操作符: SELECT prod_name, prod_price FROM Products WHERE vend_id IN ( ‘DLL01’, ‘BRS01’ );
    NOT操作符: SELECT prod_name FROM Products WHERE NOT vend_id = ‘DLL01’;
    (7)通配符(LIKE): %表示任何字符出现任意次数;下划线_的用途与%一样,但它只匹配单个字符,而不是多个字符;方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

  3. 分组语句 GROUP BY
    (1)使用分组可以将数据分为多个逻辑组,
    对每个组进行聚集计算。
    SELECT vend_id, COUNT() AS num_prods FROM Products GROUP BY vend_id;
    (2)过滤分组:HAVING非常类似于WHERE,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代;唯一的差别是,WHERE
    过滤行,而HAVING过滤分组。
    SELECT vend_id, COUNT(
    ) AS num_prods
    FROM Products
    WHERE prod_price >= 4
    GROUP BY vend_id
    HAVING COUNT(*) >= 2;

  4. 排序语句 ORDER BY:
    (1)单列排序:SELECT prod_name FROM Products ORDER BY prod_name;
    (2)按多个列排序:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
    (3)指定排序方向: SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;

练习

项目一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
在这里插入图片描述
编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
在这里插入图片描述
项目二:查找大国(难度:简单)
创建如下 World 表
±----------------±-----------±-----------±-------------±--------------+
| name | continent | area | population | gdp |
±----------------±-----------±-----------±-------------±--------------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
±----------------±-----------±-----------±-------------±--------------+
在这里插入图片描述
如果一个国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万),那么这个国家就是大国家。
编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值