【MySQL】MySQL基础语法总结

1. 基本概念

  • 三大范式:原子性、主键以外的列必须完全依赖主键、非主键列之间不能相关依赖
  • 数据类型:整数、浮点型、定点数型、日期和时间类型、字符串类型、二进制等
  • CHAR 和 VARCHAR的区别:VARCHAR存储可变长度的字符串;当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1

2. 数据库的基本操作

2.1 数据库基本操作

-- 创建数据库
create database 数据库名称;
-- 创建数据库后查看该数据库的基本信息
show create database db1;
-- 查询MySQL中所有的数据库
show database
-- 删除数据库
drop database db1;

2.2 数据表的基本操作

  • 创建数据表
 create table 表名(
         字段1 字段类型,
         字段2 字段类型,
         …
         字段n 字段类型
);
  • 查看数据表
show tables;
  • 修改数据表
-- 修改表名
alter table student rename to stu;
-- 修改字段名
alter table stu change name sname  vachar(10);
-- 修改字段数据类型
alter table stu modify sname int;
-- 删除数据表
drop table 表名

3. 数据表的约束

  • 防止错误的数据被插入到数据表中
    在这里插入图片描述
    主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。
字段名 数据类型 primary key;

-- 示例(1)
create table student(
id int primary key,
name varchar(20)
);

-- 示例(2)
create table student01(
id int
name varchar(20),
primary key(id)
);

4. 插入数据

-- 插入一条数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (1,2,...);
-- 同时插入多条记录
INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (1,2,),(1,2,),...;

5. 更新数据

UPDATE 表名 SET 字段名1=1[,字段名2 =2,] [WHERE 条件表达式];

6. 删除数据

-- 删除部分数据
DELETE FROM 表名 [WHERE 条件表达式];
-- 删除全部数据
delete from student;```
**TRUNCATE和DETELE的区别**
- DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。
- 使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1
- DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句
# 7. 插入数据
```sql 
-- 插入一条数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (1,2,...);
-- 插入多条数据
INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (1,2,),(1,2,),...;

8. 查询数据

-- 查询所有字段
select * from student;
--查询指定字段
select sid,sname from student;
-- 查询常数
select sid,sname,'2021-03-02' from student;
--- 从查询结果中过滤重复数据
select distinct gender from student;
-- 算术运算符(查询学生10年后的年龄)
select sname, age+10 from student;

9. 函数

9.1 聚合函数

  • count():统计表中数据的行数或者统计指定列其值不为NULL的数据个数
-- 查询有多少该表中有多少人
select count(*) from student;
  • max():计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算
-- 查询该学生表中年纪最大的学生 
select max(age) from student;
  • 其它:min()、sum()、avg()

9.2 时间函数

SELECT NOW();
SELECT DAY (NOW());
SELECT DATE (NOW());
SELECT TIME (NOW());
SELECT YEAR (NOW());
SELECT MONTH (NOW());
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_TIMESTAMP();
SELECT ADDTIME('14:23:12','01:02:01');
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);
SELECT DATEDIFF('2019-07-22','2019-05-05');

9.3 数学函数

-- 绝对值
SELECT ABS(-136);
-- 向下取整
SELECT FLOOR(3.14);
-- 向上取整
SELECT CEILING(3.14);

10. 条件查询

10.1 WHERE + 关系运算符

在这里插入图片描述

10.2 IN关键字查询

IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。

select * from student where sid in ('S_1002','S_1003');

10.3 Between And

BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来

select * from student where age between 15 and 18;

10.4 使用空值查询

使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串

select * from student where sname is not null;

10.5 使用and关键字查询

在MySQL中可使用AND关键字可以连接两个或者多个查询条件。

select * from student where age>15 and gender='male';

10.6 使用or关键字查询

select * from student where age>15 or gender='male';

10.7 使用LIKE关键字查询

-- 普通字符串
select * from student where sname like 'wang';

-- 含有%通配的字符串(%用于匹配任意长度的字符串)
select * from student where sname like 'li%';

-- 含有_通配的字符串
-- (下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符)
select * from student where sname like 'zx__';

10.8 使用LIMIT限制查询结果的数量

select * from student order by age asc limit 3;

10.9 使用GROUP BY进行分组查询

GROUP BY 子句可像切蛋糕一样将表中的数据进行分组,再进行查询等操作。
通过GROUP BY将原来的表拆分成了几张小表。

  • GROUP BY和聚合函数一起使用
--(统计各部门员工个数 MySQL命令)
select count(*), departmentnumber from employee group by departmentnumber;
  • GROUP BY和聚合函数以及HAVING一起使用
select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;

10.10 使用ORDER BY对查询结果排序

在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。

SELECT 字段名1,字段名2,FROM 表名
ORDER BY 字段名1 [ASCDESC],字段名2 [ASC | DESC];

select * from student order by age desc;

11. 设置别名(AS)

SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ;
-- 示例
 select name as '姓名',id from student;

12. 表的关联关系

  • 多对一:是数据表中最常见的一种关系。例如:员工与部门之间的关系,一个部门可以有多个员工;而一个员工不能属于多个部门只属于某个部门。在多对一的表关系 中,应将外键建在多的一方否则会造成数据的冗余。
  • 多对多:学生与老师之间的关系,一个学生可以有多个老师而且一个老师有多个学生。通常情况下,为了实现这种关系需要定义一张中间表(亦称为连接表)该表会存在两个外键分别参照老师表和学生表。
  • 一对一:一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。

12.1 关联查询

select * from student where classid=(select cid from class where cname='Java');

12.2 关联关系的删除数据

delete from student where classid=(select cid from class where cname='Java');
delete from class where cname='Java';

13. 多表连接查询

13.1 交叉连接查询

  • cross from: 返回的结果是被连接的两个表中所有数据行的笛卡尔,没有意义

13.2 内连接查询(inner join)

内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的 记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中。

select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid;

13.3 外连接查询

有时还需要在返回查询结果中不仅包含符合条件的数据,而且还包括左表、右表或两个表中的所有数据,此时我们就需要使用外连接查询。外连接又分为左(外)连接和右(外)连接。

  • LEFT [OUTER] JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录
  • RIGHT [OUTER] JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。

14. 子查询

子查询是指一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时,首先会执行子查询中的语句,再将返回的结果作为外层查询的过滤条件。在子査询中通常可以使用比较运算符和IN、EXISTS、ANY、ALL等关键字。

14.1 带比较运算符的子查询

`> <、=、>=、<=、!=等

select * from class where cid=(select classid from student where sname='张三');

14.2 带EXISTS关键字的子查询

EXISTS关键字后面的参数可以是任意一个子查询, 它不产生任何数据只返回TRUE或FALSE。当返回值为TRUE时外层查询才会 执行
select * from class where exists (select * from student where sname=‘王五’);

14.3 带ANY关键字的子查询

ANY关键字表示满足其中任意一个条件就返回一个结果作为外层查询条件。
select * from class where cid > any (select classid from student);

14.4 带ALL关键字的子查询

ALL关键字与ANY有点类似,只不过带ALL关键字的子査询返回的结果需同时满足所有内层査询条件
select * from class where cid > all (select classid from student);

查询语句的书写顺序和执行顺序

  • 查询语句的书写顺序和执行顺序
    select ===> from ===> where ===> group by ===> having ===> order by ===> limit
  • 查询语句的执行顺序
    from ===> where ===> group by ===> having ===> select ===> order by ===> limit

参考文献

参考文献

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值