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”,现在显示“姓名”)
条件查询:
-
查询年龄大于二十的学员
select * from stu where age>20;
-
查询年龄大于等于二十的学员
select * from stu where age>=20;
-
查询年龄大于二十小于三十的学员
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;
-
查询年龄等于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 或 ! | 非,不是 |
- 模糊查询
查询姓名为两个字的学员
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:降序排列
例:
-
查询所有学生,按照年龄升序排列
select * from stu order by age asc;
-
查询所有学生,按照数学成绩降序排列
select * from stu order by math desc;
-
查询所有学生,按照数学成绩升序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math asc , english asc;
聚合函数
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
例:
-
查询所有学生个数
select count(id) from stu; -- 通过id查询一共有多少个学生,null不统计
-
查询数学成绩最高分
select max(math) from stu;
-
查询数学成绩最低分
select min(math) from stu;
-
查询数学总成绩
select sum(math) from stu;
-
查询数学成绩的平均分
select avg(math) from stu;
-
查询英语成绩的最低分
select min(english) from stu; -- null 不参与所有聚合函数的运算
分组查询
分组查询
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]...;
例:
-
查询男同学和女同学各自的数学平均分
select sex, avg(math) from stu group by sex;
-
查询男同学和女同学各自的数学平均分以及各自的人数
select sex, avg(math), count(*) from stu group by sex;
-
查询男同学和女同学各自的数学平均分以及各自的人数,要求分数低于70的不参与运算
select sex, avg(math), count(*) from stu where math > 70 group by sex;
-
查询男同学和女同学各自的数学平均分以及各自的人数,要求:分数低于70的不参与运算,分组之后人数大于2
select sex, avg(math), count(*) from stu where math > 70 group by sex having count(*) > 2;
分页查询
分页查询
select 字段列表 from 表名 limit 起始索引 , 查询条目数;
例:
-
从0开始查询,查询3条数据
select * from stu limit 0 , 3;
-
每页显示3条数据,查询第1页
select * from stu limit 0 , 3;
-
每页显示3条数据,查询第2页
select * from stu limit 3 , 3;
-
每页显示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