基本命令

创建数据库

create database 数据库名;

删数据库

drop database 数据库名;

显示已有数据库

show databases;

使用数据库(打开数据库)

use 数据库名;

创建表

create table 表名

(    学号 char(10) not null primary key,

    班级 char(20) null,

);

显示表

show tables;

显示表的结构

desc 表名;
或
describe 表名;

往表里添加值

insert into 表名 (`学号`,`姓名`...) --可以省略这个

values('20022','小明',....),(...);

显示表的所有内容

select * from 表名;
Alter 相关
alter table student add name char(4); -- 添加字段和配置结构
alter table student drop name; -- 删除某个字段
alter table student modify name char(10); -- 改变字段的结构,但不改变字段名
alter table student change name names varchar(20); -- 改变字段名和字段结构
alter table student alter names set default '女'; -- 给字段设置默认值 
alter table student alter names drop default; -- 删除字段的默认值 
alter table student rename to student1; -- 重命名表名

表里的数据操纵
插入数据

--添加数据的另一种方式

insert into kc 
set 课程号 = '401',课程名 = 'Java',开课学期 = '1',学时 = '80',学分 = '10';
--主键一样的情况下替换数据
replace into kc
set 课程号 = '401',课程名 = 'PHP',开课学期 = '2',学时 = '90',学分 = '20';

修改数据

--更新数据,无条件

update kc

set 学分 = 学分+10;
--更新数据,带条件

update kc

set 学分 = 学分+100
where 课程号 = '101';
删除数据

--删除某一条数据
delete from kc
where 课程号 = '101';
--从多个表中删除行(数据)
--假设有三个表,t1、t2、t3,他们都含有ID列(字段)。请删除t1中ID值等于t2中ID值的所有行和t2中的ID值等于t3中ID值的所有行。

delete t1,t2
from t1,t2,t3
where t1.id = t2.id and t2.id = t3.id;
或
delete t1,t2
using t1,t2,t3
where t1.id = t2.id and t2.id = t3.id;

--删除指定表中的所有数据,但参与了索引和视图的表不可用它来删,应用delete

truncate table 表名

数据查询
选择指定的列

select 字段名 from 表名;
select * from 表名; --*通配符查询所有字段数据

给列起别名

--给列起别名

select name as 名字 from 表名;

--当别名有空格时需用''号括起来

select student as 'student number' from 表名;

替换查询结果中的数据

--把数量这个字段起别名作为库存,根据条件替换数量字段里的内容(不是真实修改表内数据,只是查询时的修改)

select 图书编号,书名,
case 
    when 数量 is null then '尚未进货'
    when 数量 < 5 then '需进货'
    when 数量 >= 5 and 数量 <= 50 then '库存正常'
    else '库存积压'
end as 库存
from book;

计算列值

select 图书编号,订购册数*订购单价 as 订购金额 
from sell
where 是否发货 = '已发货';

消除结果中重复的行

--比如学生表里的专业名与总学分可能有很多相同的

select distinct 图书类别,出版社
from book;
聚合函数
count(*|distinct|表达式)
select count(*) as 数量 from kc;

max(*|distinct|表达式)
select max(学分) as 最大值 from xs_kc;

min(*|distinct|表达式)
select min(学分) as 最大值 from xs_kc;

sum(*|distinct|表达式) --计算某个列所有值的总和
select sum(收入) from kc;

avg(*|distinct|表达式) --计算某个列所有值的平均值
select avg(收入) from kc;

比较运算符的几个注意
<>不等于
<=>相等或都等于空时为true,两个有一个空或不空但值不相同都为false
!=不等于

逻辑运算符

and && 与
or || 或
not ! 非
xor 异或运算 xy 如果x和y不相同,则返回true,相同则返回false

like运算符-模式匹配
_ 符号:通配任意单一字符
%符号:通配任意N个字符
例:查询members表中姓“张”的信息
select * from members
where name like '张%';
例:查询students表中学号倒数第二位是0的学生情况
select * from students
where 学号 like '%0_';
例:查询book书名包含下划线的图书
知识点补充(关键字):escape '#' 表示#后面是普通字符,即转义了,#号可以自定义
select * from book
where 书名 like '%#_%' escape '#';
范围比较(between 和 in)
select * from book
where 出版时间 between '2010-1-1' and '2010-12-31';
select * from book
where 出版社 in ('高等教育出版社','北京大学出版社','人民邮电大学出版社');
空值比较(is 和 is not)
select * from sell
where 是否发货 is null;

多表查询
不加条件的连接(xs表是学生表_无成绩字段,xs_kc表是课程表_无专业名字段)

select 专业名,成绩 from xs,xs_kc;
加条件的连接
理解:两个表中学号有不一样的,如果不加条件,则会把学号一样的和不一样的
学生专业名和成绩都查出来,加了条件后,只会把两个表中学号一样的学生(即同一个学生)的
专业名和成绩查出来。

select 专业名,成绩 from xs,xs_kc
where xs.学号 = xs_kc.学号;
join连接
两个表连接

select 书名,订购册数
from book inner joim sell
on book.图书编号 = sell.图书编号
where 书名 = '网页设计' and 订购册数 > 5;
多个表连接

select book.图书编号,会员名,书名,订购册数
from sell join book on book.图书编号 = sell.图书编号
join member on sell.身份证号 = member.身份证号
where 书名 = '网页程序设计' and 订购册数 > 5;
自表连接
理解:连接的两个表都是一个表,只不过给起了别名来区分
使用情况:比如查询sell表中,图书编号相同,但订单号不同的图书的订购用户

select a.订购用户 from sell as a join sell as b
on a.图书编号 = b.图书编号
where a.订单号 != b.订单号;
using子句

当连接的表中列名相同,且连接的条件就是列名相等,可以用using

select distinct 会员姓名
from members join sell using(身份证号);
子查询
在where子句里套select,用in来效验where里的select查询结果

--格式
expression [not] in (subquery)

select * frrom sell
where 身份证号 in (select 身份证号 from members where 会员姓名 = '张三');
分类汇总与排序
group by子句

group by 子句用于根据字段来分组。例如根据学生专业名来分组

select count(专业名) from xs
group by 专业名;
having子句

该子句用在gruop by子句后,通常搭配聚合函数使用

--查询订购单数在2笔以上的人的身份证号
select 身份证号 from sell
group by 身份证号 having 订购单数 > 2;
order by 子句

这个子句是用来对查询结果排序的,ASC表示升序,DESC表示降序

select 成绩 from xs_kc
order by 成绩 DESC;
select 成绩 from xs_kc
order by 成绩 ASC;
limit子句

limit子句是select最后一个子句,用于限制select返回的行数

limit 5 --返回前5条记录
limit 3,5 --返回从第4条开始(包括第4条)的5条记录

最后修改:2022 年 03 月 27 日
感谢阅读此文章!