目录
MySql中的SQL语句分类
SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一 种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库 脚本文件的扩展名。
DDL语句操作数据库
DDL语句对库的操作
-
创建数据库
-
查看所有的数据库
• 注意不要省略“s”
-
删除数据库
-
选择使用哪一个数据库
DDL语句对库中表的操作
-
查看库中的表
-
创建表
例如:
-
查看创建的数据表结构
-
修改表名
-
修改表中的字段
-
删除表中的字段
-
添加表中的字段
-
删除表
DML语句的基本语法
数据增加(INSERT语句)
关键字INSERT,主要功能是给数据库表增加记录。
- 语法:
例如:
- 选择字段进行插入数据
- 全字段插入数据
注意:全字段插入时,如果主键自增,要设置默认值,可以用default / null
- 一次性插入多条数据
不常用的新增方式
数据修改(UPDATE语句)
关键字是UPDATE,主要功能是修改数据库表中已有的记录。可以根据条件去做修改。
- 语法
例如:
注意:修改必须要有where子句条件,不加where条件指的是修改全部
数据删除(DELETE语句)
关键字是DELETE,主要功能室删除数据库表中已有的记录。可以依照条件去做删除。
- 语法
例如:
注意:删除必须要有where子句条件,不加where条件指的是删除全部
- truncate 清空表
delete truncate drop 区别
- delete:只删除表中数据,保留索引,不会改变表结构
- truncate:删除表中的数据+索引(重置索引),不会改变表结构
- drop:删除表中的所有并且删除表结构(表没了)
DQL基本语句的基本语法(单表)
关键字是SELECT,主要功能是查询数据库表中已有的记录。
- 语法
例如:
- 表别名和字段别名
- 方式一:字段名后添加 as+别名
- 方式二:字段名后添加别名用引号包裹
- 方式三:字段名后直接添加别名不使用引号
- 去除重复 distinct
去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
- WHERE条件子句
- WHERE条件子句不是必须的;
- WHERE子句,可以给查询增加条件;
- 条件:为筛选条件,如不指定则修改该表的所有数据。
- LIKE 关键字(模糊查询)
- IN 关键字(范围查询)
- 查询的字段的值,至少与IN 后的括号中的一个值相同;
- 多个值之间用英文逗号隔开。
- NULL 值查询
- NULL代表“无值”;
- 区别于零值0和空符串;
- 只能出现在定义允许为NULL的字段;
- 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
DQL高级语句的基本语法(多表)
- 等值查询(内联查询)和非等值查询
- 与单表查询类似,都是SELECT语句;
- 把多个表放到FROM后,并用逗号隔开;
- 可使用AS关键字取别名,便于引用;
- 如无重名查询字段则可省略数据表的指定。
- 内联查询(inner join)
语法:SELECT * FROM 表1 INNER JOIN 表2 ON 条件
INNER JOIN:在表中至少一个匹配时,则返回记录。
INNER JOIN举例:
- 外联查询(left join/right join)
语法:SELECT * FROM 表1 LEFT| RIGHTJOIN 表2 ON 条
LEFT JOIN:从左表(表1)中返回所有的记录,即便在右 (表2)中没有匹配的行。
RIGHT JOIN:从右表(table_2)中返回所有的记录,即便 在左(table_1)中没有匹配的行。
如下图例所示:
LEFT JOIN举例:
RIGHT JOIN举例:
- 求两个查询的并集(UNION)
union是求两个查询的并集。
union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据。
注意:
- 列名不一致时,会以第一张表的表头为准,并对其栏目。
- union 会将重复的行过滤掉。
- 如果查询的表的列数量不相等时,会报错。
- 在每个子句中的排序是没有意义的,mysql在进行合并的时候会忽略掉。
- 如果子句中的排序和limit进行结合是有意义的。
- 可以对合并后的整表进行排序。
- union all 是求两个查询的并集,但是不会把重复的过滤掉,而是全部显示出来
子查询
子查询,又叫内部查询,所有的子查询必须用小括号括起来
where 型子查询
from型子查询
- 把内层的查询结果当成临时表,供外层sql再次查询。
- 查询结果集可以当成表看待。
- 临时表要使用一个别名。
exists型子查询
- 把外层sql的结果,拿到内层sql去测试,如果内层的sql成立,则该行取出。
- 内层查询是exists后的查询。
流程控制函数语句(特殊查询)
- IF()函数
- IFNULL()函数
- 简单case
- 搜索case