SQL笔记(基础)

MySQL数据库笔记

注释

单行注释:

show databases; -- 查看当前所有数据库
show databases; #查看当前所有数据库(mysql特有)

多行注释:

show databases; 
/*
多行注释
多行注释
多行注释
*/

DDL语句

查看当前所有数据库:

show databases; -- 查看当前所有数据库

创建数据库:

create database db1; -- 创建名为db1的数据库
create database if not exists db1; -- 判断,如果不存在则创建

删除数据库:

drop database db2; -- 删除名为db2的数据库
drop database if exists db2; -- 判断,如果存在则删除

进入数据库:

use db1; -- 进入名为db1的数据库

查询当前所在数据库:

select database(); -- 查询当前所在数据库

查询当前数据库的表

show tables; -- 查询当前数据库的所有表

查询表结构:

desc wp_admin; -- 查询数据库中名为 wp-admin 的表结构

查询建表语句

show create table wp-admin; -- 查询 wp_admin 的建表语句

创建表:

create table tb_user( -- 创建一个名为 tb_user 的表
    id int, -- id 的数据类型为 int
    username varchar(20), -- 用户名的数据类型为 varchar 长度为 20
    password varchar(32)  -- 用户名的数据类型为 varchar 长度为 32
);

删除表:

drop table wp_admin; -- 删除名为 wp-admin 的表
drop table if exists wp_admin -- 判断,如果存在则删除

删除表并且重建

truncate table wp_admin; -- 删除 wp_admin 并且重建

修改表名:

alter table wp_admin rename to tb_admin; -- 把名为 wp-admin 的表明修改位 tb-admin

添加一列:

alter table wp_admin add gender char(1); -- 在表名为 wp_admin 的表结构中添加一列名为 gender ,数据类型为 char 的列

修改数据类型:

alter table wp_admin modify gender char(2); -- 修改表名为 wp_admin 中的名为 gender 的列的数据类型为 char(2)

修改列名和数据类型:

alter table wp_admin change gender address varchar(50); -- 修改名为 wp_admin 的表中的名为 gender 的列,列名为 address 数据类型为varchar(50)

删除列:

alter table wp_admin drop address; -- 删除表名为 wp_admin 中的 address 这一列

DML语句

添加数据:

insert into 表名(列名1,列名2,列名3,...) values(值1,值2,值3,...);
insert into 表名 values(值1,值2,值3,...);
insert into 表名 values(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...),...;

修改数据:

update 表名 set 列名1=值1,列名2=值2,列名3=值3,... where 列名1 = 值1;

注意:如果不加where条件,则将所有数据都修改!

删除数据:

delete from 表名 where 列名1=值1;

DQL语句

基础查询:

select name from stu; -- 查询 stu 表中的 name列
select * from stu; -- 查询 stu 表中的所有数据

查询时去除重复记录

select distinct address from stu; -- 查询这 address 这一列时去除重复的内容

查询时设置别名

select name as 姓名,math as 数学成绩, english as 英语成绩 from stu; -- 查询的时候设置别名方便查看(原本表头显示“name”,现在显示“姓名”)

条件查询:

  1. 查询年龄大于二十的学员

    select * from stu where age>20;
  2. 查询年龄大于等于二十的学员

    select * from stu where age>=20;
  3. 查询年龄大于二十小于三十的学员

    select * from stu where age >20 && age < 30;
    select * from stu where age >20 and age < 30;
    select * from stu where age between 20 and 30;
  4. 查询年龄等于18 或 20 或 40 的学员

    select * from stu where age = 18 or age = 20 age = 40;
    select * from stu where age in(18,20,40);

参考

符号 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围之内(都包含)
in(...) 多选一
like 占位符 模糊查询 _单个任意字符 %多个任意字符
is null 是null
is not null 不是null
and 或 && 并且
or 或 || 或者
not 或 ! 非,不是
  1. 模糊查询

查询姓名为两个字的学员

select * from stu where name like '__'; -- 两个下划线

查询姓”马“的学员

select * from stu where name like '马%'; -- % 多个任意字符

查询姓名第二个字是”花“的学员

select * from stu where name like '_花%'; -- _ 单个任意字符

查询名字中包含”德“的学员

select * from stu where name like '%德%';

排序查询

排序方式:

​ ASC:升序排列(默认)

​ DESC:降序排列

例:

  1. 查询所有学生,按照年龄升序排列

    select * from stu order by age asc;
  2. 查询所有学生,按照数学成绩降序排列

    select * from stu order by math desc;
  3. 查询所有学生,按照数学成绩升序排列,如果数学成绩一样,再按照英语成绩升序排列

    select * from stu order by math asc , english asc;

聚合函数

函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

例:

  1. 查询所有学生个数

    select count(id) from stu; -- 通过id查询一共有多少个学生,null不统计
  2. 查询数学成绩最高分

    select max(math) from stu;
  3. 查询数学成绩最低分

    select min(math) from stu;
  4. 查询数学总成绩

    select sum(math) from stu;
  5. 查询数学成绩的平均分

    select avg(math) from stu;
  6. 查询英语成绩的最低分

    select min(english) from stu; -- null 不参与所有聚合函数的运算

分组查询

分组查询

select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]...;

例:

  1. 查询男同学和女同学各自的数学平均分

    select sex, avg(math) from stu group by sex;
  2. 查询男同学和女同学各自的数学平均分以及各自的人数

    select sex, avg(math), count(*) from stu group by sex;
  3. 查询男同学和女同学各自的数学平均分以及各自的人数,要求分数低于70的不参与运算

    select sex, avg(math), count(*) from stu where math > 70 group by sex;
  4. 查询男同学和女同学各自的数学平均分以及各自的人数,要求:分数低于70的不参与运算,分组之后人数大于2

    select sex, avg(math), count(*) from stu where math > 70 group by sex having count(*) > 2;

分页查询

分页查询

select 字段列表 from 表名 limit 起始索引 , 查询条目数;

例:

  1. 从0开始查询,查询3条数据

    select * from stu limit 0 , 3;
  2. 每页显示3条数据,查询第1页

    select * from stu limit 0 , 3;
  3. 每页显示3条数据,查询第2页

    select * from stu limit 3 , 3;
  4. 每页显示3条数据,查询第3页

    select * from stu limit 6 , 3;

*起始索引 = (当前页码 - 1) 每页显示的条数**

DCL语句

查询用户

show databases; -- 查询所有数据库

use mysql; -- 进入名为 mysql 的数据库

select database(); -- 查询当前所在数据库

show tables; -- 查询所有当前表

select * from user; -- 查询 user 表中的所有数据

创建用户

create user '用户名'@'主机名' identified by '密码';

create user 'admin'@'localhost' identified by '123456'; -- 创建了一个用户名为 admin 密码为 123456 访问范围 本机

create user 'byboy'@'%' identified by '123456'; -- 创建了一个用户名为 byboy 密码为 123456 访问范围 任意

修改用户密码

alter user 'admin'@'%' identified with mysql_native_password by '1234';

删除用户

drop user '用户名'@'主机名';

查询权限

show grants for '用户名'@'主机名'; -- 查询用户权限

授予权限

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

grant all on byboy_cn.* to 'byboy'@'localhost'; -- 给 byboy 用户授予对 byboy_cn 这个数据库所有表的操作权限

撤销权限

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

revoke all on byboy_cn.* from 'byboy'@'localhost'; -- 撤销 byboy 用户对 byboy_cn 这个数据库所有表的操作权限
阅读剩余
THE END