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语法是最基础,最常用且最重点的知识点,需要小伙伴们掌握哈
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值