[mysql] 关键词/子句/操作符

distinct

  • sql语句获取某个字段的字符有多少不同(假设内容有1,2,3 。。。 n)

    要获取某个字段中不同字符的数量,你可以使用 SQL 中的 COUNT DISTINCT 结合 GROUP BY 来实现。以下是一种常用的方法,假设你要统计某个表中特定字段的不同字符数量:

    假设字段名为 field_name,表名为 your_table,你可以使用如下 SQL 查询语句:

    SELECT COUNT(DISTINCT field_name) AS distinct_count FROM your_table;
    
  • sql 获取某个字段不同的唯一值

    select distinct field_name from table_name;
    

alter

  • 添加字段

    alter table [table_name] add [column_name] [type];
    
  • 修改字段名

    alter table [table_name] rename column [old_name] to [new_name];
    
  • 修改字段类型

    alter table [table_name] modify column [old_type] to [new_type];
    
  • 删除字段

    alter table [table_name] drop column [column_name]

delete

delete from [table_name] where [...]
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 你可以在 WHERE 子句中指定任何条件
  • 您可以在单个表中一次性删除记录。
delete,drop,truncate 区别在于
  • delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
  • delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
  • 执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。

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 子句来指定条件。
  • 举例

    mysql> select * from runoob_tbl;
    ±----------±------------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±------------------------±--------------±----------------+
    | 1 | study mysql | csdn | 2023-03-12 |
    | 2 | study mysql in Navicat | csdn | 2023-03-12 |
    | 3 | study mysql in navicat | csdn | 2023-03-12 |
    ±----------±------------------------±--------------±----------------+
    3 rows in set (0.06 sec)

    mysql> select * from runoob_tbl where binary runoob_title like “%navicat”;
    ±----------±-----------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±-----------------------±--------------±----------------+
    | 5 | study mysql in navicat | csdn | 2023-03-12 |
    ±----------±-----------------------±--------------±----------------+
    1 row in set (0.03 sec)

  • like 匹配/模糊匹配,会与%和_结合使用

    '%a'     //以a结尾的数据
    'a%'     //以a开头的数据
    '%a%'    //含有a的数据
    '_a_'    //三位且中间字母是a的
    '_a'     //两位且结尾字母是a的
    'a_'     //两位且开头字母是a的
    []:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    [^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    

    union

  • 描述: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: **可选,返回所有结果集,包含重复数据。
  • 举例

    mysql> select runoob_author from runoob_tbl union all select runoob_author from runoob_tbl2 group by runoob_id;
    ±--------------+
    | runoob_author |
    ±--------------+
    | csdn |
    | csdn |
    | github |
    | github |
    | csdn |
    | csdn |
    | csdn |
    | github |
    | github |
    | csdn |
    ±--------------+
    10 rows in set (0.06 sec)

    mysql> select runoob_author from runoob_tbl union all select runoob_author from runoob_tbl2 group by runoob_author;
    ±--------------+
    | runoob_author |
    ±--------------+
    | csdn |
    | csdn |
    | github |
    | github |
    | csdn |
    | csdn |
    | github |
    | github |
    ±--------------+
    8 rows in set (0.07 sec)

    • UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
  • UNION ALL

    mysql> select runoob_id,runoob_author from runoob_tbl union all select runoob_id,runoob_author from runoob_tbl2 group by runoob_id;
    ±----------±--------------+
    | runoob_id | runoob_author |
    ±----------±--------------+
    | 1 | csdn |
    | 2 | csdn |
    | 3 | github |
    | 4 | github |
    | 5 | csdn |
    | 1 | csdn |
    | 2 | csdn |
    | 3 | github |
    | 4 | github |
    | 5 | csdn |
    ±----------±--------------+
    10 rows in set (0.07 sec)

Update

  • 更新语句

    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause]
    
    • 你可以同时更新一个或多个字段。
    • 你可以在 WHERE 子句中指定任何条件。
    • 你可以在一个单独表中同时更新数据。
  • 替换某个字段中的某个字符

    UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string') 
    [WHERE Clause]
    

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 子句来设置条件。
  • 举例

    mysql> select * from runoob_tbl order by runoob_title;
    ±----------±------------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±------------------------±--------------±----------------+
    | 1 | study mysql | csdn | 2023-03-12 |
    | 3 | study mysql | github | 2023-03-12 |
    | 2 | study mysql in Navicat | csdn | 2023-03-12 |
    | 5 | study mysql in navicat | csdn | 2023-03-12 |
    | 4 | study mysql in github |github | 2023-03-12 |
    ±----------±------------------------±--------------±----------------+
    5 rows in set (0.08 sec)

    mysql> select * from runoob_tbl order by runoob_title desc;
    ±----------±------------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±------------------------±--------------±----------------+
    | 4 | study mysql in github | github | 2023-03-12 |
    | 2 | study mysql in Navicat | csdn | 2023-03-12 |
    | 5 | study mysql in navicat | csdn | 2023-03-12 |
    | 1 | study mysql | csdn | 2023-03-12 |
    | 3 | study mysql | github | 2023-03-12 |
    ±----------±------------------------±--------------±----------------+
    5 rows in set (0.07 sec)

    mysql> select * from runoob_tbl order by runoob_author;
    ±----------±------------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±------------------------±--------------±----------------+
    | 1 | study mysql | csdn | 2023-03-12 |
    | 2 | study mysql in Navicat | csdn | 2023-03-12 |
    | 5 | study mysql in navicat | csdn | 2023-03-12 |
    | 3 | study mysql | github | 2023-03-12 |
    | 4 | study mysql in github | github | 2023-03-12 |
    ±----------±------------------------±--------------±----------------+
    5 rows in set (0.07 sec)

    mysql> select * from runoob_tbl order by runoob_author desc;
    ±----------±------------------------±--------------±----------------+
    | runoob_id | runoob_title | runoob_author | submission_date |
    ±----------±------------------------±--------------±----------------+
    | 3 | study mysql | github | 2023-03-12 |
    | 4 | study mysql in github | github | 2023-03-12 |
    | 1 | study mysql | csdn | 2023-03-12 |
    | 2 | study mysql in Navicat | csdn | 2023-03-12 |
    | 5 | study mysql in navicat | csdn | 2023-03-12 |
    ±----------±------------------------±--------------±----------------+
    5 rows in set (0.07 sec)

  • 排序规则

    1. 所以多字段进行排序,实则是分组排序,排序的第一个字段的值如果不重复,后面的排序字段将失效。第一个字段的值如果重复,第二个字段将会在第一个字段重复组内进行排序,第三个字段会在前两个字段排好序的基础上排序,以此类推。

select

  • 查询语法:

    SELECT column_name,column_name
    FROM table_name
    [WHERE Clause]
    [LIMIT N][ OFFSET M]
    
    • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
    • SELECT 命令可以读取一条或者多条记录。
    • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
    • 你可以使用 WHERE 语句来包含任何条件。
    • 你可以使用 LIMIT 属性来设定返回的记录数。
    • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
  • 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 表中的字段值来读取指定的数据。
    • 使用主键来作为WHERE 子句的条件查询是非常快速的

    • MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。

having

having子句与where都是设定条件筛选的语句,有相似之处也有区别。

having与where的区别:

having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合

  • 在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

describe(查看表的结构)

describe [tablename];

可以简写成 desc

show

  • 查看建表语句

    show create table [tablename];
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值