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 条件子句

运算符含义示例
=等于where id = 5
<> 或 !=不等于where id != 5
>大于where id > 5
<小于where id < 5
>=大于等于where id >= 5
<=小于等于where id =< 5
and并且where job = ‘销售’ and sal = 1250.00
or或者where id = 5 or id = 10
between…and区间范围where id between 5 and 10
not非/甚少单独使用,一班与其他关键字连接使用见下面 not in
in当查询某个字段的值为多个值得时候使用where id in(5,10,15,20)
not in当查询某个字段的值不为多个值得时候使用where id not in(5,10,15,20)
is null为空where manager is null
is not null不为空where manager is not null

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()满足查询条件的记录总和数select count(*) from emp
sum()总和select sum(sal) from emp
avg()平局值select avg(sal) from emp
max()最大值select max(sal) from emp
min()最小值select min(sal) from emp

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值