My SQL常用命令及其知识点

练习题1:大概两百多行,需要的可以关注一下,私我分享给你

思维导图:需要的可以关注一下,私我分享给你

 

My SQL基本概念:

        数据库的英文单词:DataBase 简称:DB

什么是数据库?

        用于存储和管理数据的仓库

数据库的特点:

        1.持久化存储数据的,其实数据库就是一个文件系统.

        2.方便存储和管理数据

        3.使用了统一的方式操作数据库--SQL

My SQL服务启动

        1.手动

        2.cmd-services.msc打开服务的窗口

        3.使用管理员打开cmd

                net start mysql:启动数据库

                net stop mysql:关闭数据库

登录与退出

登录:

        1.mysql -uroot -p密码

        2.mysql -hip -uroot -p密码连接目标的密码

        3.mysql --host=ip  --user=root --password=密码连接目标的密码

退出:

        1.exit

        2.quit

        

定义语言

用来定义数据库对象:数据库.表.列等

操作数据库:

查看:数据库

查看当前数据库
    show databases;#显示数据库的名字

创建:数据库

#创建数据库
create database heima;
#特殊的创建数据库的方式:只有数据库不存在时候才创建,存在不创建
create database if not exists heima;

删除数据库

#删除数据库
drop database heima;
#特殊的删除方式:只有数据库存在时才删除
drop database if exists heima;

使用:数据库

#使用场景:
#应用场景:当有多个数据库时,需要进行数据库的切换.例如现在使用的是A数据库需要切换到B数据库上:
use heima;
#查看使用那个数据库
select database();

修改:数据库:

#通常是修改数据库的编码表(字符集)例如现在把heima的数据库修改为GBK;
alter database heima charset GBK;

操作数据表:

创建数据表:

create table 表名

(
    列名1 数据类型,
    列名2 数据类型,
    ......
    列名n 数据类型,
);

My SQL常用数据类型:

整数:int

小数:double(长度)             长度用来规范该字符串只能存储多少个字符数据的
    decimal(6,2)            长度(有6个符号位,小数点后最多两位)例如:100.00

字符串:varchar
      char

      name varchar(5)       最多存储5个字符,可变长度[只要不超过5个字符即可]
                            例如:存储"AB" 实际存储的是"AB"  (不需要填充空格)
      name char(5)          最多存储5个字符,可变长度[必须存储5个字符,不够时自动补充空格]
                            例如:存储"AB" 实际存储的是"AB   "


日期:date                    格式:yyyy-MM-dd(年月日)
    datetime                格式:yyyy-MM-dd HH:mm:ss  (年月日)年月日时分秒

常用聚合函数:

count:统计指定列不为NULL的记录行数;

sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

查看当前数据库下所有表:

show tables;

查看表结构:

desc 数据表表名;

删除表

删除student的表
drop table student;
特殊的删除数据表的方式:只有在表存在的时候才会删除
drop table if exists student;

修改表

修改表的名字
alter table 表的名字 rename to 新表的名字;

操作表中数据列

添加:新列  新增一列

alter table 表名 add 新列名 数据类型;

删除:列  删除已有列

alter table 表名 drop 列名;
alter table 表名 drop 列名,drop 列名;

修改:列

修改列名
    #仅修改列名
    alter table 表名 change 原列名 新列名 原有数据类型;
    #仅修改数据类型
    alter table 表名 change 原列名 原列名 新数据类型;
    #修改列名和数据类型
    alter table 表名 change 原列名 新列名 新数据类型;
#修改数据类型
    alter table 表名 modify 列名 要修改的数据类型;

DML数据操作语言

针对数据表中的数据进行增删改操作

  • 添加一行数据

  • 删除一行数据(不能删除一列数据)

  • 修改数据

    • 修改单个数据

    • 修改多个数据

操作数据:添加数据(insert)

#方式1:给指定的列下添加数据
-- 给指定的id和name列添加数据
insert into 表名(id,name) values (1, '上海');
-- 给指定的表中所有列添加数据
insert into 表名(name,gedner,id,score) values ('上海', '男' , 1 ,99.5);

#方式2:给所有列下添加数据
-- 要求:按照表中列的排列顺序添加数据。 例:student(id,name,gender,score)
-- 在mysql中,字符串和字符全部都使用英文单引号表示 (双引号也可以)
insert into 表名 values (1, '上海', '男' , 99.5);#正确写法
insert into 表名 values ('上海', '男' , 1 ,99.5);#错误写法

#方式3:批量添加数据
insert into 表名(name,gedner,id,score) values 
('上海', '男' , 1 ,99.5),
('北京', '女' , 2 ,9.5),
('广州', '男' , 3 ,90.5);

 操作数据:删除数据(delete)

# 删除:符合条件的记录
delete from 表名 where 条件
# 删除: 表中所有的记录
delete from 表名 

# 删除表中所有记录
truncate table 表名;


属于DDL里面
truncate table 表名     VS   delete from 表名 
-- delete: 是删除表中的数据行,是一行一行删除表中的数据。
-- truncate : 直接删除整张表,在重新创建表 (效率高)
delete from student where id in(12,14)
删除id为12或者14的记录行
delete from student where id=12 orid=14;
删除id为12或者14的记录行

 操作数据:修改数据(update)

# 没有条件的修改语句
update 表名 set 字段1=新值1,字段2=新值2,....
-- 以上代码执行完之后: 把表中的对应列下的所有数据全部修改为新值  (慎用)

# 带有条件的修改语句 (推荐)
update 表名 set 字段1=新值1,字段2=新值2,.... where 条件
-- 以上代码执行之后: 只修改符合条件的表中数据值

DQL:数据查询语言

作用:针对数据表中的数据进行查询操作

