二、单表操作

查询

MySQL 查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]


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

#查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件
#你可以在 WHERE 子句中指定任何条件
#你可以使用 AND 或者 OR 指定一个或多个条件
#WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令
#WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据
操作符描述实例
=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false
<>, !=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true
>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A > B) 返回false
<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A < B) 返回 true
>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A >= B) 返回false
<=小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A <= B) 返回 true
  • 实例一:

    #将读取 runoob_tbl 表中 runoob_author 字段值为 Sanjay 的所有记录
    
    SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';
    
    
  • 实例二:

    #MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的
    #实例中使用了 BINARY 关键字,是区分大小写的,所以 runoob_author='runoob.com' 的查询条件是没有数据的
    
    mysql> SELECT * from runoob_tbl WHERE BINARY runoob_author='runoob.com';
    
    

MySQL UPDATE 更新
#如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

#你可以同时更新一个或多个字段。
#你可以在 WHERE 子句中指定任何条件。
#你可以在一个单独表中同时更新数据。
  • 实例一:

    #将更新数据表中 runoob_id 为 3 的 runoob_title 字段值:
    
    mysql> UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
    
    

MySQL 插入数据
#MySQL 表中使用 INSERT INTO SQL语句来插入数据
#以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法
#如果数据是字符型,必须使用单引号或者双引号,如:"value"

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
                        
  • 实例一:

    #将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据
    
    mysql> INSERT INTO runoob_tbl 
        -> (runoob_title, runoob_author, submission_date)
        -> VALUES
        -> ("学习 PHP", "菜鸟教程", NOW());
    

匹配

MySQL LIKE 子句

SQL LIKE 子句中使用百分号 **%**字符来表示任意字符,类似于UNIX或正则表达式中的星号 *****

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的


SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

#你可以在 WHERE 子句中指定任何条件。
#你可以在 WHERE 子句中使用LIKE子句。
#你可以使用LIKE子句代替等号 =
#LIKE 通常与 % 一同使用,类似于一个元字符的搜索
#你可以使用 AND 或者 OR 指定一个或多个条件
#你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件



  • 实例一:

    #将 runoob_tbl 表中获取 runoob_author 字段中以 COM 为结尾的的所有记录:
    
    mysql> SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';
    
    

连接

MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中

多个 SELECT 语句会删除重复的数据

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

#参数
 ##expression1, expression2, ... expression_n: 要检索的列
 ##tables: 要检索的数据表
 ##WHERE conditions: 可选, 检索条件
 
 	###DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响
 	###ALL: 可选,返回所有结果集,包含重复数据
  • SQL union实例:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7awkge9-1610680979296)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029211655950.png)]

    #从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):
    
    SELECT country FROM Websites
    UNION
    SELECT country FROM apps
    ORDER BY country;
    
    #注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlAMhNAw-1610680979299)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029212036260.png)]

  • SQL union all实例:
    #使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值):
    
    SELECT country FROM Websites
    UNION ALL
    SELECT country FROM apps
    ORDER BY country;
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dTQKehc-1610680979301)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029212018186.png)]

  • 带有 WHERE 的 SQL UNION ALL
    #使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):
    
    SELECT country, name FROM Websites
    WHERE country='CN'
    UNION ALL
    SELECT country, app_name FROM apps
    WHERE country='CN'
    ORDER BY country;
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKD8UKia-1610680979303)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029212240768.png)]

排序

MySQL 排序

如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果(ASC升序默小到大,DESC降序大到小))

#以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

#你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果
#你可以设定多个字段来排序
#你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列
#你可以添加 WHERE...LIKE 子句来设置条件

  • 实例一:

    #以下将在 SQL SELECT 语句中使用 ORDER BY 子句来读取MySQL 数据表 runoob_tbl 中的数据:
    
    mysql> SELECT * from runoob_tbl ORDER BY submission_date ASC;
    
    mysql> SELECT * from runoob_tbl ORDER BY submission_date DESC;
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUCaaJTI-1610680979305)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029213314000.png)]

分组

MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

  • 实例一:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FYm8JzMb-1610680979306)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029214112083.png)]

    #使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
    
    mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3n0g4G4-1610680979307)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029214709671.png)]

  • 实例二:

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)

#例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evgM5HCg-1610680979309)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029214749080.png)]

其中记录 NULL 表示所有人的登录次数。

我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果anull,则选择b;如果bnull,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

以下实例中如果名字为空我们使用总数代替:

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVQZawJo-1610680979310)(C:\Users\Administrator\Desktop\MySQL.assets\image-20201029215328282.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值