文章目录

  • 1. 导入示例数据库
  • 2. 查询语句 SELECT FROM
  • 基本语法
  • 去重语句
  • limit限制语句
  • CASE...END判断语句
  • 4. 筛选语句 WHERE
  • 运算符/通配符/操作符
  • 5. 分组语句 GROUP BY
  • 聚集函数
  • HAVING子句
  • 6. 排序语句 ORDER BY
  • 7. 函数
  • 时间函数
  • 数值函数
  • 字符串函数
  • 练习
  • 练习一
  • 练习二


1. 导入示例数据库

方法一:使用命令行导入数据库 示例教程 方法二:使用Navicat for MySQL可视化操作导入数据库

  • 先下载上面链接里面的示例数据库
  • 再打开数据库,连接成功之后,右键单击【连接】,选择【新建数据库】
    填写数据库名,根据上面的示例教程选择字符集及排序规则,甚至完成后点击确定。
  • 右键点击下图中的【表】,选择【运行SQL文件】。
  • 然后会弹出以下窗口,点击右面的…找到数据位置,最后点击开始。
  • 之后会弹出一个运行进程框,若显示以下信息则导入成功。
  • 然后回到左侧的数据库列表,你会发现里面找不到你导入的数据库,这时候就需要右键单击 数据库名称 我这里是单击 example database,然后点击【刷新】,就会显示出来啦。

2. 查询语句 SELECT FROM

基本语法

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

去重语句

  • 从表中查询数据时,可能会收到重复的行记录。为了删除这些重复行,可以在SELECT语句中使用DISTINCT子句。

SELECT DISTINCT
columns
FROM
table_name;

limit限制语句

  • 在SELECT语句中使用LIMIT子句来约束结果集中的行数。LIMIT子句接受一个或两个参数。两个参数的值必须为零或正整数。

SELECT
column1,column2,…
FROM
table
LIMITvalue offset value

  • offset指定从哪行开始检索,limit指定检索的行数,需要注意的是SQL列表里第一行索引为0,所以当offset 值为0是,表示从头开始检索
  • 取前N行数据

**SELECT customerNumber,customerName FROM customers;
LIMIT N

CASE…END判断语句

case语句分为两种,一种是简单case语句,另一种是可搜索case语句。

  • 简单case语句

CASE case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands

ELSE commands
END ;

  • 简单CASE语句用来检查表达式的值与一组唯一值的匹配。case_expression可以是任何有效的表达式。我们将case_expression的值与每个WHEN子句中的when_expression进行比较,例如when_expression_1,when_expression_2等。如果case_expression和when_expression_n的值相等,则执行相应的WHEN分支中的命令(commands)。如果WHEN子句中的when_expression与case_expression的值匹配,则ELSE子句中的命令将被执行。ELSE子句是可选的。 如果省略ELSE子句,并且找不到匹配项,MySQL将引发错误。
  • 可搜索case语句

CASE
WHEN condition_1 THEN commands
WHEN condition_2 THEN commands

ELSE commands
END;

  • 简单CASE语句仅允许表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,您可以使用可搜索CASE语句。
  • 例题:(数据:本教程中导入的示例数据库中的customers表) 题目:根据顾客所居住的国家确定货物运送期限,如果客户位于美国(USA),则运送期为2天。 如果客户在加拿大,运送期为3天。 来自其他国家的客户则需要5天的运输时间。

SELECT customerName,
CASE country
WHEN ‘USA’ THEN ‘2 days’
WHEN ‘Singapore’ THEN’3 days’
ELSE ‘5 days’
END
FROM customers;

输出结果如下图所示:

c mysql 中文 查询 mysql查询语句在哪里编写_c mysql 中文 查询

4. 筛选语句 WHERE

SELECT field1, field2,…fieldN FROM table_name1, table_name2…
[WHERE condition1 [AND [OR]] condition2…

  • 运行过程
    • 虽然WHERE子句出现在语句的末尾,但MySQL会首先使用WHERE子句中的表达式来选择匹配的行。它选择具有职位名称为销售代表的行记录。

运算符/通配符/操作符

* 比较运算符
 1. =,>,<,==<>,!=,==>=,<= (注意等于只用一个等号)
 2. and、or 运算符
 * 通配符
 % : 替代一个或多个字符

_ :仅替代一个字符
[字符列]:字符列中的任何单一字符
[!字符列]或[^字符列]:不在字符列中的单一字符

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

  • 操作符
    • in:IN 操作符允许我们在 WHERE 子句中规定多个值。

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,…)

  • between: BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

  • IS NULL - 使用IS NULL运算符测试值是否为NULL。
5. 分组语句 GROUP BY

SELECT
c1, c2,…, cn, aggregate_function(ci)
FROM
table
WHERE
where_conditions
GROUP BY c1 , c2,…,cn;

  • GROUP BY子句必须出现在FROM和WHERE子句之后。
  • GROUP BY能自动消除重复数据,返回值是惟一的。

聚集函数

  • 经常使用GROUP BY子句与聚合函数一起使用,如SUM,AVG,MAX,MIN、COUNT、YEAR。
    count应用示例
    题目:(数据:表orders)计算出每个状态下的订单数量

SELECT status,COUNT(*) AS amout
FROM orders
GROUP BY status

输出结果

c mysql 中文 查询 mysql查询语句在哪里编写_数据库_02

HAVING子句

  • where与having字句的区别:
    • where只能过滤行而不能过滤分组,而having既可以过滤行又可以过滤分组,因此where语句可以用having字句替代。
    • having过滤时一般基于分组聚集值,而where语句中不可以用聚集函数。
6. 排序语句 ORDER BY

SELECT column1, column2,…
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],

  • ASC为正序排序、DESC为逆序排序 。(注意:若要对多个列进行排序,需要在每个列名后加上ASC或DESC
  • 可以指定多个列进行排序,如上图所示,表示先按第一列排序,再按第二列排序
  • order by也可以通过非选择列,即不在select清单中的列进行排序。

SELECT column1, column2,…
FROM tbl
ORDER BY 1[ASC|DESC], 2[ASC|DESC],

  • order by也可以按照select清单中的列序号排序,不用写列名,但是要求排序的列一定要在清单里。
7. 函数
  • 不同的DBMS使用的函数不尽相同,在这里我只简单地介绍MySQL中经常使用的函数。

时间函数

数值函数

  • ABS():取绝对值
  • COS()
  • EXP():取指数
  • PI():圆周率
  • SIN():正弦
  • SQRT():取平方根
  • TAN():取正切

字符串函数

  • RTRIM():去除列值右边的空格
  • LTRIM():去除列值左边的空格
  • UPPER():将字符串转换为大写
  • LOWER():将字符串转换为小写
  • LEFT():返回字符串左边的字符
  • LENGTH():返回字符串的长度
  • SOUNDEX():返回字符串的SOUNDEX值
练习

练习一

创建 email表,并插入如下三行数据并查找重复的电子邮箱(难度:简单)
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+

SELECT Email
FROM email
GROUP BY Email
HAVING COUNT(Email)=1

输出结果:

c mysql 中文 查询 mysql查询语句在哪里编写_数据_03

练习二

项目二:查找大国(难度:简单)
创建如下 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查询,输出表中所有大国家的名称、人口和面积。

SELECT name,population,area
FROM world
WHERE area > 3000000 OR (population > 25000000 AND gdp > 20000000)

输出结果:

c mysql 中文 查询 mysql查询语句在哪里编写_运算符_04