数据查询:select

简单查询

# 查询指定字段数据
select 字段1,字段2,...字段n  from 表名;

# 查询所有字段数据
select * from 表名;  -- 开发中不推荐
select 字段1,字段2,...字段n  from 表名; -- 推荐写法(查询所有列数据,把所有列名全部写出来)

# 去除重复记录查询
select distinct 字段1,字段2  from 表名;

# 查询时起别名
-- 给查询的字段起别名
select 字段1 AS 别名1 , 字段2 , 字段3 别名3  ... from 表名;
-- 给查询的表起别名
select 表别名.字段1, 表别名.字段2, 表别名.字段3  from 表名 AS 表别名;

条件查询

select 字段1,字段2,...字段n  from 表名 where 条件列表;
not in 取反
大于等于50并且小于等于90
between 50 and 90(范围50-90)
查询空值  is null
查询地址不为空 is not null;

模糊查询  

在京东上,搜索: 手机
京东就会去检索:包含"手机"关键字的所有相关信息。 例: 小米手机、 手机膜、 手机壳、苹果手机充电器
这种方式:就是模糊查询

# 在mysql中可以进行:模糊查询
select 字段1,字段2,...字段n  from 表名 where 字段名 LIKE '通配符字符串';
-- 通配符字符串: 就是包含mysql通配符的字符串
-- mysql通配符: %    _
-- % : 任意个字符   
'马%' 马开头
'%马%' 前面任意  马  后面任意
-- _ : 单个字符     
'马__'  两个下划线 代表查询姓马的名字三个字;

 排序查询

排序查询: 对查询出来的数据进行排序(升序[从小到大]、降序)

select 字段1,字段2,...字段n  
from 表名 
where 条件列表
order by 字段1 排序规则1 , 字段2 排序规则2 , ......
# 排序规则: 升序、 降序
# MySQL中的升序:ASC   --默认
# MySQL中的降序:DESC

分组查询  

-- 分组查询: 通常就是针对数据划分为不同的组,对每组数据进行统计

-- 在进行分组统计时:需要使用mysql提供的一些统计函数(聚合函数[聚集在一起合并计算])
MySQL中的聚合函数:
 count(字段) : 按组统计每组的记录数是多少
 聚合函数不要使用带有null数据的字段作为统计;
 max(字段):    按组统计每组中指定字段的最大值
 min(字段):    按组统计每组中指定字段的最小值
 sum(字段)      按组统计每组中指定字段的总和
 sum(math+english)     英语和数学总分加起来


 sum(math)+sum(english)
 如果存在null.可以使用ifnull(列名 默认值):
 判断给定的列下的数据是否为null,为null返回默认值 不为null返回字段中的值
 例如 select ifnull(math,0) 如果是null则返回0,不是null就会返回本身的值


 avg(字段)      按组统计每组中指定字段的平均值


语法:
select 聚合函数(字段) from 表名
-- 通常聚合函数会和分组查询配合使用

注意事项 : null数据不参与聚合函数的计算

# 分组查询的语法
select 字段1,字段2,...字段n  
from 表名 
where 条件列表[分组前条件过滤]
group by 字段1,字段2,....
having 分组后的条件过滤

-- 分组SQL代码中的注意事项:
1. 使用了group by后,查询的字段必须和分组字段保持一致
   #错误代码:  语法报错
   select name , address , age   #name字段没有出现在group by后面
   from student 
   group by address, age  #按照address和age分组,没有name
2. 使用了group by后,查询的字段和分组字段不一致时,必须保证查询字段使用了聚合函数
   #正确写法:  未出现在group by后面的字段,要查询时可以放在聚合函数中
   select count(name) , address , age   #name字段没有出现在group by后面
   from student 
   group by address, age  #按照address和age分组,没有name


where 和 having的区别:
1. where是在分组之前执行的条件过滤(条件不满足的,不会参与分组)
   having是在分组之后执行的条件过滤
2. where条件中不能书写:聚合函数
   having条件中可以书写:聚合函数
   
   
having不能单独使用,必须跟在group by后面(没有分组就一定没有having)   

 分页查询

问题:当数据表中有1000W条数据时,使用"select * from 表名"查询所有数据,会有什么问题?
答案:查询非常慢。  给用户展示的数据也不友好(一次让用户看1000W的数据)

开发中,通常针对体量大的数据,会进行:分页查询

  • 一次查询出一小部分数据,给用户展示

  • 用户:通过"下一页",进行后缀数据的查询

# mysql中的分页查询
select 字段列表 from 表名 limit 起始位置 , 限定条数[要查询的条数];
-- 起始位置: 从数据表的哪一行开始进行查询
-- 限定条件: 要查询多少条数据

针对mysql数据库,分页查询的公式:
起始位置 = (页码-1)*每页显示条数

例如:跳过前面1条显示4条;
select *from student limit 1,4;

起始位置是0是可以省略前面的数
select *from student limit 4;
不省略的话
select *from student limit 0,4;

 完整的SQL语句:

select    字段列表          -- 只在说到列表,就表示可以书写多个字段
from      表
where     分组前条件列表     -- 可以有多个条件
group by  分组字段列表
having    分组后条件列表     -- 只有分组了才会有用
order by  排序字段列表
limit     起始位置,查询条数


-- mysql语句的执行,并不像java语言一样,从前到后依次执行
SELECT语句的执行顺序:
1. from       表
2. where      分组前条件列表
3. group by   分组字段列表
4. having     分组后条件列表
5. select     字段列表
6. order by   排序字段列表-- 查询出数据结果之后,才进行排序
7. limit      -起始位置,查询语句- 查询出数据结果之后,才进行分页

DCL:数据控制语言

作用:管理数据库的权限、用户

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值