MySQL操作语句总结

文档格式有点问题,可以下载pdf:

链接:https://pan.baidu.com/s/1R8qSPt2cMnzJqjCmox9h0A?pwd=WHY6 
提取码:WHY6

或者跳转以下链接:MySQL操作语句总结 - 掘金

目录

DDL(数据定义语言)基础操作

数据库操作

表操作

DML(数据操作语言)基础操作

DQL(数据查询语言)基础操作

1.distinct去重

2.常见的列值操作

3.常见的运算符

4.where条件查询

5.order by排序

6.聚集函数

7.group by分组操作

较为复杂的查询操作

1.连接查询

2.嵌套查询

3.集合查询

DDL(数据定义语言)基础操作

数据库操作

  1. 连接数据库:mysql -uroot -p; 然后输入密码
  2. 查看数据库列表:show databases;
  3. 创建数据库:create databases 数据库名称;
  4. 删除数据库:drop database 数据库名称;
  5. 修改数据库:alter database 数据库名称 charset=编码格式;
  6. 查看数据库中的表:show tables;

表操作

  1. 创建表:create table if not exists 表名(列名,列类型,[约束]):如果表不存在就创建
    1. 常见约束:
      1. 非空约束:NOT NULL,不允许某列的内容为空;
      2. 设置列的默认值:DEFAULT;
      3. 唯一约束:UNIQUE,该表中,该列的内容必须唯一;
      4. 主键约束:PRIMARY KEY,非空且唯一;
      5. 主键自增长:AUTO_INCREMENT,从1开始,步长为1;、
      6. 外键约束:FOREIGN KEY,A表中的外键列。A表中的外键列的值必须参照于B表中的某一列(B表主键)
  1. 删除表:drop table 表名;
  2. 描述表结构:desc table 表名;
  3. 修改表结构:alter table <表名> add|drop <列名><列类型>

DML(数据操作语言)基础操作

  1. 修改:update 表名 set col1=value1,col2=value2...... where[条件]
    1. 实体完整性约束:修改主键值时,对外键值级联更新,或拒绝修改主键值的操作
    2. 参照完整性约束:外键表中的外键信息不允许被修改:
  1. 插入:insert into 表名 (col1,col2,......) value (value11,value12,......),(value21,value22,......);
    1. 从别的表中查询后插入该表:insert into 表1(col1,col2,......) select col1,col2,...... from 表2 where[条件];
    2. 插入时的完整性约束:
      1. 实体完整性:是否插入了主键相同的元组
      2. 参照完整性:当外键表插入新元组时,新元组的外键值是否在主键表中存在
      3. 用户定义的完整性,如not null的约束;unique的约束等等;
  1. 删除:delete from 表名 where [条件];

DQL(数据查询语言)基础操作

1.distinct去重

作用:对列值进行去重操作

sql示例:select distinct col1,col2 from 表名;

  1. distinct的作用范围是所有目标列,如上,只有当col1和col2的组合重复时才去重
  2. distinct不能放在第一列之后

2.常见的列值操作

  1. 算术运算-(+,-,*,/):select col1 operator col2 from 表名;
    1. 优先级与在数学运算中相同
  1. 设置列表达式的别名-as:select col1 as 别名 from 表名;
    1. as也可以不写:select col1 别名 from 表名;
  1. lower/upper/trim:select lower(col1) as 别名 from 表名;
    1. lower:将列值转化为小写
    2. upper:将列值转化为大写
    3. trim:过滤指定的字符串:
      1. trim:去除首尾字符串:select trim(col1) from 表名;
      2. ltrim:去除左边的字符串
      3. rtrim:去除右边的字符串

3.常见的运算符

  1. 比较运算符:=, >, >=, <, <=, !=,<>
    1. 其中<>就相当于!=
  1. 逻辑运算符:and,or,not

4.where条件查询

  1. between...and...:在....之间
  2. like:字符匹配;通配符%代替0或多个字符,通配符_仅代替一个字符
  3. escape:用于转义;当用户要查询的字符串本身含有%或者_时,需要使用escape '<换码字符>'短语对通配符进行转义;
    1. 示例:select * from 表名 where col1 like 'AB_%C_' escape '',含义就是在该表中查询满足col1的值以AB_开头,且倒数第二个字符是C的所有行;
  1. in (not in):⽤来查找属性值属于(不属于)指定集合的元组
    1. 示例:select * from 表名 where col1 in (value1,value2);
    2. 也就相当于:select * from 表名 where col1 = value1 or col1 = value2;
  1. is null(is not null):判断列的值是否是空值
    1. 示例:select * from 表名 where col1 is null;,查询出col1这一列的值为null的所有行的信息;
    2. 使用is null判断的是列值是否是空值,而不是判断是否是空字符串,如果要判断是否是空字符串,使用== ""

5.order by排序

  1. 升序:order by col1 asc;
  2. 降序:order by col1 desc;

order by通常出现于select语句的末尾,不指定排序规则的话,默认是升序;

