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) -
排序规则
- 所以多字段进行排序,实则是分组排序,排序的第一个字段的值如果不重复,后面的排序字段将失效。第一个字段的值如果重复,第二个字段将会在第一个字段重复组内进行排序,第三个字段会在前两个字段排好序的基础上排序,以此类推。
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];