MySQL入门(一)SQL 语句基础

前言


数据库学习中最基础的就是我们的SQL语句了,所以让我们先从我们的SQL语句开始吧

一、SQL基础_增删改查简单操作


1. 创建数据库
默认字符集

create database DATABASE_NAME;
create database 数据库名;

设置字符集编码

create database DATABASE_NAME character set utf8;
create database 数据库名 character set utf8;

2. 查看数据库信息
show create database DATABASE_NAME;
show create database 数据库名;

3. 删除数据库
drop database DATABASE_NAME;
drop database 数据库名;

4. 查询所有数据库
show databases;

5. 使用数据库/进入数据库
use DATABASE_NAME;
use 数据库名;

6. 查询库中存在什么表
show tables;

7. 创建新表
create table TABLE_NAME(
 column1 type1 [not null] [primary key],
 column2 type2 [not null],
 ...
);

8. 删除表
drop table TABLE_NAME;
drop table 表名;

9. 查询所有表
show tables;

10. 修改表名
alter table 旧表名 rename to 新表名;
alter table OLD_TABLENAME rename to NEW_TABLENAME;

11. 查询创表语句
show create table TABLE_NAME;
show create table 表名;

12. 查询表结构
desc TABLE_NAME;
desc 表名;

13. 增加一个列/增加一个字段
在所有列的最后增加一个字段

alter table TABLE_NAME add [column] column1 type [not null];
alter table 表名 add [column] 列名 类型 [not null];

在某个列之后增加一个字段

alter table TABLE_NAME add [column] column1 type1 [not null] after column2;
alter table 表名 add [column] 列名 类型 [not null] after 已存在的列名;

添加一个字段在第一列

alter table TABLE_NAME add [column] column1 type1 [not null] first;
alter table 表名 add [column] 列名 类型 [not null] first;

14. 删除某个列/字段
alter table TABLE_NAME drop [column] column1;
alter table TABLE_NAME drop [column] 字段名;

15. 修改字段
修改字段名

alter table TABLE_NAME change [column] OLD_COLUMNNAME NEW_COLUMNNAME NEW_TYPE;
alter table 表名 change [column] 旧字段名 新字段名 新数据类型;

修改字段类型

alter table TABLE_NAME modify [column] COLUMNNAME NEW_TYPE;
alter table 表名 modify [column] 字段名 新数据类型 新类型长度 新默认值 新注释;

16. 简单的增删改查数据的语句
增(insert into)

insert into 表名(field1,field2,...) values(value1,value2);

删(delete)

delete from 表名 where 条件;

改(update)

update 表名 set field1=xxx,field2=xxx,... where 条件;

查(select)

select 字段名 from 表名 where 条件;

经典面试题:
1.drop、delete和truncate之间的区别
drop删除库或者表,数据和结构定义;delete和truncate只是删除表的数据
delete可以指定where条件,删除满足条件的记录,truncate删除所有记录
对于自增字段的表,delete不会将 自增值清零,而truncate是把表记录和定义都删除了,然后重建表的定义,所以自增主键会重头开始计数


二、SQL提升_常用关键字


表 emp在这里插入图片描述

 

表 dept

在这里插入图片描述
1. where 条件子句

2. 模糊查询 like
_ :代表一个未知字符
% :代表0或多个未知字符
| 题 | 答案 |
|–|–|
| 以x开头 | x% |
| 以x结尾 | %x |
| 包含x | %x% |
| 以x开头以y结尾 | x%y |
| 第二个字符是x | _x% |
| 第三个字符是x 倒数第二个是y | _x%y |


3. order by 排序
语法:order by 列名

order by 语句用于根据指定的列对结果集进行排序。
order by 语句默认按照asc升序对记录进行排序,如果需要降序排列需要添加desc。

例:

select * from emp order by sal desc;

4. limit 分页
语法:select * from 表名 limit 跳过的条数,每页的条数
跳过的条数= (请求的页数-1)*每页的条数
这里跳过的条数,我们一般称为偏移量 offset
好处:用户体验,网络传输,查询压力

推导:
第一页 : limit 0,5
第二页 : limit 5,5
第三页 : limit 10,5

第N页 : limit (pageNo-1)*pageSzie,pageSzie
pageNo:页码,pageSize:单页面显示条数]

例:

select * from emp limit 0,3;
select * from emp limit 3; -- 如果想查询的为第一页的数据则第一个参数0可以省略

5. 聚合函数

