Skip to content

Latest commit

 

History

History
251 lines (166 loc) · 5.54 KB

mysql 1-3.md

File metadata and controls

251 lines (166 loc) · 5.54 KB

mysql学习1-3天总结(踩坑)

Navicat

  1. 创建连接时出现1251错误
    参考 此解决方案
    具体步骤:
    • cmd打开mysql
    • 输入cannotfind

1.'root'   为你自己定义的用户名 2.'localhost' 指的是用户开放的IP,可以是'localhost'(仅本机访问,相当于127.0.0.1),可以是具体的'...'(具体某一IP),也可以是 '%' (所有IP均可访问) 3.'password' 是你想使用的用户密码

查询语句

  1. select
SELECT column_name
FROM certain_table;

检索所有列时,可用通配符*,e.g: SELECT * FROM certain_table;

  • 去重语句(DISTINCT)
SELECT DISTINCT certain_column
FROM certain_table;

去重后,所选列中相同的内容只显示一次

  • 选择前n个语句(LIMIT)
SELECT certain_colomn
FROM certain_table
LIMIT 5 OFFSET 5;/*LIMIT 5,5;*/

上述代码返回从第五行开始的五行数据。注:行数从0开始

  1. case  when… then …end

参考: https://www.jianshu.com/p/113b21734353

CASE <单值表达式>
    WHEN <表达式值> THEN <SQL语句或返回值>
    WHEN <表达式值> THEN <SQL语句或返回值>
   ...
    WHEN <表达式值> THEN <SQL语句或返回值>
    ELSE <SQL语句或返回值>
END

用法一:

SELECT *,
       (CASE grade  
            WHEN 'A' THEN '优秀'
            WHEN 'B' THEN '良好'
        	when 'C' THEN '及格'
            ELSE '不及格'
        END) AS grade_result
FROM certain_table;

用法二:

SELECT *,
       (CASE  
            WHEN grade='A' THEN '优秀'
            WHEN grade='B' THEN '良好'
        	when grade='C' THEN '及格'
            ELSE '不及格'
        END) AS grade_result
FROM certain_table;
  1. where
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
!< 不小于
> 大于
>= 大于等于
!> 不大于
BETWEEN 在指定的两个值之间
IS NULL 为NULL值
AND 检索满足所有给定条件的行
OR 检索匹配任意给定条件的行
IN 指定要匹配值的清单的关键字
NOT 否定其后条件的关键字

e.g

SELECT expression1, expression2
FROM certain_table
WHERE expression1 < 10;
  • 通配符

    • %
    SELECT expression1, expression2
    FROM certain_table
    WHERE expression1 LIKE 'Hello%';

    检查任意以Hello起头的词

    • _

    用法同(%),但只可匹配一个字符

    • []
    SELECT expression1, expression2
    FROM certain_table
    WHERE expression1 REGEXP '^[AB]';

    匹配以A或B开头的词

  1. GROUP BY

    SQL聚集函数

    函数 说明
    AVG() 返回某列平均值
    COUNT() 返回某列行数
    MAX() 返回某列最大值
    MIN() 返回某列最小值
    SUM() 返回某列之和
    SELECT expression1, COUNT(*) AS nums
    FROM certain_table
    GROUP BY expression1
    HAVING COUNT(*) >= 2;

    筛选出行数大于2的列,且按expression1排序

  2. ORDER BY

SELECT expression1, expression2
FROM certain_table
ORDER BY expression1;

可用相对列位置排序,若降序排序需指定DESC关键字

项目一

创建 email表,并插入如下三行数据

+----+---------+

| Id | Email |

+----+---------+

| 1 | [email protected] |

| 2 | [email protected] |

| 3 | [email protected] |

+----+---------+

编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱。

根据以上输入,你的查询应返回以下结果:

+---------+

| Email |

+---------+

| [email protected] |

+---------+

说明:所有电子邮箱都是小写字母。

结果

项目二

创建如下 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查询,输出表中所有大国家的名称、人口和面积。

例如,根据上表,我们应该输出:

+--------------+-------------+--------------+

| name | population | area |

+--------------+-------------+--------------+

| Afghanistan | 25500100 | 652230 |

| Algeria | 37100000 | 2381741 |

+--------------+-------------+--------------+

结果