6.聚集函数

  1. count:计数
    1. count(*):计算由查询汇总from子句和where子句所创建的关系中的元组个数
    2. count([distinct|all] col1):统计一列中值的个数(空值不计入统计)
  1. sum([distinct|all] col1):计算一列值的总和
  2. avg([distinct|all] col1):计算一列值的平均值
  3. max([distinct|all] col1):计算一列值的最大值
  4. min([distinct|all] col1):计算一列值的最小值

7.group by分组操作

作用:细化聚集函数的作用对象

未对查询结果分组时,聚集函数作用于整个查询结果;分组之后,聚集函数分别作用于每组

sql示例:select count(*),col1 from 表名 group by col1;

  • 根据col1这一列的列值进行分组,值相等的为一组
  • 使用group by子句之后, select子句的列名列表中只能出现分组属性和聚集函数
  • group by子句的作用对象是查询的中间结果表

having条件筛选

作用:筛选出分组后满足条件的最终结果

sql示例:select max(col1),col1 from 表名 group by col1 having max(col1) > 1000;

分组之后,只有列中最大值大于1000的列才会被筛选出;

having和where的区别:作用对象不同

  • where子句作用于基表或视图,从中选择满足条件的元组
  • having短语作用于分组,从中选择满足条件的分组

较为复杂的查询操作

1.连接查询

  1. join on:连接操作,R join S on <连接条件>
    1. 示例:select col1 from table1 join table2 on table1.col1 = table2.col1;
  1. natural join:自然连接
    1. 示例:select col1 from table1 natural join table2 ;
    2. 作用:通过⾃然连接去除重复的列属性,如上示例,表1和表2中都有col1这一属性,自然连接得到的新表中只保留一个col1属性;
  1. outer join:外连接,保留指定关系中未通过连接匹配的元组;
    1. 示例:select * from table1 outer join table2 on table1.col1 = table2.col
    2. 左外连接:left outer join:保留左表中的记录,缺省值用null填充
    3. 右外连接:right outer join:保留右表中的记录,缺省值用null填充
  1. inner join:内连接,inner可以省略不写;

对外连接和内连接的区别的说明:

学生信息表:

id name
001 张三
002 李四
003 王五
004 赵六

学生课程表

id course
001 数学
002 语文
003 英语
005 物理

做内连接:

id name course
001 张三 数学
002 李四 语文
003 王五 英语

做外连接

id name course
001 张三 数学
002 李四 语文
003 王五 英语
004 赵六
005 物理

做左外连接:

id name course
001 张三 数学
002 李四 语文
003 王五 英语
004 赵六

做右外连接:

id name course
001 张三 数学
002 李四 语文
003 王五 英语
005 物理

2.嵌套查询

查询块 :⼀个 SELECT-FROM-WHERE 语句称为⼀个查询块

嵌套查询 :将⼀个查询块嵌套在另⼀个查询块的WHERE⼦句或HAVING短语的条件中的查询称为嵌套查询

sql示例:select col1 from table1 where col2 in (select col2 from table2 where col3=value);

在嵌套查询中,有一些常用的子查询:

  • 带有in谓词的子查询(示例中已经出现)
  • 带有比较运算符的子查询:<,>,=,......
    • 示例:select col1 from table1 where col2 = (select col2 from table2 where col3=value);
    • 注意,子查询一定要在比较运算符的后面
  • 带有anyall谓词的子查询:
    • 示例:select col1 from table1 where col2 > any (select col2 from table2 where col3=value);
    • 含义:

  • 带有exists谓词的子查询:存在量词;
    • 示例:select col1 from table1 where exists (select * from table2 where col2=value);
    • 使用存在量词后,若内层查询结果非空,则外层的where子句返回真值,否则返回假值;
  • from子句中的子查询:
    • 示例:select col1,avg_col2 from (select col1,avg(col3) as avg_col2) as temp_table;
    • 注意:每个派生出来的表都必须有一个自己的别名,所以子查询的结果必须通过as设置别名,才能用于父查询,否则会报错:Error Code: 1248. Every derived table must have its own alias
  • 带有with子句的子查询:定义临时关系,⽤于嵌套查询
    • 示例:with temp_table as (select col1,avg(col2)_as avg_col2) select col1,avg_col2 from table1,temp_table;

3.集合查询

  1. 并UNION:select * from table1 where col1=value1 union select * from table1 where col2=value2;
    1. 相当于where子句中进行or操作
  1. 交INTERSECT:select * from table1 where col1=value1 intersect select * from table1 where col2=value2;
    1. 相当于where子句中进行and操作
  1. 差EXCEPT:select * from table1 where col1=value1 except select * from table1 where col2=value2;
    1. 满足条件1且不满足条件2

注意:参加集合操作的各个结果表的列数必须相同,对应的数据类型也必须相同,系统会自动地在并、交、差操作之前去掉输入的重复行;而去重操作是⾮常费时的,去重的时间往往超过查询时间

猜你喜欢

转载自blog.csdn.net/qq_51235856/article/details/130104189