注意事项:
count(列名/字段)
统计该字段再表中出现的次数,忽略字段为null的情况,即不统计字段为null的记录
count() 不建议使用
会统计所有的列,相当于行数的总和,包含字段为null的记录
count(1)
1表示代码行,在统计结果的时候,包含字段为null的记录
对比:
在表中没有主键时,count(1)比count()效率高
有主键时,count(主键)效率最高
若表中只有一个字段,则count(*)效率最高

 

6. group by 分组
语法:group by 字段/列名

将某个字段相同值的数据划分为一组 进行统计查询的查询方式

例:

select job from emp group by job

7. having
语法:having 分组后的条件子句

作用:having 的作用时筛选满足条件的组,即在分组之后过滤数据

重点1:where,having的区别
where是在分组(group by)前筛选,having是分组(group by)后的筛选条件,是对已经分组之后的数据组内再筛选
where子句中不能使用聚合函数(count,sum,avg,max,min)为条件
重点2:SQL关键字顺序
select 字段名 from 表名 
[left|right|inner join 表名]  --联合查询(外连接|内连接)
[where ...]  --分组前过滤的条件
[group by ...]  --分组
[having ...]  --分组后过滤的条件
[order by ...]  --排序
[limit 跳过的条数,每页的条数];  --分页

8. as
作用:起别名

给数据列名取一个新的别名

select name [as] n,manager [as] m,hirthday [as] h from emp;

给数据库表名取一个新的别名

select * from emp [as] e;

可给一个经过计算或总结查询出的结果用一个新的别名来替代

select sum(sal) [as] 总薪资 from emp e;

注意:as 可省略

9. distinct
作用:去重(去除重复的记录行)

select distinct job from emp;

三、SQL进阶_多表联查
多表查询是指基于两个和两个以上的表的查询。因为在实际应用中,我们不会也没有办法将所有的数据都存储在一张表上,所以查询单张表不能满足我们的需求。
如上述数据库中的emp(员工表)中我们只显示了员工对应的部门编号,而如果需要查询员工信息的同时将部门名称也显示出来,我们就需要用到dept(部门表)。

select * from emp,dept where emp.dept_id = deptId;

1. 笛卡尔积


1.1 笛卡尔积简介
笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。 简单的说就是两个集合相乘的结果。可以理解为在数学中,有两个集合X和Y的乘积的结果,我们又叫做直积。
假设集合A={a, b},集合B={1, 2, 3},则两个集合的笛卡尔积为{(a, 1), (a, 2), (a, 3), (b, 1), (b, 2),(b, 3)}。

1.2 笛卡尔积在SQL中的运用
我们在对数据库表进行操作时,经常会多张表进行关联,然而多表我们很容易出现冗余数据。
比如有两张表:student表,mark表
student表

在这里插入图片描述
mark表

 在这里插入图片描述

 

查询语句

select class,student.code,name,sub,mark from student,mark;

执行查询语句后会出现下面这种情况,我们称为笛卡尔积查询;表1有4条数据,表2也有4条数据,可以将表1理解为集合X,表而理解为集合Y,那我们查出的结果就为 4*4=16条数据。但是这样会造成冗余数据的产生。那么我们如何避免这种情况的发生呢?在这里插入图片描述

 

我们可以在where条件子句中设置关联条件,来避免发生这种情况。
语法格式为:

select 列名1,列名2,... from 表名1,表名2 WHERE 表名1.列名1=表名2.列名2

2.多表联查的连接方式
2.1 内连接
[inner] join on

table1 [inner] join table2 on 连接条件

2.2 外连接
2.2.1 左外连接
left join on

table1 left join table2 on 连接条件

2.2.2 右外连接
right join on

table1 right join table2 on 连接条件

例子:

在这里插入图片描述
内连接
select e.id as 员工id,e.name as 员工名,d.name as 部门名 from emp as e inner join dept as d on e.dept_id = d.id;

外连接
左外链接

 

select e.id as 员工id,e.name as 员工名,d.name as 部门名 from emp as e left join dept as d on e.dept_id = d.id;

右外连接

select e.id as 员工id,e.name as 员工名,d.name as 部门名 from emp as e right join dept as d on e.dept_id = d.id;在这里插入图片描述

 

仔细思考:

经典面试题
内连接和外连接的区别?
左外连接和右外连接的区别?
内连接 查询出来的为两个表之间的交集数据(匹配数据)
左外连接 显示 join 左边的表的所有数据(不管两个表是否匹配),对于不匹配的部分都用 NULL 表示
右外连接 显示 join 右边的表的所有数据(不管两个表是否匹配),对于不匹配的部分都用 NULL 表示

四、数据库知识点知识体系

在这里插入图片描述
未完待续(持续更新中)…

 

总结
数据库中SQL语法是最基础,最常用且最重点的知识点,需要小伙伴们掌握哈
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值